Скачать MetaTrader 5

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

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

Привет всем!

 

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

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

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

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

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

 

Спасибо! 

Vladimir Gomonov
8297
Vladimir Gomonov  
chemical:

Привет всем!

 

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

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

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

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

 

Спасибо! 

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


chemical
28
chemical  

Спасибо!

 

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

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

 Спасибо 

Dmitriy Skub
11958
Dmitriy Skub  
chemical:

Спасибо!

 

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

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

 Спасибо 

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

Спс!

 

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

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

Dmitriy Skub
11958
Dmitriy Skub  
chemical:

Спс!

 

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

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

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

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



chemical
28
chemical  
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;
//---
  }  
}  

 

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