Создание мультивалютного индикатора

 

Привет всем!

 

Помогите справится с такой задачей:

Неоходим индюк, которий в DATA WINDOW рисует график с отношением двух инструментов по формуле: Symbol1/Symbol2.

 Проблема в том,  что я никак не могу получить историю котировок такую же как историю по инструменту на который цепляю индюк посредством кода 

int OnCalculate(const int rates_total,const int prev_calculated,const int begin,const double &price[])

 т.е. как получить такой же массив данных price[], тока для другого инструмента в пределах данного индюка?

 

Спасибо! 

 
chemical:

Привет всем!

 

Помогите справится с такой задачей:

Неоходим индюк, которий в DATA WINDOW рисует график с отношением двух инструментов по формуле: Symbol1/Symbol2.

 Проблема в том,  что я никак не могу получить историю котировок такую же как историю по инструменту на который цепляю индюк посредством кода 

 т.е. как получить такой же массив данных price[], тока для другого инструмента в пределах данного индюка?

 

Спасибо! 

Используйте:

 

Спасибо!

 

Но ведь когда делаем  CopyRates, то там нет тиковой инфы! Возможно может из советника вызвать индикатор на нужный инструмент через iCustom? 

Тока както  iCustom по другому работает нежели как в MT4!

 Спасибо 

 
chemical:

Спасибо!

 

Но ведь когда делаем  CopyRates, то там нет тиковой инфы! Возможно может из советника вызвать индикатор на нужный инструмент через iCustom? 

Тока както  iCustom по другому работает нежели как в MT4!

 Спасибо 

Вы тиковую историю никак не получите штатными средствами терминала. Только самому накапливать, хранить и считывать.
 
Dima_S:
Вы тиковую историю никак не получите штатными средствами терминала. Только самому накапливать, хранить и считывать.

Спс!

 

А что тогда нам возвращает price[] в функяции int OnCalculate(const int rates_total,const int prev_calculated,const int begin,const double &price[]) 

разве не тиковую историю? или минутки? 

 
chemical:

Спс!

 

А что тогда нам возвращает price[] в функяции int OnCalculate(const int rates_total,const int prev_calculated,const int begin,const double &price[]) 

разве не тиковую историю? или минутки? 

Передается массив баров текущего ТФ для текущего символа.

Конкретный тип цены (опен, клоуз и т.д.) задается на вкладке Параметры окна настроек индикатора.



 
Dima_S:

Передается массив баров текущего ТФ для текущего символа.

Конкретный тип цены (опен, клоуз и т.д.) задается на вкладке Параметры окна настроек индикатора.



Обясню на примере что я хочу получить. Сделал индикатор, который рисует внизу график текущего инструмента. Как мне в этом же окне рисовать график по другому инструменту? Код ниже. Спс.

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  LightSeaGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label1  "PriceHistorySymbol"
//#property indicator_label2  "MA"

//--- input parameters
input int DataPeriod=14; // Period
input string Symbol1="GBPUSD";
double DataBuffer[];
int ExtCountedBars;

void OnInit()
  {
   string short_name;
   SetIndexBuffer(0,DataBuffer);
   IndicatorSetInteger(INDICATOR_DIGITS,5);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,DataPeriod<<1);
   short_name="PriceHistory("+Symbol1+")";
   IndicatorSetString(INDICATOR_SHORTNAME,short_name);
   PlotIndexSetString(0,PLOT_LABEL,short_name);


  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   if(rates_total<2)
      return(0);
   int start=prev_calculated-1;
   if(start<1) start=1;
      CalculateDivirgence(start,rates_total,price);  
   return(rates_total);
  }
  
void CalculateDivirgence(const int nPosition,
                     const int nRatesCount,
                     const double &SrcBuffer[])
  {
   DataBuffer[0]=(double)SrcBuffer[0];
   
//---
   for(int i=nPosition;i<nRatesCount && !IsStopped();i++)
     {
      double dCurr=(double)SrcBuffer[i];
      DataBuffer[i]=dCurr;
//---
  }  
}  

 

Причина обращения: