имейте в виду, что второй вариант отражает не так как должен был по задумке его автора, т.е. алгоритм не верный, правильным является вариант - 5, или вариант Rosh'a.
Привет, Profi_R. Что за вариант 5?
привет, честно говоря я уже не совсем помню, но в архиве индюк с таким названием с самой последней редакции у меня индексируется под №5, кажется там учтены все высказанные пожелания и устранены все проблемы, вот код:
//+------------------------------------------------------------------+ //| HiLo_Act_Next_Profi5.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| Profi_R | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "Profi_R" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 DeepSkyBlue #property indicator_color2 Black #property indicator_color3 DeepSkyBlue #property indicator_color4 Black //---- input parameters extern int Range=3; extern int NextTF=60; extern bool UseFullTF=0; //---- buffers double Up[]; double Dn[]; double UpMA[]; double DnMA[]; int init_flag,d_b=0,no_dr_b; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicators IndicatorBuffers(4); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID); SetIndexStyle(2,DRAW_LINE,STYLE_DOT); SetIndexStyle(3,DRAW_LINE,STYLE_DOT); SetIndexBuffer(0,Up); SetIndexBuffer(1,Dn); SetIndexBuffer(2,UpMA); SetIndexBuffer(3,DnMA); SetIndexLabel(0,"Up ("+Range+",M"+NextTF+")"); SetIndexLabel(1,"Dn ("+Range+",M"+NextTF+")"); SetIndexLabel(2,"UpMA ("+Range+",M"+NextTF+")"); SetIndexLabel(3,"DnMA ("+Range+",M"+NextTF+")"); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexEmptyValue(2,0.0); SetIndexEmptyValue(3,0.0); //---- short_name="HiLo_Act_Next_Profi5 ("+Range+",M"+NextTF+")"; IndicatorShortName(short_name); init_flag=0; //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(),limit,cb,i,j,bb_count,cb_count,sb_count,b_bar,end_bar,end_sbar; datetime TimeArray[],TimeArray_c[],end_time,begin_time; //---- if( init_flag!=1 ) { if( minit() < 0 ) { return(-1); } } if( counted_bars<0 ) { return(-1); } else { if( Bars-1-counted_bars < 0 ) { limit=0; } else { if( Bars-1-counted_bars > Bars-1-no_dr_b) { limit=Bars-1-no_dr_b; } else { limit=Bars-1-counted_bars; } } } bb_count=ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),NextTF); cb_count=ArrayCopySeries(TimeArray_c,MODE_TIME,Symbol(),Period()); if( bb_count<=0 || cb_count<=0 ) { return(0); } for(cb=limit;cb>=0;cb--) { if( MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)]/NextTF/60)*NextTF*60 > MathCeil(Time[cb]/Period()/60)*Period()*60) { b_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1+Range; end_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+2; //end_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1]/NextTF/60))*NextTF*60; //begin_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1+Range]/NextTF/60))*NextTF*60; } else { b_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+Range; end_bar =ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+1; //end_time=MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)]/NextTF/60)*NextTF*60; //begin_time=(MathCeil(TimeArray[ArrayBsearch( TimeArray,Time[cb],0,0,MODE_ASCEND)+Range]/NextTF/60))*NextTF*60; } //Alert( TimeToStr(Time[cb])+" ", TimeToStr(iTime(NULL,NextTF,b_bar))+" ", TimeToStr(iTime(NULL,NextTF,end_bar)) ); //b_bar=ArrayBsearch( TimeArray_c,begin_time,0,0,MODE_ASCEND); //end_sbar=ArrayBsearch( TimeArray_c,end_time,0,0,MODE_ASCEND)+1; UpMA[cb]=iMA(Symbol(),NextTF,Range,0,MODE_SMA,PRICE_HIGH,end_bar); DnMA[cb]=iMA(Symbol(),NextTF,Range,0,MODE_SMA,PRICE_LOW,end_bar); //UpMA[cb]=iMA(Symbol(),Period(),b_bar+1-end_bar,0,MODE_SMA,PRICE_HIGH,end_bar); //DnMA[cb]=iMA(Symbol(),Period(),b_bar+1-end_bar,0,MODE_SMA,PRICE_LOW,end_bar); if( UseFullTF==0 ) { if( Close[cb]>UpMA[cb] ) { Dn[cb]=DnMA[cb]; Up[cb]=0.0; } else { if( Close[cb]<DnMA[cb] ) { Up[cb]=UpMA[cb]; Dn[cb]=0.0; } else { if( Up[cb+1]>0 ) { Up[cb]=UpMA[cb]; Dn[cb]=0.0; } if( Dn[cb+1]>0 ) { Dn[cb]=DnMA[cb]; Up[cb]=0.0; } } } } else { if( Close[cb+1]>UpMA[cb+1] && (MathCeil(TimeArray[end_bar]/NextTF/60)+1)*NextTF*60==(MathCeil(Time[cb]/Period()/60))*Period()*60 ) { Dn[cb]=DnMA[cb]; Up[cb]=0.0; } else { if( Close[cb+1]<DnMA[cb+1] && (MathCeil(TimeArray[end_bar]/NextTF/60)+1)*NextTF*60==(MathCeil(Time[cb]/Period()/60))*Period()*60 ) { Up[cb]=UpMA[cb]; Dn[cb]=0.0; } else { if( Up[cb+1]>0 ) { Up[cb]=UpMA[cb]; Dn[cb]=0.0; } if( Dn[cb+1]>0 ) { Dn[cb]=DnMA[cb]; Up[cb]=0.0; } } } } } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Определение начальной точки отрисовки | //+------------------------------------------------------------------+ int minit() { datetime TimeArray[]; int bb_count,cb,i; //---- //проверка на правильность выставленных параметров if( NextTF<=Period() ) { if( Period()<5 ) { NextTF=5; } else { if( Period()<15 ) { NextTF=15; } else { if( Period()<30 ) { NextTF=30; } else { if( Period()<60 ) { NextTF=60; } else { if( Period()<240 ) { NextTF=240; } else { if( Period()<1440 ) { NextTF=1440; } else { if( Period()<10080 ) { NextTF=10080; } else { if( Period()<43200 ) { NextTF=43200; } else { Alert("Неверно выставлен NextTF!!!"); return(-1); } } } } } } } } } //получение времени начала каждого бара с другого таймфрейма bb_count=ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),NextTF); if( bb_count<1 ) { Alert("HL_Activ("+Period()+"): Отсутствуют данные Next таймфрейма!"); return(-1); } //проверка на необходимость обновления данных большего т-ф if(NextTF!=10080) { if( MathCeil(TimeArray[0]/NextTF/60)*NextTF*60 < MathCeil(Time[0]/Period()/60)*Period()*60-NextTF*60 ) { Alert("HL_Activ("+Period()+"): Необходимо обновить данные Next таймфрейма!"); return(-1); } } //проверка на необходимость обновления данных текущего т-ф if( NextTF!=10080 ) { if( MathCeil(TimeArray[0]/NextTF/60)*NextTF*60 > MathCeil(Time[0]/Period()/60)*Period()*60 ) { Alert("HL_Activ("+Period()+"): Необходимо обновить данные текущего таймфрейма!"); return(-1); } } //если бары на текущем т-ф начинаются с момента отрисовки баров большего т-ф или позже if( MathCeil(Time[Bars-1]/Period()/60)*Period()*60 >= MathCeil(TimeArray[bb_count-1]/NextTF/60)*NextTF*60 ) { for( cb=bb_count-1;cb>=0;cb--) { if( MathCeil(Time[Bars-1]/Period()/60)*Period()*60 >= MathCeil(TimeArray[cb]/NextTF/60)*NextTF*60 && MathCeil(Time[Bars-1]/Period()/60)*Period()*60 < MathCeil(TimeArray[cb-1]/NextTF/60)*NextTF*60 ) { for( i=Bars-1;i>=0;i-- ) { if( MathCeil(Time[i]/Period()/60)*Period()*60 >= MathCeil(TimeArray[cb-Range]/NextTF/60)*NextTF*60 ) { d_b=i; no_dr_b=Bars-1-d_b; SetIndexDrawBegin(0,no_dr_b+1); SetIndexDrawBegin(1,no_dr_b+1); init_flag=1; break; } } if( d_b>0 ) { break; } } } } else { for(cb=Bars-1;cb>=0;cb--) { //если время бара больше или равно времени бара с которого начинаем отрисовку... if( MathCeil(Time[cb]/Period()/60)*Period()*60 >= MathCeil(TimeArray[bb_count-1-Range]/NextTF/60)*NextTF*60 ) { d_b=cb; no_dr_b=Bars-1-d_b; SetIndexDrawBegin(0,no_dr_b+1); SetIndexDrawBegin(1,no_dr_b+1); init_flag=1; break; } } } if( d_b<1 ) { return(-1); } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть два индикатора - стандартный Parabolic и HiLo_Act_Next_Profi2. Во втором можно указывать значение старшего таймфрейма. Можно ли это сделать в Parabolic, чтобы находясь например на Н1 появлялся сигнал Н4. Сигнал Параболика можно использовать после того как закрылась свеча. Значит на меньшем таймфрейме это будум гораздо раньше.
Если такое возможно, желательно, чтобы отображение сигналов было как в третьем индюке + параболик...
Спасибо
Второй...
Третий...