Ошибки, баги, вопросы - страница 2996

 
Francuz:

1. Запустить приведённый код на TimeFrame отличного от минуты.

2. Запустить ATR на таком же Symbol и таком же TimeFrame.

3. Сравнить получаемые значения ATR через код и напрямую из индикатора.

4. Убедиться что значения не совпадают.

Вы пробовали вставить тот код, который я выделил жёлтым цветом и запустить индикатор?

 
Francuz:

1. Запустить приведённый код на TimeFrame отличного от минуты.

2. Запустить ATR на таком же Symbol и таком же TimeFrame.

3. Сравнить получаемые значения ATR через код и напрямую из индикатора.

4. Убедиться что значения не совпадают.

BS - это полученное значение ATR.

Может лыжи плохие?


и ещё RTS-6.21


 
Nikolai Semko:
Вы пробовали вставить тот код, который я выделил жёлтым цветом и запустить индикатор?

Да, пробовал. Результат не изменился.

 
Alexey Viktorov:

Может лыжи плохие?


и ещё RTS-6.21


Это уже кое-что. У вас от какого брокера и какая версия MT5.

 
Alexey Viktorov:

Может лыжи плохие?


и ещё RTS-6.21


Спасибо за помощь. Разобрался. Подключались разные версии индикаторов с разных папок.

 
Francuz:

Да, пробовал. Результат не изменился.

не верю. 
еще раз попробуйте

datetime a = D'2021.04.08 10:00:00';
   int      handle;
   double   Buffer[];
   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14);
   ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period));

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| 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[])
{

   if(prev_calculated>0 && handle != INVALID_HANDLE)
   {
      ::CopyBuffer(handle, 0, a, 1, Buffer);
      
      double BS = ::NormalizeDouble(Buffer[0], _Digits);
      
      ::Print(__FUNCTION__ + "| a = ", a);
      ::Print(__FUNCTION__ + "| BS ", BS);
      
      handle = INVALID_HANDLE;
   }
   
   // return value of prev_calculated for next call
   return(rates_total);
}
 
Nikolai Semko:

не верю. 
еще раз попробуйте

Я разобрался. Проблема была в том что подключались два разных файла ATR из разных папок. По этому было расхождение значений.

Благодарю за помощь.
 
Nikolai Semko:

не верю. 
еще раз попробуйте

Николай, у него другая проблема была. Я тоже не сразу понял вопрос, думал надо получить значения с другого ТФ. Лыжи смазал и всё поехало.
 
Alexey Viktorov:
Николай, у него другая проблема была. Я тоже не сразу понял вопрос, думал надо получить значения с другого ТФ. Лыжи смазал и всё поехало.

Странно, ничего не понял. 
Я воспроизвел его проблему у себя именно так, как он описывал.  
Она происходила именно потому, что единственное выполнение CopyBuffer происходило при первом заходе в  OnCalculate, когда prev_calculated == 0 и не было гарантии, что бары уже сформированы.
Решение было в том, чтобы игнорировать этот первый заход, а запускать единственный CopyBuffer только когда prev_calculated>0.
Причем здесь "два разных файла ATR из разных папок " -  не понял.

 
Nikolai Semko:

Странно, ничего не понял. 
Я воспроизвел его проблему у себя именно так, как он описывал.  
Она происходила именно потому, что единственное выполнение CopyBuffer происходило при первом заходе в  OnCalculate, когда prev_calculated == 0 и не было гарантии, что бары уже сформированы.
Решение было в том, чтобы игнорировать этот первый заход, а запускать единственный CopyBuffer только когда prev_calculated>0.
Причем здесь "два разных файла ATR из разных папок " -  не понял.

Ну так если открыт график и создаётся индикатор по текущему ТФ, то данные уже должны быть готовы при открытии графика. Разве нет?