Как в коде применить постороение одного индикатора по другому индикатору

 

Хочу написать советника по данной стратегии:

http://unfx.ru/strategies_to_trade/strategies_139.php

Но непонял как в MQL4 пропустить расчеты одного индикатора через другой(болиндеж построить по MACD)? или такой возможности нет?


 
double iBandsOnArray( double array[], int total, int period, int deviation, int bands_shift, int mode, int shift)

Расчет индикатора Bollinger Bands на данных, хранящихся в массиве. В отличие от iBands(...) функция iBandsOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее. Расчет производится слева направо. Для организации доступа к элементам массива, как к таймсерии (то есть справа налево), необходимо использовать функцию ArraySetAsSeries.

 
StatBars писал (а) >>

Расчет индикатора Bollinger Bands на данных, хранящихся в массиве. В отличие от iBands(...) функция iBandsOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее. Расчет производится слева направо. Для организации доступа к элементам массива, как к таймсерии (то есть справа налево), необходимо использовать функцию ArraySetAsSeries.

Спасибо!

 
StatBars писал (а) >>

Расчет индикатора Bollinger Bands на данных, хранящихся в массиве. В отличие от iBands(...) функция iBandsOnArray не выбирает данные на основе названия инструмента, таймфрейма и используемой цены - ценовые данные должны быть подготовлены заранее. Расчет производится слева направо. Для организации доступа к элементам массива, как к таймсерии (то есть справа налево), необходимо использовать функцию ArraySetAsSeries.

и от меня спасибо...

 

Пример реализации:

double macd[11];  


ArraySetAsSeries(macd,true);
   for( i=10; i>=0; i--)  
   {
   macd[i]=iMACD(NULL,0,lowema4,fastema4,1,PRICE_CLOSE,MODE_MAIN,i);
   }
    

   double bbmain=iBandsOnArray(macd,0,bbper,bbotcl,0,MODE_MAIN,1);
   double bbup=iBandsOnArray(macd,0,bbper,bbotcl,0,MODE_UPPER,1);
   double bblow=iBandsOnArray(macd,0,bbper,bbotcl,0,MODE_LOWER,1);
   double macdsma=iMAOnArray(macd,0,smaper,0,MODE_SMA,1);
  



 
fortrader.ru >>:

Пример реализации: ...

Вот это нормальный подход. Спасибо!

 

Пример индикатора:

//+------------------------------------------------------------------+
//|                                  NatusekoProtrader4HStrategy.mq4 |
//|                                                     FORTRADER.RU |
//|                                              http://FORTRADER.RU |
//+------------------------------------------------------------------+
#property copyright "FORTRADER.RU"
#property link      "http://FORTRADER.RU"
 
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 DarkGray
#property indicator_color2 DodgerBlue
#property indicator_color3 DodgerBlue
#property indicator_color4 DodgerBlue
#property indicator_color5 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double macd[1000];
 
int init()
  {
 
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,ExtMapBuffer5);
 
   return(0);
  }
 
int start()
  {
  ArraySetAsSeries(macd,true); 
  int i;
        for( i=1000; i>=0; i--)          
        {
        macd[i]=iMACD(NULL,0,5,200,1,PRICE_CLOSE,MODE_MAIN,i);
        ExtMapBuffer1[i]=iMACD(NULL,0,5,200,1,PRICE_CLOSE,MODE_MAIN,i);
        }
        
 
 
 if(i<=1)
 {     
     for( i=0; i<=1000; i++)          
        {
         ExtMapBuffer2[i]=iBandsOnArray(macd,0,20,1,0,MODE_MAIN,i);
         ExtMapBuffer3[i]=iBandsOnArray(macd,0,20,1,0,MODE_UPPER,i);
         ExtMapBuffer4[i]=iBandsOnArray(macd,0,20,1,0,MODE_LOWER,i);
         ExtMapBuffer5[i]=iMAOnArray(macd,0,3,0,MODE_SMA,i);
         }
 }
   return(0);
  }
 

Пропускаем болленджер через RSI:

extern int rsiperiod=8;
extern int bbperiod=14;
extern int bbotcl=2;

 int Pattern()
 {
   double rsi[101]; 
   double irsi;  
   ArraySetAsSeries(rsi,true);
   for(int i=100; i>=0; i--)  
   {
   rsi[i]=iRSI(NULL,0,rsiperiod,PRICE_CLOSE,i);
   if(i==1){irsi=rsi[i];}
   }
   
   double bbmain=iBandsOnArray(rsi,0,bbperiod,bbotcl,0,MODE_MAIN,1);
   double bbup=iBandsOnArray(rsi,0,bbperiod,bbotcl,0,MODE_UPPER,1);
   double bblow=iBandsOnArray(rsi,0,bbperiod,bbotcl,0,MODE_LOWER,1); 
   
   Print("bbup "+bbup+" bblow "+bblow+" irsi "+irsi);
  
 
 return(0);
 }
 

Очень полезная информация.

Спасибо.