Здравствуйте! Помогите пожалуйста ! Написал индикатор, который рисует трендовые по системе Сперандео. Загвоздка в том, что он рисует несколько трендовых, а потом перестает рисовать... или пропускает вершины без видимой причины... Крутил код и так и так - посоветуйте, плиз, как сделать чтобы он рисовал неограниченное количество трендовых. //+------------------------------------------------------------------+ //| ZZ Dinapoli trend 2.mq4 | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Green #property indicator_width1 2 //---- input parameters extern int barn=500; extern int Length=6; extern color color_trend_A = LightGreen; extern bool ray=true; extern bool AlertsOn = false; //---- buffers double ExtMapBuffer1[]; double priceT[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexEmptyValue(0,0.0); //SetIndexDrawBegin(0, barn); SetIndexStyle(0,DRAW_SECTION); SetIndexBuffer(0,ExtMapBuffer1); SetIndexBuffer(0, priceT); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int shift,Swing,Swing_n,uzl,i,zu,zd,mv; double LL,HH,BH,BL,NH,NL; double Uzel[10000][3]; string text; // loop from first bar to current bar (with shift=0) Swing_n=0;Swing=0;uzl=0; BH =High[barn];BL=Low[barn];zu=barn;zd=barn; for (shift=barn;shift>=0;shift--) { LL=10000000;HH=-100000000; for (i=shift+Length;i>=shift+1;i--) { if (Low< LL) {LL=Low;} if (High>HH) {HH=High;} } if (Low[shift]<LL && High[shift]>HH){ Swing=2; if (Swing_n==1) {zu=shift+1;} if (Swing_n==-1) {zd=shift+1;} } else { if (Low[shift]<LL) {Swing=-1;} if (High[shift]>HH) {Swing=1;} } if (Swing!=Swing_n && Swing_n!=0) { if (Swing==2) { Swing=-Swing_n;BH = High[shift];BL = Low[shift]; } uzl=uzl+1; if (Swing==1) { Uzel[uzl][1]=zd; Uzel[uzl][2]=BL; } if (Swing==-1) { Uzel[uzl][1]=zu; Uzel[uzl][2]=BH; } BH = High[shift]; BL = Low[shift]; } if (Swing==1) { if (High[shift]>=BH) {BH=High[shift];zu=shift;}} if (Swing==-1) { if (Low[shift]<=BL) {BL=Low[shift]; zd=shift;}} Swing_n=Swing; } for (i=1;i<=uzl;i++) { //text=DoubleToStr(Uzel[1],0); //text=; mv=StrToInteger(DoubleToStr(Uzel[1],0)); ExtMapBuffer1[mv]=Uzel[2]; } double uroven1=High[1]; double uroven2=Low[1]; double price0=GetExtremumZZPrice("",0,0); int bar0=GetExtremumZZBar("",0,0); double price1=GetExtremumZZPrice("",0,1); int bar1=GetExtremumZZBar("",0,1); double price2=GetExtremumZZPrice("",0,2); int bar2=GetExtremumZZBar("",0,2); if ( ((price0>price2)&&(price1<uroven1)&&(price0<price1))|| ((price0<price2)&&(price1>uroven2)&&(price0>price1)) ) { ObjectCreate("trend_A"+i,OBJ_TREND,0,iTime(NULL,0,bar2),price2,iTime(NULL,0,bar0),price0); ObjectSet("trend_A"+i,OBJPROP_STYLE,STYLE_SOLID); ObjectSet("trend_A"+i,OBJPROP_WIDTH,2); ObjectSet("trend_A"+i,OBJPROP_COLOR,color_trend_A); ObjectSet("trend_A"+i, OBJPROP_RAY, ray); } //static datetime lt=0; //for (i=1;i<100;i++) //{ if(ExtMapBuffer1!=0) //{ if(lt!=Time) //{ //for (int k=0; k<200; k++) //{ double priceT=ObjectGetValueByShift("trend_A"+i, 1); double b=Close[1]; double c=Low[1]; double d=High[1]; if ((c<priceT)&&(b>priceT)&&(AlertsOn==true)) { Alert("Пересечение трендовой вверх... Do something"); return; } if ((d>priceT)&&(b<priceT)&&(AlertsOn==true)) { Alert("Пересечение трендовой вниз... Do something"); return; } //} //} //} //lt=Time; //} return(0); } //+------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Возвращает экстремум ЗигЗага по его номеру. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий ТФ) | //| ne - номер экстремума ( 0 - текущий) | //| dp - ExtDepth | //| dv - ExtDeviation | //| bc - ExtBackstep | //+----------------------------------------------------------------------------+ double GetExtremumZZPrice(string sym="", int tf=0, int ne=0, int barn=500, int Length=6) { if (sym=="") sym=Symbol(); double zz; int i, k=iBars(sym, tf), ke=0; for (i=1; i<k; i++) { zz=iCustom(sym, tf, "Dinap_tar._zig_zag", barn, Length, 0, i); if (zz!=0) { ke++; if (ke>ne) return(zz); } } Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден"); return(0); } //+----------------------------------------------------------------------------+ //| Возвращает номер бара экстремума ЗигЗага по его номеру. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий ТФ) | //| ne - номер экстремума ( 0 - текущий) | //| dp - ExtDepth | //| dv - ExtDeviation | //| bc - ExtBackstep | //+----------------------------------------------------------------------------+ int GetExtremumZZBar(string sym="", int tf=0, int ne=0, int barn=500, int Length=6) { if (sym=="") sym=Symbol(); double zz; int i, k=iBars(sym, tf), ke=0; for (i=1; i<k; i++) { zz=iCustom(sym, tf, "Dinap_tar._zig_zag", barn, Length, 0, i); if (zz!=0) { ke++; if (ke>ne) return(i); } } Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден"); return(0); }
Неужели ни кто не поможет?! Может я не в ту ветку написал, тогда хоть скажите где нужно было писать.... Тут же многие участвовали в обсуждении метода "Сперандео"