Как в индикаторе получить значение другого индикатора с младшего таймфрейма - страница 2

 

Вот код:

   int limit;
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(MaBuffer,EMPTY_VALUE);
     }
   else limit=prev_calculated-1;
//--- calculate Ma

   for(int i=limit;i<rates_total && !IsStopped();i++)
     {

Где здесь учтено разница в количестве баров

 
Vladimir Karputov:

Вот код:

Где здесь учтено разница в количестве баров

Тогда я запутался....

 
Vladimir Karputov:

Вот код:

Где здесь учтено разница в количестве баров

Мы же находимся на текущем ТФ и ведем контроль количества баров!

О младшем ТФ мы знаем только общее количество баров - Bars(NULL,PERIOD_M1),

Со старшего ТФ смотрим на младший и считываем с него данные...

???

 
Tango_X:

Мы же находимся на текущем ТФ и ведем контроль количества баров!

О младшем ТФ мы знаем только общее количество баров - Bars(NULL,PERIOD_M1),

Со старшего ТФ смотрим на младший и считываем с него данные...

???

Обязательно к прочтению:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как в индикаторе получить значение другого индикатора с младшего таймфрейма

Vladimir Karputov, 2019.02.17 14:47

Внимательно посмотрите:

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int calculated=BarsCalculated(MaHandle);


Это переменные rates_total и prev_calculated относятся к текущему графику и текущему таймфрейму.

А эта переменная calculated относится к чужому таймфрейму.

Количество баров текущего таймфрейма не равно количеству баров чужого таймрфема.


читать до тех пор, пока не станет ясно, что одно не равно другому.

 
Vladimir Karputov:

Обязательно к прочтению:


читать до тех пор, пока не станет ясно, что одно не равно другому.

Я не пойму куда Вы клоните? Мы находимся на ТФ H1 и отображаем индикатор на ТФ H1, но значения индикатора хотим видеть с М1. Может мы друг друга не понимаем.. Я не пойму что делать!

 
Tango_X:

Я не пойму куда Вы клоните? Мы находимся на ТФ H1 и отображаем индикатор на ТФ H1, но значения индикатора хотим видеть с М1. Может мы друг друга не понимаем.. Я не пойму что делать!

Нужно запросить количество баров на M1.

 
Evgeny Belyaev:

Нужно запросить количество баров на M1.

Допустим знаем количество баров на младшем ТФ, что дальше?

 
Tango_X:

Допустим знаем количество баров на младшем ТФ, что дальше?

Цикл делаем с учетом количества баров на M1.

 
Evgeny Belyaev:

Цикл делаем с учетом количества баров на M1.

Можете привести пример?

 

такая логика?

int calculated=BarsCalculated(MaHandle);
   if(calculated<0)
     {
      Print("Not all data of ExtFastMaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
   int limit;
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(MaBuffer,EMPTY_VALUE);
     }
   else limit=prev_calculated-1;
//--- calculate Ma

   for(int i=limit;i<rates_total && !IsStopped();i++)
     {
      shift_m=iBarShift(NULL,PERIOD_M1,time[i],false);
      for(int j=shift_m;j<calculated;j++)
        {
         CopyTime(NULL,PERIOD_M1,j,1,time_m);
         CopyBuffer(MaHandle,0,time_m[0],1,Ma);
         MaBuffer[i]=Ma[0];
         if() break; //-- какое-то условие для выхода с вложенного цикла...
        }
     }
Причина обращения: