20天平均振幅大于4的选股公式.
20天平均振幅大于4的选股公式(通达信)
经常做T+0的股友,一定很关心振幅,振幅越大,做T+0越方便,成功率越高,特意转发一个有关振幅的公式,在此谢谢编写者。
怎样才能知道一个股票二十天日平均振幅
1,右键点住你要看的股票起的那一天到20天了(20个k线)再松手,会出现区间统计,点开,涨幅,
振幅,换手,最高,最低等都会有的。
2,可编辑一个公式得到。首先计算“单日振幅”,然后用“单日振幅”求20日的移动平均就可以了。
3,振幅=(当天的最高价格-最低价格)/昨天收盘价格*100%。股票振幅就是股票开盘后的当日最高价
和最低价之间的差的绝对值与前日收盘价的百分比,它在一定程度上表现股票的活跃程度。如果一只
股票的振幅较小,说明该股不够活跃,反之则说明该股比较活跃。股票振幅分析有日振幅分析、周振
幅分析、月振幅分析等等类型。
连续三天振幅在5%的选股公式,谢谢~
本文介绍如何为增强的视频呈现器编写自定义演示器 (EVR) 。 自定义演示者可以同时与 DirectShow 和 Media Foundation 一起使用;接口和对象模型对于这两种技术都是相同的,尽管确切的操作顺序可能会有所不同。
本主题中的示例代码改编自 Windows SDK 中提供的 。
在编写自定义演示者之前,应熟悉以下技术:
本部分包含演示者对象模型和接口的概述。
EVR 使用两个插件组件来呈现视频:混音器和演示者。 混音器混合视频流,并根据需要取消交错视频。 演示者绘制 (或 演示 视频) 显示,并在绘制每个帧时安排。 应用程序可以将其中任一对象替换为自定义实现。
EVR 有一个或多个输入流,混音器具有相应的输入流数。 流 0 始终是 引用流。 其他 流是子流,混合器 alpha 混合到引用流中。 参考流确定复合视频的主帧速率。 对于每个参考帧,混音器从每个子流获取最新的帧,alpha 将它们混合到参考帧上,并输出单个复合帧。 如果需要,混音器还执行从 YUV 到 RGB 的反交错和颜色转换。 无论输入流数或视频格式如何,EVR 始终将混音器插入视频管道。 下图演示了此过程。
在任何时候,演示者处于以下状态之一:
在本主题中的示例代码中,演示者状态由枚举表示:
演示者处于关闭状态时,某些操作无效。 示例代码通过调用帮助程序方法检查此状态:
实现以下接口需要演示者:
还可以为应用程序提供与演示者通信的接口。 标准演示者为此实现了 接口。 可以实现此接口或定义自己的接口。 应用程序通过调用
接口包含一个返回设备 GUID 的方法 。 设备 GUID 可确保演示者和混音器使用兼容的技术。 如果设备 GUID 不匹配,则 EVR 无法初始化。
标准混音器和演示者都使用 Direct3D 9,设备 GUID 等于 IID_IDirect3DDevice9。 如果打算将自定义演示者与标准混音器一起使用,则必须 IID_IDirect3DDevice9演示者的设备 GUID。 如果替换这两个组件,则可以定义新的设备 GUID。 本文的其余部分假定演示者使用
即使演示者关闭,该方法也应成功。
接口使演示者能够从 EVR 和混音器获取接口指针,如下所示:
方法类似于 方法。 这两种方法都采用服务 GUID 和接口标识符 (IID) 作为输入,但 LookupService 返回接口指针数组,而 GetService 返回单个指针。 但是,在实践中,始终可以将数组大小设置为 1。 查询的对象取决于服务 GUID:
在 的实现中,从 EVR 获取以下接口:
从混音器中获取以下接口:
当从 获取的接口指针不再有效时,EVR 调用 。 在此方法中,释放所有接口指针,并将演示者状态设置为关闭:
EVR 出于各种原因调用 ,包括:
在演示者的生存期内,EVR 可能会多次调用 和
接口继承 ,并添加两种方法:
方法返回演示者的媒体类型。 (有关设置媒体类型的详细信息,请参阅 ”。) 媒体类型作为 接口指针返回。 以下示例假定演示者将媒体类型存储为 指针。 若要从媒体类型获取 IMFVideoMediaType 接口,请调用 QueryInterface:
方法是 EVR 与演示者通信的主要机制。 定义了以下消息。 本主题的其余部分提供了实现每个消息的详细信息。
混音器的输出媒体类型无效。 演示者应与混音器协商新的媒体类型。 请参阅 。 |
流式处理已开始。 此消息不需要执行任何特定操作,但你可以使用它来分配资源。 |
混音器已收到新的输入样本,并可能能够生成新的输出帧。 演示者应在混音器上调用 。 请参阅 。 |
演示文稿已结束。 请参阅 。 |
EVR 正在刷新其呈现管道中的数据。 演示者应放弃计划用于演示的任何视频帧。 |
请求演示者向前推进 N 帧。 演示者应放弃下一个 N-1 帧并显示第 N 帧。 请参阅 。 |
演示者必须实施 接口,作为 实现的一部分,该接口继承 了 IMFClockStateSink。 每当 EVR 的时钟更改状态时,EVR 都使用此接口通知演示者。 有关时钟状态的详细信息,请参阅 。
下面是实现此接口中方法的一些准则。 如果演示者关闭,所有方法都应失败。
为了支持除 1× 速度以外的播放速率,演示者必须实现 接口。 下面是实现此接口中方法的一些准则。 关闭演示者后,所有方法都应失败。 有关此接口的详细信息,请参阅 。
返回零,指示没有最小播放速率。 |
对于非精简播放,播放速率不应超过监视器的刷新速率: 最大速率 = ( Hz) / 视频帧速率 (fps) 。 视频帧速率在演示者的媒体类型中指定。 对于精简播放,播放速率不受限制;返回 值FLT_MAX。 实际上,源和解码器将是精简播放期间的限制因素。 对于反向播放,返回最大速率的负值。 |
如果 flRate 的绝对值超过演示者的最大播放速率,则返回MF_E_UNSUPPORTED_RATE。 计算 描述的最大播放速率。 |
以下示例演示如何实现 方法:
前面的示例调用帮助程序方法 GetMaxRate 来计算最大转发播放速率:
以下示例演示如何实现 方法:
演示者必须通知 EVR 各种事件。 为此,它使用 EVR 的 接口,当 EVR 调用演示者的
下表列出了演示者发送的事件以及事件参数。
有关详细信息,请参阅 。 |
有关详细信息,请参阅 。 |
发生需要流式处理才能停止的错误。 |
指定演示者呈现每个帧所花费的时间量。 (可选。)
|
指定呈现示例中的当前滞后时间。 如果值为正值,则样本会落后于计划。 如果值为负值,则样本提前。 (可选。)
|
如果播放速率为零 ,则立即在EC_STEP_COMPLETE 后发送。 此事件包含显示的帧的时间戳。 有关详细信息,请参阅 。 |
演示者已完成或取消帧步骤。 有关详细信息,请参阅 。 文档的早期版本错误地描述了 Param1 。 此参数不用于此事件。 |
在混音器上调用 以获取可能的输出类型。 此类型描述混音器可以生成的格式,给定图形设备的输入流和视频处理功能。
检查演示者是否可以将此媒体类型用作其呈现格式。 以下是要检查的一些事项,尽管实现可能有自己的要求:
如果类型不可接受,请返回到步骤 1 并获取混音器的下一个建议类型。
创建一个新的媒体类型,该类型是原始类型的克隆,然后更改以下属性:
若要测试混音器是否接受修改后的输出类型,请使用MFT_SET_TYPE_TEST_ONLY标志调用 。 如果混音器拒绝该类型,请返回到步骤 1 并获取下一个类型。
分配 Direct3D 图面池,如 中所述。 当混合器绘制复合视频帧时,混音器将使用这些图面。
通过调用不带标志的 在混音器上设置输出类型。 如果对 SetOutputType 的第一次调用在步骤 4 中成功,则该方法应再次成功。
如果混音器类型耗尽, 方法将返回 MF_E_NO_MORE_TYPES。 如果演示者找不到适合混音器的输出类型,则无法呈现流。 在这种情况下,DirectShow或媒体基础可能会尝试其他流格式。 因此,演示者可能会连续接收多个 MFVP_MESSAGE_INVALIDATEMEDIATYPE 消息,直到找到有效的类型。
混音器自动将视频装箱,考虑到源和目标的 PAR (像素纵横比) 。 为了获得最佳效果,表面宽度和高度和几何光圈应等于你希望视频在显示器上显示的实际大小。 下图演示了此过程。
以下代码显示了该过程的大纲。 某些步骤放置在帮助程序函数中,具体细节将取决于演示者的要求。
有关视频媒体类型的详细信息,请参阅 。
演示者创建 Direct3D 设备并在流式处理过程中处理任何设备丢失。 演示者还托管 Direct3D 设备管理器,它为其他组件使用相同的设备提供了一种方法。 例如,混音器使用 Direct3D 设备混合子流、取消交错和执行颜色调整。 解码器可以使用 Direct3D 设备进行视频加速解码。 (有关视频加速的详细信息,请参阅 .)
若要设置 Direct3D 设备,请执行以下步骤:
如果另一个管道组件需要设备管理器,它会在 EVR 上调用 ,为服务 GUID 指定 MR_VIDEO_ACCELERATION_SERVICE 。 EVR 将请求传递给演示者。 对象获取 指针后,可以通过调用 来获取设备的句柄。 当对象需要使用设备时,它将设备句柄传递给
创建设备后,如果演示者销毁设备并创建一个新设备,则演示者必须再次调用 。 ResetDevice 方法使任何现有设备句柄失效,这会导致 返回DXVA2_E_NEW_VIDEO_DEVICE。 此错误代码使用设备向其他对象发出信号,指出它们应打开新的设备句柄。 有关使用设备管理器的详细信息,请参阅 。
演示者可以在窗口模式或全屏独占模式下创建设备。 对于窗口模式,应为应用程序提供指定视频窗口的方法。 标准演示者为此实现了 方法。 首次创建演示者时,必须创建设备。 通常,目前你不知道所有设备参数,例如窗口或后退缓冲区格式。 可以创建临时设备,稍后将其替换&#;只需记住在设备管理器上调用
演示者设置媒体类型后,可以分配 Direct3D 图面,混音器将使用该图面来写入视频帧。 图面必须与演示者的媒体类型匹配:
分配图面的建议方式取决于演示者是窗口运行还是全屏运行。
如果为 Direct3D 设备开窗,则可以创建多个交换链,每个交换链都有一个后退缓冲区。 使用此方法可以独立呈现每个图面,因为呈现一个交换链不会干扰其他交换链。 混音器可以将数据写入图面,同时计划另一个图面进行演示。
首先,确定要创建的交换链数。 建议至少使用三个。 对于每个交换链,请执行以下操作:
在全屏独占模式下,设备不能有多个交换链。 创建全屏设备时,将隐式创建此交换链。 交换链可以有多个后退缓冲区。 但是,遗憾的是,如果在写入同一交换链中的另一个后退缓冲区时存在一个后退缓冲区,则无法轻松协调这两个操作。 这是因为 Direct3D 实现图面翻转的方式。 调用 Present 时,图形驱动程序会更新图形内存中的图面指针。 如果在调用
最简单的选项是为交换链创建一个视频示例。 如果选择此选项,请按照为窗口模式指定的相同步骤操作。 唯一的区别是示例队列包含单个视频示例。 另一种方法是创建屏幕外图面,然后将它们点亮到后缓冲区。 你创建的图面必须支持 方法,混音器用于复合输出帧。
演示者首先分配视频示例时,它会将它们置于队列中。 演示者每当需要从混音器中获取新帧时,都从此队列中绘制。 混音器输出帧后,演示者会将样本移到第二个队列中。 第二个队列用于等待其计划的演示时间的示例。
为了更轻松地跟踪每个示例的状态,视频示例对象实现 接口。 可按如下所示使用此接口:
在演示者中实现 接口。
在将示例置于计划队列之前,请查询 接口的视频示例对象。
使用指向回调接口的指针调用 。
当示例准备好演示时,请将其从计划队列中删除、演示该示例并释放对该示例的所有引用。
该示例调用回调。 (在这种情况下,示例对象不会被删除,因为它在调用回调之前本身保留引用计数。)
在回调中,将示例返回到可用队列。
使用 跟踪样本不需要演示者;可以实现最适合设计的任何技术。 IMFTrackedSample 的一个优点是,可以将演示者的计划和呈现函数移到帮助程序对象中,并且这些对象在发布视频示例时不需要任何特殊的机制来回叫演示者,因为示例对象提供了该机制。
以下代码演示如何设置回调:
在回调中,对异步结果对象调用 以检索指向示例的指针:
每当混音器收到新的输入样本时,EVR 就会向演示者发送 MFVP_MESSAGE_PROCESSINPUTNOTIFY 消息。 此消息指示混音器可能具有要传送的新视频帧。 对此,演示者在混音器上调用 。 如果方法成功,演示者将计划演示示例。
若要从混音器获取输出,请执行以下步骤:
检查时钟状态。 如果时钟暂停,请忽略 MFVP_MESSAGE_PROCESSINPUTNOTIFY 消息,除非这是第一个视频帧。 如果时钟正在运行,或者这是第一个视频帧,请继续。
从可用示例队列中获取示例。 如果队列为空,则表示当前计划演示所有已分配的样本。 在这种情况下,暂时忽略 MFVP_MESSAGE_PROCESSINPUTNOTIFY 消息。 当下一个示例可用时,请重复此处列出的步骤。
(Optional.) 如果时钟可用,请通过调用 获取当前时钟时间
在混音器上调用 。 如果 ProcessOutput 成功,示例包含视频帧。 如果该方法失败,请检查返回代码。 ProcessOutput 中的以下错误代码不是关键故障:
混音器需要更多输入,然后才能生成新的输出帧。 如果收到此错误代码,请检查 EVR 是否已到达流的末尾并相应地做出响应,如 中所述。 否则,请忽略此 MF_E_TRANSFORM_NEED_MORE_INPUT 消息。 当混音器获得更多输入时,EVR |
混音器的输出类型可能由于上游格式更改而失效。 如果收到此错误代码,请将演示者的媒体类型设置为 NULL。 EVR 将请求新格式。 |
混音器需要新的媒体类型。 如果收到此错误代码,请重新谈判混音器的输出类型,如 中所述。 |
(Optional.) 如果时钟可用,请获取当前时钟时间 (T2) 。 混音器引入的延迟量 (T2T1 - ) 。 将具有此值 的EC_PROCESSING_LATENCY 事件发送到 EVR。 EVR 使用此值进行质量控制。 如果没有可用的时钟,则无法发送
在演示者从混音器获取任何输出之前,此步骤序列可以终止。 为了确保不会删除任何请求,应在发生以下情况时重复相同的步骤:
此方法 ProcessInputNotify
设置一个布尔标志来记录混音器具有新输入的事实。 然后,它会调用 ProcessOutputLoop
下一个示例中所示的方法。 此方法尝试从混音器中提取尽可能多的样本:
有关此示例的一些备注:
TrackSample
回调的方法显示在 ”部分中。
有时演示者可能需要重新绘制最新的视频帧。 例如,标准演示者在以下情况下重新绘制帧:
使用以下步骤请求混音器重新创建最新的帧:
重新绘制帧时,可以忽略演示文稿时钟并立即显示帧。
视频帧可以随时到达 EVR。 演示者负责根据帧的时间戳在正确的时间呈现每个帧。 当演示者从混音器中获取新样本时,它将样本置于计划队列中。 在单独的线程上,演示者会不断从队列的头获取第一个示例,并确定是否:
若要获取视频帧的时间戳,请调用视频示例中的 。 时间戳相对于 EVR 的表示时钟。 若要获取当前时钟时间,请调用 。 如果 EVR 没有演示文稿时钟,或者示例没有时间戳,可以在获取示例后立即显示该示例。
若要获取每个示例的持续时间,请调用 。 如果示例没有持续时间,可以使用 函数从帧速率计算持续时间。
安排示例时,请记住以下事项:
以下示例计算示例相对于演示文稿时钟的早期或迟到时间:
演示文稿时钟通常由系统时钟或音频呈现器驱动。 (音频呈现器从声卡使用 audio.) 的速率派生时间,通常演示文稿时钟不会与监视器的刷新速率同步。
如果 Direct3D 演示文稿参数为演示文稿间隔指定 D3DPRESENT_INTERVAL_DEFAULT 或 D3DPRESENT_INTERVAL_ONE ,则 “演示 ”操作将等待监视器的垂直回溯。 这是防止撕裂的简单方法,但降低了计划算法的准确性。 相反,如果呈现间隔
以下函数可帮助你获取准确的计时信息:
本部分假定你为每个图面创建了单独的交换链,如 中所述。 若要演示示例,请从视频示例获取交换链,如下所示:
以下代码演示了这些步骤:
源矩形是要显示的视频帧部分。 它相对于规范化坐标系进行定义,其中整个视频帧占用了坐标 {0, 0, 1, 1} 的矩形。 目标矩形是绘制视频帧的目标图面中的区域。 标准演示者允许应用程序通过调用 来设置这些矩形。
有多种选项可用于应用源矩形和目标矩形。 第一个选项是让混音器应用它们:
Present 方法中应用目标矩形。
如果应用程序更改目标矩形或调整窗口大小,则可能需要分配新图面。 如果是这样,则必须小心地将此操作与计划线程同步。 刷新计划队列,并在分配新图面之前放弃旧示例。
EVR 上的每个输入流都已结束时,EVR 会将 MFVP_MESSAGE_ENDOFSTREAM 消息发送到演示者。 但是,在收到消息时,可能还有一些待处理的视频帧。 在响应流结束消息之前,必须从混音器中清空所有输出,并显示所有剩余帧。 显示最后一帧后,将 EC_COMPLETE 事件发送到 EVR。
下一个示例演示了满足各种条件时发送 EC_COMPLETE 事件的方法。 否则,它会返回S_OK而不发送事件:
AreSamplesPending
就假定返回 TRUE 。
EVR 旨在支持媒体基金会中的帧单步执行DirectShow和清理。 框架单步执行和清理在概念上相似。 在这两种情况下,应用程序一次请求一个视频帧。 在内部,演示者使用相同的机制来实现这两个功能。
DirectShow中的帧单步执行,如下所示:
媒体基础中的清理工作如下所示:
收到 MFVP_MESSAGE_STEP 消息后,演示者等待目标帧到达。 如果步骤数为 N,演示者将丢弃下一个 (N - 1 个) 样本,并显示第 N 个样本。 演示者完成帧步骤后,它会将 事件发送到 EVR, lParam1 设置为 FALSE。 此外,如果播放速率为零,则演示者会发送 事件。 如果 EVR 在帧步骤操作仍挂起时取消帧单步执行,则演示者会发送一个设置为 TRUE的 EC_STEP_COMPLETE 事件。
应用程序可以多次帧步骤或清理,因此演示者可能会在收到MFVP_MESSAGE_CANCELSTEP消息之前接收多个MFVP_MESSAGE_STEP消息。 此外,演示者可以在时钟开始或时钟运行时接收 MFVP_MESSAGE_STEP 消息。
本部分介绍实现帧步进的算法。 帧单步执行算法使用以下变量:
step_count。 一个无符号整数,指定当前帧单步执行操作中的步骤数。
step_state。 在任何时间,演示者都可以在帧单步执行方面处于以下状态之一:
演示者已收到 MFVP_MESSAGE_STEP 消息,并且时钟已启动,但演示者正在等待接收目标帧。 |
演示者已收到目标帧,并已安排它进行演示,但尚未显示该帧。 |
演示者已呈现目标帧并发送 事件,并正在等待下一个 MFVP_MESSAGE_STEP 或 |
这些状态独立于 状态。
为帧单步算法定义了以下过程:
按如下所示调用这些过程:
以下流程图显示了帧单步执行过程。
实现演示者后,下一步是将 EVR 配置为使用它。
在DirectShow应用程序中,按如下所示在 EVR 上设置演示者:
在 Media Foundation 中,有多个选项,具体取决于是创建 EVR 媒体接收器还是 EVR 激活对象。 有关激活对象的详细信息,请参阅 。
对于 EVR 媒体接收器,请执行以下操作:
对于 EVR 激活对象,请执行以下操作:
调用 以创建激活对象。
在激活对象上设置以下属性之一:
(可选)在激活对象上设置 属性。