Привет. Отличная идея. Но несовсем удобно ее использовать с другими индикаторами. возможно оформить это в виде индикатора. Уровни рисуются на актуальных барах. При смене уровней, новые фиксируются, также на актуальных для них барах. Чтобы не захламлять график можно сделать включение-выключение всех уровней на своих этапах. Попытался это реализовать, на основе вашего советника, но не получилось (мозгов не хватило).
по идее он должен работать как индикатор, просто переместите его в папку с индикаторами и под
#property copyright "Sanyooooook" #property link "sanyooooook@mail.ru"
поставьте строку
#property indicator_chart_window
сам не пробовал но должно работать
По отрисовке всех уровней достаточно проблематично, расчет ведётся до второго пересечения МАСД и нулевого уровня и при каждом новом пересечении МАКД и сигнальной происходит пересчет уровней, удаление и создание новых уровней. Но в принципе реализуемо, главное понять что нужно ). Принцип построения уровней выкладывал тут
"поставьте строку
#property indicator_chart_window"
Точно. Вот чего нехвалало. Но здесь другая проблема. нужно ждать первого пересечения MACD с нулевым уровнем, а старые еще действующие уровни не показываются. Как их можно отобразить. Все уровни не нужны, бог с ними, а вот последние еще актуальные неплохо было бы увидеть.
"поставьте строку
#property indicator_chart_window"
Точно. Вот чего нехвалало. Но здесь другая проблема. нужно ждать первого пересечения MACD с нулевым уровнем, а старые еще действующие уровни не показываются. Как их можно отобразить. Все уровни не нужны, бог с ними, а вот последние еще актуальные неплохо было бы увидеть.
даже нашел логическую ошибку )
закомментируйте эту строку и else ей принадлежащий
//if(((MACD<MACD_Sig)&&(MACD1>MACD_Sig1))||((MACD>MACD_Sig)&&(MACD1<MACD_Sig1)))
ЗЫ: линии отрисовывоются в конце кода, уровень последней линии забивается последним
"поставьте строку
#property indicator_chart_window"
Точно. Вот чего нехвалало. Но здесь другая проблема. нужно ждать первого пересечения MACD с нулевым уровнем, а старые еще действующие уровни не показываются. Как их можно отобразить. Все уровни не нужны, бог с ними, а вот последние еще актуальные неплохо было бы увидеть.
даже нашел логическую ошибку )
закомментируйте эту строку и else ей принадлежащий
//if(((MACD<MACD_Sig)&&(MACD1>MACD_Sig1))||((MACD>MACD_Sig)&&(MACD1<MACD_Sig1)))
ЗЫ: линии отрисовывоются в конце кода, уровень последней линии забивается последним Все пытаюсь сделать, чтобы на графике показывал последние актуальные линии. ввел буферы, чтоб отрисовывал. Что не так?
#property indicator_chart_window //---- input parameters //extern double Lots=0.1; extern int fast_ema_period=12; extern int slow_ema_period=26; extern int signal_period=4; extern int applied_price=4; bool Long=true; //extern int MAGIC=20100930; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ double Level1,MACD_Buff_Low[],MACD_Buff_High[]; double Level2; double LevelExtr; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { SetIndexStyle(0, DRAW_LINE, STYLE_SOLID); SetIndexBuffer(0, MACD_Buff_Low); SetIndexEmptyValue(0,0.0); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID); SetIndexBuffer(1, MACD_Buff_High); SetIndexEmptyValue(1,0.0); double MACD_Buff_High[100]; double MACD_Buff_Low[100]; ArrayInitialize(MACD_Buff_High,0.0); ArrayInitialize(MACD_Buff_Low,0.0); double MACD=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,1); double MACD_Sig=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,1); double MACD1=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,1+1); double MACD_Sig1=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,1+1); int i=0; int H; int Stop=0; int Start; double Price_Low=Low[0]; double Price_High=High[0]; if(((MACD<MACD_Sig)&&(MACD1>MACD_Sig1))||((MACD>MACD_Sig)&&(MACD1<MACD_Sig1))) { if(MACD>0) { Comment("MACD>0"); while(Stop<2) { MACD=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,i); MACD_Sig=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,i); if(MACD<0&&Stop==0) { Stop=1; Start=i; } if(Price_Low>=Low[i]&&Stop==1)Price_Low=Low[i]; if(MACD>0&&Stop==1)Stop=2; i++; } MACD_Buff_High[0]=Price_Low; H++; i=Start; MACD_Buff_High[H]=Low[i]; while(i>=0) { MACD=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,i); MACD_Sig=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,i); MACD1=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,i+1); MACD_Sig1=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,i+1); if(Price_Low<=High[i]) { Price_Low=High[i]; } if((MACD-MACD_Sig)*(MACD1-MACD_Sig1)<0&&MACD<MACD_Sig&&Price_Low>MACD_Buff_High[H-1]) { MACD_Buff_High[H]=Price_Low; H++; } i--; } } else { Comment("MACD<0"); while(Stop<2) { MACD=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,i); MACD_Sig=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,i); if(MACD>0&&Stop==0) { Stop=1; Start=i; } if(Price_High<=High[i]&&Stop==1)Price_High=High[i]; if(MACD<0&&Stop==1)Stop=2; i++; } MACD_Buff_Low[0]=Price_High; H=1; i=Start; MACD_Buff_Low[H]=High[i]; while(i>=0) { MACD=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,i); MACD_Sig=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,i); MACD1=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_MAIN,i+1); MACD_Sig1=iMACD(NULL,0,fast_ema_period,slow_ema_period,signal_period,applied_price,MODE_SIGNAL,i+1); if(Price_High>=Low[i]) { Price_High=Low[i]; //MACD_Buff_Low[H]=Low[i]; //Print("1"); } if((MACD-MACD_Sig)*(MACD1-MACD_Sig1)<0&&MACD>MACD_Sig&&Price_High<MACD_Buff_Low[H-1]) { MACD_Buff_Low[H]=Price_High; H++; //Print("2"); } i--; } } } double Aver; double Extremum; int del; if(H>1) { i=1; if(MACD_Buff_High[0]>0) { Aver=MACD_Buff_High[0]; for(del=ObjectsTotal()-1;del>=0;del--) { if(StringFind(ObjectName(del),"SanyokLine")>=0) { ObjectDelete(ObjectName(del)); } } while(i<H) { Aver=(Aver+MACD_Buff_High[i])/2; if(i+1!=H) ObjectCreate("SanyokLine"+i,OBJ_HLINE,0,0,Aver); // Print(Aver); i++; } Extremum=MACD_Buff_High[H-1]; } else { if(MACD_Buff_Low[0]>0) { Aver=MACD_Buff_Low[0]; for(del=ObjectsTotal()-1;del>=0;del--) { if(StringFind(ObjectName(del),"SanyokLine")>=0) { ObjectDelete(ObjectName(del)); } } while(i<H) { Aver=(Aver+MACD_Buff_Low[i])/2; if(i+1!=H) ObjectCreate("SanyokLine"+i,OBJ_HLINE,0,0,Aver); //Print(Aver); i++; } Extremum=MACD_Buff_Low[H-1]; } } } if(Aver>0) { if(ObjectFind("SanyokLine")==-1) { ObjectCreate("SanyokLine",OBJ_HLINE,0,0,Aver); Level1=NormalizeDouble(Aver,Digits); } else { if(MathAbs(ObjectGet("SanyokLine",OBJPROP_PRICE1)-Aver)>Point) { //ObjectDelete("L"); ObjectSet("SanyokLine",OBJPROP_PRICE1,Aver); Level2=Level1; Level1=NormalizeDouble(Aver,Digits); //Comment (Level1," ",Level2); } } } if(Extremum>0) { if(ObjectFind("Extr")==-1) { ObjectCreate("Extr",OBJ_HLINE,0,0,Extremum); Level1=NormalizeDouble(Extremum,Digits); } else { if(MathAbs(ObjectGet("Extr",OBJPROP_PRICE1)-Extremum)>Point) { //ObjectDelete("L"); ObjectSet("Extr",OBJPROP_PRICE1,Extremum); //Level2=Level1; //Level1=NormalizeDouble(Extremum,Digits); //Comment (Level1," ",Level2); } } } return(0); }
ээээ
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
50% МАCD:
Author: ываыва