Мне нравятся системы Элдера, и Ваш индикатор очень нагляден, но я взял на себя смелость и немного подправил Ваш код.
#property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 Green #property indicator_width1 2 #property indicator_color2 Green #property indicator_width2 2 #property indicator_color3 Red #property indicator_width3 2 #property indicator_color4 Red #property indicator_width4 2 #property indicator_color5 Blue #property indicator_width5 2 #property indicator_color6 Blue #property indicator_width6 2 extern int period = 13; extern int ma_shift = 0; extern int ma_method = 1;//0-3 extern int fast_ema_period = 12; extern int slow_ema_period = 26; extern int signal_ema_period = 9; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; double ExtMapBuffer5[]; double ExtMapBuffer6[]; int init() { //---- indicators IndicatorDigits(Digits); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,ExtMapBuffer2); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,ExtMapBuffer3); SetIndexStyle(3,DRAW_HISTOGRAM); SetIndexBuffer(3,ExtMapBuffer4); SetIndexStyle(4,DRAW_HISTOGRAM); SetIndexBuffer(4,ExtMapBuffer5); SetIndexStyle(5,DRAW_HISTOGRAM); SetIndexBuffer(5,ExtMapBuffer6); //---- return(0); } int start() { int i, counted_bars = IndicatorCounted(); //---- i = Bars-counted_bars-1; while(i >= 0) { double MA_0 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i); // applied_price_ma - по какой цене расщитывать среднюю // i - сдвиг относительно текущего бара double MA_1 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i+1); double MACD_signal1 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i); double MACD_signal2 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i+1); // MODE_MAIN - основная линия MACD, MODE_SIGNAL - сигнальная if(MA_0 > MA_1 && MACD_signal1 > MACD_signal2) { ExtMapBuffer1[i]=High[i]; ExtMapBuffer2[i]=Low[i]; ExtMapBuffer3[i]=EMPTY_VALUE; ExtMapBuffer4[i]=EMPTY_VALUE; ExtMapBuffer5[i]=EMPTY_VALUE; ExtMapBuffer6[i]=EMPTY_VALUE; } else { if(MA_0 < MA_1 && MACD_signal1 < MACD_signal2) { ExtMapBuffer3[i]=High[i]; ExtMapBuffer4[i]=Low[i]; ExtMapBuffer1[i]=EMPTY_VALUE; ExtMapBuffer2[i]=EMPTY_VALUE; ExtMapBuffer5[i]=EMPTY_VALUE; ExtMapBuffer6[i]=EMPTY_VALUE; } else { ExtMapBuffer5[i]=High[i]; ExtMapBuffer6[i]=Low[i]; ExtMapBuffer1[i]=EMPTY_VALUE; ExtMapBuffer2[i]=EMPTY_VALUE; ExtMapBuffer3[i]=EMPTY_VALUE; ExtMapBuffer4[i]=EMPTY_VALUE; } } i--; } //---- return(0); }
leman:
Мне нравятся системы Элдера, и Ваш индикатор очень нагляден, но я взял на себя смелость и немного подправил Ваш код.
#property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 Green #property indicator_width1 2 #property indicator_color2 Green #property indicator_width2 2 #property indicator_color3 Red #property indicator_width3 2 #property indicator_color4 Red #property indicator_width4 2 #property indicator_color5 Blue #property indicator_width5 2 #property indicator_color6 Blue #property indicator_width6 2 extern int period = 13; extern int ma_shift = 0; extern int ma_method = 1;//0-3 extern int fast_ema_period = 12; extern int slow_ema_period = 26; extern int signal_ema_period = 9; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; double ExtMapBuffer5[]; double ExtMapBuffer6[]; int init() { //---- indicators IndicatorDigits(Digits); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,ExtMapBuffer2); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,ExtMapBuffer3); SetIndexStyle(3,DRAW_HISTOGRAM); SetIndexBuffer(3,ExtMapBuffer4); SetIndexStyle(4,DRAW_HISTOGRAM); SetIndexBuffer(4,ExtMapBuffer5); SetIndexStyle(5,DRAW_HISTOGRAM); SetIndexBuffer(5,ExtMapBuffer6); //---- return(0); } int start() { int i, counted_bars = IndicatorCounted(); //---- i = Bars-counted_bars-1; while(i >= 0) { double MA_0 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i); // applied_price_ma - по какой цене расщитывать среднюю // i - сдвиг относительно текущего бара double MA_1 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i+1); double MACD_signal1 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i); double MACD_signal2 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i+1); // MODE_MAIN - основная линия MACD, MODE_SIGNAL - сигнальная if(MA_0 > MA_1 && MACD_signal1 > MACD_signal2) { ExtMapBuffer1[i]=High[i]; ExtMapBuffer2[i]=Low[i]; ExtMapBuffer3[i]=EMPTY_VALUE; ExtMapBuffer4[i]=EMPTY_VALUE; ExtMapBuffer5[i]=EMPTY_VALUE; ExtMapBuffer6[i]=EMPTY_VALUE; } else { if(MA_0 < MA_1 && MACD_signal1 < MACD_signal2) { ExtMapBuffer3[i]=High[i]; ExtMapBuffer4[i]=Low[i]; ExtMapBuffer1[i]=EMPTY_VALUE; ExtMapBuffer2[i]=EMPTY_VALUE; ExtMapBuffer5[i]=EMPTY_VALUE; ExtMapBuffer6[i]=EMPTY_VALUE; } else { ExtMapBuffer5[i]=High[i]; ExtMapBuffer6[i]=Low[i]; ExtMapBuffer1[i]=EMPTY_VALUE; ExtMapBuffer2[i]=EMPTY_VALUE; ExtMapBuffer3[i]=EMPTY_VALUE; ExtMapBuffer4[i]=EMPTY_VALUE; } } i--; } //---- return(0); }
Я думаю индикатор не теряет своей силы и не важно по какой цене усреднять кому как удобней, ведь каждый играет в свою игру я лично считаю цену закрытия бара наиболее важной,
120588:
Я думаю индикатор не теряет своей силы и не важно по какой цене усреднять кому как удобней, ведь каждый играет в свою игру я лично считаю цену закрытия бара наиболее важной,
Я думаю индикатор не теряет своей силы и не важно по какой цене усреднять кому как удобней, ведь каждый играет в свою игру я лично считаю цену закрытия бара наиболее важной,
Я не цену менял, просто окраска нулевого бара менялась не правильно, вот я и подправил код
Тоже захотелось код малость пооптимизировать
double MA_0 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i); // applied_price_ma - по какой цене расщитывать среднюю // i - сдвиг относительно текущего бара double MA_1 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i+1); double MACD_signal1 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i); double MACD_signal2 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i+1); // MODE_MAIN - основная линия MACD, MODE_SIGNAL - сигнальная ExtMapBuffer1[i]=EMPTY_VALUE; ExtMapBuffer2[i]=EMPTY_VALUE; ExtMapBuffer3[i]=EMPTY_VALUE; ExtMapBuffer4[i]=EMPTY_VALUE; ExtMapBuffer5[i]=High[i]; ExtMapBuffer6[i]=Low[i]; if((MA_0 - MA_1)*(MACD_signal1 - MACD_signal2)>0) { if (MA_0 > MA_1 ) { ExtMapBuffer1[i]=High[i]; ExtMapBuffer2[i]=Low[i]; ExtMapBuffer5[i]=EMPTY_VALUE; ExtMapBuffer6[i]=EMPTY_VALUE; } else { ExtMapBuffer3[i]=High[i]; ExtMapBuffer4[i]=Low[i]; ExtMapBuffer5[i]=EMPTY_VALUE; ExtMapBuffer6[i]=EMPTY_VALUE; } }
Что-то примерно так. Немного быстрее работать будет
Кажется что проще уже некуда
#property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Green #property indicator_width1 2 #property indicator_color2 Red #property indicator_width2 2 #property indicator_color3 Aqua #property indicator_width3 2 #property indicator_color4 Aqua #property indicator_width4 2 extern int period = 13; extern int ma_shift = 0; extern int ma_method = 1;//0-3 extern int fast_ema_period = 12; extern int slow_ema_period = 26; extern int signal_ema_period = 9; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer5[]; double ExtMapBuffer6[]; int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,ExtMapBuffer2); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,ExtMapBuffer5); SetIndexStyle(3,DRAW_HISTOGRAM); SetIndexBuffer(3,ExtMapBuffer6); //---- return(0); } int start() { int i,counted_bars=IndicatorCounted(); i=Bars-counted_bars-1; while(i>=0) { double MA_0 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i); // applied_price_ma - по какой цене расщитывать среднюю // i - сдвиг относительно текущего бара double MA_1 = iMA(NULL,0,period,ma_shift,ma_method,PRICE_MEDIAN,i+1); double MACD_signal1 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i); double MACD_signal2 = iOsMA(NULL,0,fast_ema_period,slow_ema_period,signal_ema_period,PRICE_MEDIAN,i+1); // MODE_MAIN - основная линия MACD, MODE_SIGNAL - сигнальная ExtMapBuffer1[i]=EMPTY_VALUE; ExtMapBuffer2[i]=EMPTY_VALUE; ExtMapBuffer5[i]=High[i]; ExtMapBuffer6[i]=Low[i]; if((MA_0 - MA_1)*(MACD_signal1 - MACD_signal2)>0) { ExtMapBuffer5[i]=EMPTY_VALUE; ExtMapBuffer6[i]=EMPTY_VALUE; if (MA_0 > MA_1 ) { ExtMapBuffer1[i]=High[i]; ExtMapBuffer2[i]=Low[i]; } else { ExtMapBuffer2[i]=High[i]; ExtMapBuffer1[i]=Low[i]; } } i--; } return(0); }
осталось красную и синию линии объединить в одну.
dpg03:
осталось красную и синию линии объединить в одну.
осталось красную и синию линии объединить в одну.
И как вы это видите?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Импульсная система:
Author: Miky