//[i]Zigzag.带解读 //指标属性设置
#property indicator_chart_window // 主窗口进行指标显示 #property indicator_buffers 1 // 指标运用到数值的个数 #property indicator_color1 Yellow // 指标显示颜色 //三个参数
extern int 跨期 = 12; // 用于设置高低点是相对与过去多少个Bars。默认是12
extern int ExtDeviation = 5; // 用于设置重新计算高低点时,与前一高低点的相对点差(默认值是5), 也就是说如果
// A)当前高点>上个高点+ 5 , 或者
// B)当前低点<上个低点 – 5的情况下,则会对之前计算过的ExtBacksteps个Bars值的高低点进行重新计算。
extern int ExtBackstep = 3; // 用于设置回退计算的Bars的个数 //指标的数值存储变量
double 之字折线组[]; // 拐点
double 选择性极高[]; // 高点的临时变量数组 double 选择性极低[]; // 低点的临时变量数组 int level = 3; // 最近已知的三个拐点 bool downloadhistory = false; // 是否第一次计算
//+-------------------------------------------------------------------------------+ int init() {
IndicatorBuffers(3); // 对于缓冲储存器分配记忆应用自定义指标计算 SetIndexStyle(0, DRAW_SECTION); // 划线的风格 为线段
SetIndexBuffer(0, 之字折线组); // 将数组之字折线组 对应到索引号为0的缓存上 SetIndexBuffer(1, 选择性极高); // 将数组选择性极高 对应到索引号为1的缓存上 SetIndexBuffer(2, 选择性极低); // 将数组选择性极低 对应到索引号为1的缓存上
//--设置图表划线空值, 只是不显示, 但0当作基准用. SetIndexEmptyValue(0, 0); //--设置指标的简称。
IndicatorShortName(\跨期+\
return(0); }
//+------------------------------------------------------------------+ int start() {
//--对临时变量定义 int i;
int 已计 = IndicatorCounted();
int limit; // limit:算法中所谓的开始计算位置; int counterZ; // counterZ:临时变量;
int 关注方向; // 关注方向:用于标识当前计算的是高点或者低点 int shift; // int back; // int lasthighpos; // int lastlowpos; // double 所取极端值; // double res; // double curlow; // double curhigh; // double lasthigh; // double lastlow; //
//--指标载入时已计为0,而downloadhistory为false,将在下一次价格变化时进行 if(已计==0 && downloadhistory){ ArrayInitialize(之字折线组, 0); ArrayInitialize(选择性极高, 0); ArrayInitialize(选择性极低, 0); }
//--初期化,第一次运行时limit为去掉跨期个图形最初的部分。(算法1.1) if(已计==0){
limit= Bars-跨期;
downloadhistory= true; }
// 如果之前已经计算过,找到最近已知的三个拐点(高点或低点),将计算位置设置为倒数第三个拐点。(算法1.2) if(已计>0){
while(counterZ counterZ++; i++; } // 在上面while中最后一次找到的时候进行+1,所以要-1才能得到真正第三个拐点处。 i--; //--计算位置赋值 limit= i; //--如果倒数第三个拐点是低点 (目标是为了寻找高点) if(选择性极低[i]!=0){ curlow= 选择性极低[i]; 关注方向= 1; } else{ curhigh= 选择性极高[i]; 关注方向= -1; } //--清空第三个拐点后的数值,准备重新计算最后的拐点 for(i=limit-1; i>=0; i--){ 之字折线组[i]= 0; 选择性极低[i]= 0; 选择性极高[i]= 0; } } //--算法Step2部分:计算高低点 for(shift=limit; shift>=0; shift--){ //--2.1计算跨期区间内的低点 所取极端值= Low[iLowest(NULL, 0, MODE_LOW, 跨期, shift)]; if(所取极端值==lastlow) 所取极端值= 0; else{ lastlow= 所取极端值; // 如果该低点是当前低点, //--是否比上个低点还低ExtDeviation,不是的话则不进行回归处理 if(Low[shift]-所取极端值>ExtDeviation*Point) 所取极端值= 0; //--找到一个新的低点 else{ for(back=1; back<=ExtBackstep; back++){ res= 选择性极低[shift+back]; // 回退ExtBackstep个Bar,把比当前低点高的纪录值给清空 if(res!=0 && res>所取极端值) 选择性极低[shift+back]= 0; } } } //--将新的低点进行记录 if(Low[shift]==所取极端值) 选择性极低[shift]= 所取极端值; else 选择性极低[shift]= 0; //--high 所取极端值= High[iHighest(NULL, 0, MODE_HIGH, 跨期, shift)]; if(所取极端值==lasthigh) 所取极端值= 0; else{ lasthigh= 所取极端值; if((所取极端值-High[shift])>(ExtDeviation*Point)) 所取极端值= 0; else{ for(back=1; back<=ExtBackstep; back++){ res= 选择性极高[shift+back]; if(res!=0 && res<所取极端值) 选择性极高[shift+back]= 0; } } } if(High[shift]==所取极端值) 选择性极高[shift]= 所取极端值; else 选择性极高[shift]= 0; } //--final cutting if(关注方向==0){ lastlow= 0; lasthigh= 0; } else{ lastlow= curlow; lasthigh= curhigh; } //--算法step3.定义指标的高低点 for(shift=limit;shift>=0;shift--){ res= 0; switch(关注方向){ //--初期化的情况下,尝试找第一个峰值或谷值 case 0: if(lastlow==0 && lasthigh==0){ //--发现高点 if(选择性极高[shift]!=0){ // (lastlow,lasthigh之前已经初始化,再次判断以保证正确性?) lasthigh= High[shift]; lasthighpos= shift; 关注方向= -1; // 下个寻找目标是低点 之字折线组[shift]= lasthigh; res= 1; } //--发现低点 if(选择性极低[shift]!=0){ lastlow= Low[shift]; lastlowpos= shift; 关注方向= 1; 之字折线组[shift]= lastlow; res= 1; } } break; //--如果在上个低点和下个高点间发现新的低点,则把上个低点抹去,将新发现的低点作为最后一个低点 case 1: if(选择性极低[shift]!=0 && 选择性极低[shift] 之字折线组[lastlowpos]= 0; lastlowpos= shift; lastlow= 选择性极低[shift]; 之字折线组[shift]= lastlow; res= 1; } if(选择性极高[shift]!=0 && 选择性极低[shift]==0){ lasthigh= 选择性极高[shift]; lasthighpos= shift; 之字折线组[shift]= lasthigh; 关注方向= -1; // 下一个目标将是寻找低点 res= 1; } break; //--寻找低点 case -1: if(选择性极高[shift]!=0 && 选择性极高[shift]>lasthigh && 选择性极低[shift]==0){ 之字折线组[lasthighpos]= 0; lasthighpos= shift; lasthigh= 选择性极高[shift]; 之字折线组[shift]= lasthigh; } if(选择性极低[shift]!=0 && 选择性极高[shift]==0){ lastlow= 选择性极低[shift]; lastlowpos= shift; 之字折线组[shift]= lastlow; 关注方向= 1; } break; default: return; } } return(0); } //+------------------------------------------------------------------+ 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MT4策略精讲:Zigzag.带解读在线全文阅读。
相关推荐: