CopyBuffer() на выходных с чужого ТФ

 

Не могу получить через CopyBuffer() данные с Daily.

В МТ4 есть индикатор с такой строчкой

iATR(NULL, PERIOD_D1, ATRPeriod, 1); 

и на выходных все работает отлично.

Но в МТ5 столкнулся с проблемой получения данных.
В OnInit() получил хендл

  handleATR = iATR(_Symbol, PERIOD_D1, 14);
  if(handleATR < 0)
  {
    Print("Индикатор ATR не создан: handleATR= ", handleATR, ", err=", GetLastError());
    return INIT_FAILED;
  } 

Потом делаю вызов

int copied = CopyBuffer(handleATR, 0, 0, 2, array); 

Всегда получаю copied = -1

Уже пытался и в цикл завернуть, добавлял паузы, добавлял функцию CheckLoadHistory() из справки - не помогает.  С тиками, все работает, на биткойне сейчас тоже.

Подскажите, кто знает, что не так делаю? Как получить на выходных на инструменте без тиков - значение индикатора с другого ТФ?

Файлы:
 

В справке есть такое пояснение:

В третье абзаце говорится, что лучше использовать событийную модель и далее пояснение. Но сама формулировка, вроде как, подразумевает, что есть способ и похуже? А какой тогда?

 

может быть так заработает?

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

bool checkBuffer()

{

  double array[2];

  for(int i = 0; i < 500; ++i)

  {

    int copied = CopyBuffer(handleATR, 0, i, 2, array);

    Print(__FUNCTION__, " copied=", copied, " i=", i);

    if(copied > 0) break;

  }

  

  return true;

}

 
Renat Akhtyamov #:

может быть так заработает?

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

bool checkBuffer()

{

  double array[2];

  for(int i = 0; i < 500; ++i)

  {

    int copied = CopyBuffer(handleATR, 0, 0, 2, array);

    Print(__FUNCTION__, " copied=", copied, " i=", i);

    if(copied > 0) break;

  }

  

  return true;

}

:) 

 
Renat Akhtyamov #:

может быть так заработает?

Функция CopyBuffer () принимает и динамические и статические массивы. Но я проверил, на всякий случай ), так тоже не работает.

 
Алексей Тарабанов #:

:) 

самое прикольное, что в четверке можно было хотя бы в конце init запинать start в индикаторе, чтобы хотя бы один тик получился и отработку индикатора увидеть в выходные )))

а в 5-рке уже OnCalculate

ну никак индюк не поднять без тика

хотя бы таймер в нем работал, и то ведь не работает

;)

 
Vasiliy Pushkaryov #:

Функция CopyBuffer () принимает и динамические и статические массивы. Но я проверил, на всякий случай ), так тоже не работает.

есть, есть такая проблемс на выходных

поперек горла уже некоторые не совсем практичные новшества....

сунешься с этой 5-ркой, и бац!, снова на 4-рку уходишь
 
Vasiliy Pushkaryov #:

Функция CopyBuffer () принимает и динамические и статические массивы. Но я проверил, на всякий случай ), так тоже не работает.

Принимает и те и другие. Может не в этом дело, а, например, в выравнивании? 

 
Алексей Тарабанов #:

Принимает и те и другие. Может не в этом дело, а, например, в выравнивании? 

Можно поподробнее? Выравнивание чего?
 
Renat Akhtyamov #:

есть, есть такая проблемс на выходных

поперек горла уже некоторые не совсем практичные новшества....

сунешься с этой 5-ркой, и бац!, снова на 4-рку уходишь

Да, вот тоже удивляет. Это ведь не такая редкая задача, взять не свой ТФ из другого индикатора. И как на выходных проверить в МТ5? Тестер для этого не совсем удобен.

 
Vasiliy Pushkaryov #:

Да, вот тоже удивляет. Это ведь не такая редкая задача, взять не свой ТФ из другого индикатора. И как на выходных проверить в МТ5? Тестер для этого не совсем удобен.

кстати, а где нулевой буфер в индикаторе?

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