理想之字折线 - MetaTrader 5脚本

这是一个简单但非常快的之字形。
没有暂停或错误的峰值。峰值检索已进行时间优化。

ZigZag 是根据通道原理绘制的。通道宽度可以以点 (IdealZZ) 或百分比 (IdealZZP) 为单位定义
峰值检索:
输入 整数通道宽度=100;#property Indicator_chart_window 日期时间最后一次;整数ZZ手柄;//+------------------------------------------------------------------+ //|自定义指标初始化函数 | //+------------------------------------------------------------------+ 空白 初始化时() { 上次时间=0; ZZ 手柄 =定制(_象征,时期(),《理想ZZ》,通道宽度); }//+------------------------------------------------------------------+ //| GetValue | //+------------------------------------------------------------------+ 布尔值获取值(双倍的目录,整数酒吧,整数上一篇吧,双倍的&顶峰,整数&peakBar,日期时间高峰时间&高峰时间,常量 日期时间&T[]) { 如果(目录<0) { 双倍的t[1]; 如果(0>=复制缓冲区(ZZ手柄,2,酒吧,1,t))返回 错误的; 整数我=数组B搜索(T,(日期时间)t[0]); 如果(i==上一个栏) { 如果(0>=复制缓冲区(ZZ手柄,2,酒吧+1,1,t))返回 错误的; 我=数组B搜索(T,(日期时间)t[0]); } 双倍的v[1]; 如果(0>=复制缓冲区(ZZ手柄,1,我,1,v))返回 错误的; 如果(v[0]==空_VALUE) { 如果(0>=复制缓冲区(ZZ手柄,2,酒吧+1,1,t))返回 错误的; 我=数组B搜索(T,(日期时间)t[0]); 如果(0>=复制缓冲区(ZZ手柄,1,我,1,v))返回 错误的; } 峰值=v[0]; 峰值栏=i; 高峰时间=(日期时间)t[0]; } 别的 如果(目录>0) { 双倍的t[1]; 如果(0>=复制缓冲区(ZZ手柄,3,酒吧,1,t))返回 错误的; 整数我=数组B搜索(T,(日期时间)t[0]); 如果(i==上一个栏) { 如果(0>=复制缓冲区(ZZ手柄,3,酒吧+1,1,t))返回 错误的; 我=数组B搜索(T,(日期时间)t[0]); } 双倍的v[1]; 如果(0>=复制缓冲区(ZZ手柄,0,我,1,v))返回 错误的; 如果(v[0]==空_VALUE) { 如果(0>=复制缓冲区(ZZ手柄,3,酒吧+1,1,t))返回 错误的; 我=数组B搜索(T,(日期时间)t[0]); 如果(0>=复制缓冲区(ZZ手柄,0,我,1,v))返回 错误的; } 峰值=v[0]; 峰值栏=i; 高峰时间=(日期时间)t[0]; } 别的 { 返回(错误的); } 返回(真的); }//+------------------------------------------------------------------+ //| GetValue | //+------------------------------------------------------------------+ 空白设置点(细绳姓名,双倍的价格,日期时间时间) { 对象创建(0,姓名,OBJ_箭头,0、时间、价格); 对象集整数(0,姓名,OBJPROP_ARROWCODE,108); 对象集双精度(0,姓名,OBJPROP_PRICE,价格); 对象集整数(0,姓名,OBJPROP_TIME,时间); }//+------------------------------------------------------------------+ //|自定义指标迭代函数 | //+------------------------------------------------------------------+ 整数 计算时(常量 整数费率_总计, 常量 整数先前计算的, 常量 日期时间&T[], 常量 双倍的&打开[], 常量 双倍的&高的[], 常量 双倍的&低的[], 常量 双倍的&关闭[], 常量 长的&tick_volume[], 常量 长的&体积[], 常量 整数&传播[]) { 如果(上次时间==T[0])返回(费率_总计); 最后时间=T[0]; 数组集为系列(T,真的); 双倍的目录_[1]; 如果(0>=复制缓冲区(ZZ手柄,4,1,1,dir_))返回费率_总计; 双倍的目录=目录_[0]; 双倍的rdir=-dir; 如果(目录==空_VALUE)返回(费率_总计); 双倍的v1,v2,v3,v4,v5; 整数 i1,i2,i3,i4,i5; 日期时间t1,t2,t3,t4,t5; 如果( 获取值(目录,1,0,v1,i1,t1,T) && 获取值(rdir,i1,0,v2,i2,t2,T) && GetValue(dir,i2,i1,v3,i3,t3,T) && GetValue(rdir,i3,i2,v4,i4,t4,T) && 获取值(目录,i4,i3,v5,i5,t5,T) ) { 设置点(“1”,v1,t1); 设置点(“2”,v2,t2); 设置点(“3”,v3,t3); 设置点(“4”,v4,t4); 设置点(“5”,v5,t5); 打印(v1,“ ”,v2,“ ”,v3,“ ”,v4,” “,v5,” “,i1,“ ”,i2,“ ”,i3,” “,i4,” “,i5); } 别的 { 打印(“似乎有错误......”); } 返回(费率_总计); }//+------------------------------------------------------------------+
此示例是一个标记(每条柱一次)前五个峰值(包括当前形成的峰值)的指标。
注意力!如果启用零条模式,代码可能无法正常工作
该模式可以在 DrawZeroBar 变量代码中启用。默认情况下它是禁用的。不建议启用它,特别是当该指标在 Expert Advisor 中使用时。
享受使用它的乐趣。请告诉我任何暴露的缺点。
附件下载
📎 idealzz.mq5 (7.33 KB)
📎 idealzzp.mq5 (7.33 KB)
Source: MQL5 #925
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
