在MT5下利用python作策略统计分析-ZigZag线段统计
接续上篇的 python 数据统计,大部分喜欢使用 ZigZag 指标的交易者都知道(如下图 GBPUSD H1 叠加 ZigZag 指标),这个指标是有未来性的,也就是随着行情突破前高前低,最后的指标线段是会重绘的。
但是这个未来性的指标还是具有参考价值的,从 ZigZag 指标源码里可以看的,在下图的 3 到 4 直接的线段是不会再改变的。
如果统计过去从 2017-2020 GBPUSD H1 ZigZag 的不再变动的线段长度,可以得到:
上涨线段最大长度为 846.0 pips (截图的输出单位是小点, point), 最小长度是 19.7 pips
下跌线段最大长度为 679.3 pips,最小长度是 15.0 pips
得到这样跨度甚大的数组,自然需要用统计学里的 Gaussian kernel density estimation 来区分开这些长度统计的分布。python 丰富的统计和绘图库只要简单几行代码就可以生成下面的图形:
蓝色是上涨线段的分布线,橘色是下跌线段的分布线。可以清楚的看的上涨或下跌线段,概率最高是分布在 80 pips,表示大部分 GBPUSD H1 ZigZag 线段约略这个长度,大于 100 pips 后,概率就大幅的衰减。
这个统计结果表示,大部分行情是在一个宽幅范围内震荡,只有少数行情可以走出一个像样的连续趋势行情,这是符合市场行情的实际观察。不过如要生成交易策略,顺势交易者和逆势交易者,看到这样的统计结论,产生的策略恐怕会有很大的不同。
这类的指标统计如果放到 python 来写,最常遇到的问题是,mt5 的内建指标库和 python 在网上可以找到现成的第三方指标代码库,有些执行结果是一样,有些是不太相同,例如这次统计使用的 ZigZag 指标。对于执行不同的指标,为确保和 mt5 端对应的策略做对比,最好是从 mql5 指标源码再作转写。
mt5 官方 python 函数里返回的 K 线 numpy array 是从行情最左边 K 线为 row index=0 ,最右边是数组最大 row index,这点和 mql5 自带指标里的官方提供的指标代码的数组处理顺序是一样的,也就是 mql5 术语的 array series 是默认 false,和 mql4 自带指标默认数组顺序是 true 不同。所以如需自行转写 mt5 自带指标到 python 指标,从 mql5 自带指标代码来转写,会比从 mql4 自带指标代码转写减少数组反向处理。
个人提供 MT4/MT5 EA 或 指标定制编程代写服务,有兴趣可扫描下方二维码添加晓辉编程微信,进一步沟通。