量化交易软件:通用的之字转向指标

简介

之字转向指标(图1)是在赫兹量化用户中最流行的指标之一,现今已经开发出了多种多样的之字转向指标。然而,它们其中的一些非常慢,这使得无法把它们用于创建EA交易。其他一些经常出错,这让用它们作观察都非常困难。对于那些运行速度快而且没有错误的指标,在使用它们开发EA交易或者另外的指标时使用还比较复杂,出现这种情况是因为展开和解释之字转向指标的数据还不是那么容易。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图 1. 之字转向(ZigZag)指标 本文探讨了绘制之字转向指标的需求,以及绘制它的不同方法,得出结论并获得了一种统一的算法,这种算法将用于作为创建通用指标的基础,这使得可以通过属性窗口来选择不同的之字转向类型。 在指标的开发中将使用面向对象的编程。将会为绘制不同阶段的之字转向指标创建多个基类,对每个阶段将创建多个子类。把基类和子类分开,这样可以使创建不同的新的之字转向类型变得尽可能简单。 除了绘制之字转向本身,本文还将致力于使用得到的指标来开发其他的指标和EA交易,当前的任务是确保可以从之字转向指标中取得数据,并且可以把它作为其他算法的一部分,不会很复杂和耗时。 之字转向指标的特性 之字转向(图1)指标是一条连接局部高价和低价之间的折线,初学者可能马上想到: 能够在底部买入而在顶部卖出就好了!这种想法看起来当然很诱人,但是之字转向只有在历史中才看起来那样诱人,在现实中,情况是有些不一样的。很明显,只要后面有几个柱,就可能形成与之前比较的新高或者新低,图2显示了一种情形,当时指标的最后阶段停止了构造(改变),价格反转并且走向相反的方向(向上)。

编辑

添加图片注释,不超过 140 字(可选)

图 2. 之字转向方向向下,而价格反转向上 但是,又过了几个柱,价格下跌了(图 3), 之字转向的最后一段又继续向下了。

编辑

添加图片注释,不超过 140 字(可选)

图 3. 价格继续下跌,而最后一段之字转向恢复了它的造型 这一次,指标达到了它的最小值,但是这只能在几个柱之后再被确认 (图 4).

编辑

添加图片注释,不超过 140 字(可选)

图 4. 之字转向指标又用了10个柱来画出新的向上的段落,这样才形成了底部 之字转向的这些特点在图5中很好地做了解释。彩色点指出了之前的顶部或者底部构成时的柱,指标会在用蓝色点标出的柱开始绘出新的向上线段,而在用红色点标出的柱开始绘出新的向下的线段。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图5,红色点和蓝色点指出了之字转向开始出现时的柱 尽管有这样的特征,之字转向指标并没有失去它的流行和吸引力,至少,它被大量应用在图表的可视化分析中,帮助过滤噪音并且侦测价格变化的主要方向。在更加实用的应用程序中,该指标可以用于侦测支撑/阻力水平或者用于识别模式。并且,它可以被用于绘制趋势线,就像任何其他用于技术分析的图形工具一样,与斐波那契水平线、扇形线等等类似。这里无法列出交易者复杂使用之字转向指标的所有方法。

绘制之字转向的不同方法

显然,之字转向有两种状态: 它的方向向上或者向下。当线的方向是向上时 — 监视价格看是否有新高出现, 而当线的方向是向下时 — 等待新低的出现。还需要监视看是否满足条件指示有方向的改变,所以,为了画出一条之字转向,需要做的是:

  1. 获取源数据;

  2. 构建线形改变方向的条件公式;

  3. 监视价格新高和新低的出现。

源数据可以是单独一个序列 (例如,柱的收盘价) 或者两个序列 (例如,柱的最高价和最低价),如果使用了一个数据序列,它可以不仅使用收盘价,而且可以是任何指标,震荡指标或者移动平均。当根据指标数据绘制之字转向时,也可能使用两个数据序列: 一个是基于柱的最高价的指标数据,而另一个是基于柱的最低价的数据。

方向改变的条件是最重要的一点,它定义了之字转向的不同类型。这些条件可能有很大的不同。例如,这样的条件可以是根据当前柱与n个柱的最高价/最低价做比较而构成,换句话说,如果当前柱的源数据的值是最近n个柱的最大值或者最小值,这就定义了之字转向的方向。这个原则应用在经典的之字转向指标中。另一个方法 — 根据从固定最大值或者最小值回滚的大小。回滚的大小可以以点数衡量 (如果源序列为价格) 或者是约定的单位 (如果是某些指标)。可以使用的方法并不局限于这两种,也可以使用任何指标判断方向 — 如随机震荡指标, ADX, 等等。如果随机震荡指标在50以上,之字转向指标就指向上方,如果它低于50 - 就指向下方。现在,根据 ADX 判断方向:如果 PDI 线在 MDI 线上方,之字转向线就指向上方,如果 PDI 低于 MDI,就指向下方。 这样,为第一点和第二点通过组合不同的变化,就能获得各种不同的之字转向。另外,当然还可以使用 RSI 数据用于第一点而根据随机震荡指标来判断方向,以此类推。第三点只对看起来类似于之字转向的指标有必要,尽管绘制选项可以有很大不同。 因为赫兹量化这里的任务是获得一个通用指标,有必要尽可能小心地把算法分成两个部分: 对于所有之字转向都同样的部分 (把它称为共用部分) 以及依赖于之字转向的不同部分 (把它称为个体部分)。个体部分使用源数据填充指标缓冲区: 价格或者指标数据。另一个缓冲区 (决定之字转向线的方向)用1或者-1值来填充。这三个缓冲区传给共用部分,在其中会使用它们绘制指标本身。 为了使过程更加清楚,首先创建一个单独的指标,它基于柱的最高/最低价,并且根据第n个柱的最高/最低价来改变放向。 基于最高价/最低价的简单之字转向指标 在 MetaEditor 中创建一个新指标 (主菜单 — 文件 — 新建或者按下 Ctrl+N). 在指标创建向导中,输入名称“iHighLowZigZag”,创建一个外部参数 "period" (int 类型, 数值为 12), 选择 OnCalculate(...,open,high,low,close) 事件处理函数, 创建一个缓冲区,名称为 "ZigZag" (Section 类型, 使用红色) 以及另外三个缓冲区,名称分别为 "Direction", "LastHighBar" 和 "LastLowBar" (line 类型, 颜色为 none)。 "ZigZag" 缓冲区将用于显示之字转向,其余的缓冲区是辅助的。对于所有的辅助缓冲区,在OnInit()函数中,调用SetIndexBuffer()函数把 INDICATOR_DATA 类型改为 INDICATOR_CALCULATIONS类型。在文件的顶部,修改 indicator_plots 属性的值: 把数值设为 1。在那以后,指标会只画一个 "ZigZag" 缓冲区, 并且指标不会画任何多余的线,但是同时,另外的缓冲区可以用来由 iCustom() 函数做处理。 首先,开始计算的柱的索引('start'变量)是在OnCalculate()函数中确定的,所以只有在指标开始的时候才会计算所有的柱,以后的计算只在每个新柱上进行。另外,还要初始化缓冲区的元素: int start; // 开始计算的柱的索引 if(prev_calculated==0) { // 在启动时 // 初始化缓冲区元素 DirectionBuffer[0]=0; LastHighBarBuffer[0]=0; LastLowBarBuffer[0]=0; start=1; // 从初始化之后的元素开始计算 } else { // 在运行中 start=prev_calculated-1; } } 现在,主指标循环: for(int i=start;i


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部