Скачать MetaTrader 5

Индикаторы: Импульсная система

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
182417
MetaQuotes Software Corp. 2010.06.17 07:49 

Импульсная система:

Окрашивает бары в красный зеленый иголубой цвет

Author: Miky

LeMan
499
LeMan 2010.06.17 10:19  

Мне нравятся системы Элдера, и Ваш индикатор очень нагляден, но я взял на себя смелость и немного подправил Ваш код.

#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);
}
Miky
3
Miky 2010.06.17 12:19  
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);
}

Я думаю индикатор не теряет своей силы и не важно по какой цене усреднять кому как удобней, ведь каждый играет в свою игру я лично считаю цену закрытия бара наиболее важной,
MQL4 Comments
16319
MQL4 Comments 2010.06.17 12:32  
!!! +10 Обоим .
LeMan
499
LeMan 2010.06.17 13:12  
120588:
Я думаю индикатор не теряет своей силы и не важно по какой цене усреднять кому как удобней, ведь каждый играет в свою игру я лично считаю цену закрытия бара наиболее важной,

Я не цену менял, просто окраска нулевого бара менялась не правильно, вот я и подправил код
Victor Nikolaev
Модератор
14636
Victor Nikolaev 2010.06.17 16:17  

Тоже захотелось код малость пооптимизировать

       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;
         } 
      }                            

Что-то примерно так. Немного быстрее работать будет

Victor Nikolaev
Модератор
14636
Victor Nikolaev 2010.06.17 17:08  

Кажется что проще уже некуда

#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);
  }
черт
491
черт 2010.06.18 07:29  
осталось красную и синию линии объединить в одну.
Victor Nikolaev
Модератор
14636
Victor Nikolaev 2010.06.19 13:40  
dpg03:
осталось красную и синию линии объединить в одну.

И как вы это видите?
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий