//+------------------------------------------------------------------+ //| Gartley Reversal Auto.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| http://forum.fxexpert.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://forum.fxexpert.ru" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Yellow extern int BarsCount=300; extern int depth=16; extern int deviation=5; extern int backstep=3; extern int maf=1; extern int info=0; extern int FontSize=8; extern int DeleteType=0; /*0-delete all objects, 1-keet all*, 2-keep targets, 3-keep targets and reverses*/ double PointX=0; double PointA=0; double PointB=0; double PointC=0; double PointD=0; double ReversalRangeMax=0; double ReversalRangeMin=0; double D_Revers1=0; double D_Revers3=0; double D_Revers2=0; double Target1=0; double Target3=0; double Target2=0; double zz=0; double zzp=0; int shift=0, Bars_=200, k=0, cnt=0; bool ft=true; bool ftp=true; double RevPoint[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //IndicatorBuffers(1); SetIndexStyle(0,DRAW_ARROW,EMPTY,EMPTY,Yellow); SetIndexArrow(0, 159); SetIndexBuffer(0,RevPoint); SetIndexLabel(0, "ZigZagE"); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- if (DeleteType==0) { ObjectDelete("D_Revers1"); ObjectDelete("D_Revers2"); ObjectDelete("D_Revers3"); ObjectDelete("D_Revers1_txt"); ObjectDelete("D_Revers2_txt"); ObjectDelete("D_Revers3_txt"); ObjectDelete("ReversalRangeMax"); ObjectDelete("ReversalRangeMin"); ObjectDelete("ReversalRangeMax_txt"); ObjectDelete("ReversalRangeMin_txt"); ObjectDelete("Target1"); ObjectDelete("Target2"); ObjectDelete("Target3"); ObjectDelete("Target1_txt"); ObjectDelete("Target2_txt"); ObjectDelete("Target3_txt"); } if (DeleteType==2) { ObjectDelete("D_Revers1"); ObjectDelete("D_Revers2"); ObjectDelete("D_Revers3"); ObjectDelete("D_Revers1_txt"); ObjectDelete("D_Revers2_txt"); ObjectDelete("D_Revers3_txt"); ObjectDelete("ReversalRangeMax"); ObjectDelete("ReversalRangeMin"); ObjectDelete("ReversalRangeMax_txt"); ObjectDelete("ReversalRangeMin_txt"); } if (DeleteType==3) { ObjectDelete("D_Revers1"); ObjectDelete("D_Revers2"); ObjectDelete("D_Revers3"); ObjectDelete("D_Revers1_txt"); ObjectDelete("D_Revers2_txt"); ObjectDelete("D_Revers3_txt"); } //---- Comment(""); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- int counted_bars=IndicatorCounted(); int limit; // ограничитель расчетов //---- if (counted_bars==0) limit=Bars-1; // посчитанных баров еще нет, будет считать с самого начала if (counted_bars>0) limit=Bars-counted_bars-1; // вычтем из числа доступных баров количество //посчитанных баров и уменьшим на единицу if (ftp) {Comment(" "); ftp=false; } for(shift=limit; shift>0; shift--) { if (maf==0) {PointX=0;} zz=iCustom(NULL, 0, "ZigZag",depth,deviation,backstep,0,shift); if ((ft) || (zz!=0)) { k=0; for(cnt = shift; cnt