Как получить параметры Open,Low,High,Close в МQL5? - страница 2

 
Igor Makanu:

примерно так:

Спасибо. Это вариант подходит больше.
 
Vladimir Karputov:



Это лишнее в MQL5.


А вот так делают те, кто 

любит напарываться на скрытые ошибки (в общем все те, кто ленится делать элементарные проверки)

А какая разница где данные проверять? После Time[x] ведь можно проверить. Так в общем-то и делается всегда.
 
Реter Konow:
Спасибо. Это вариант подходит больше.

Пожалуйста,не вопрос, сам в такой же "Ж" - очень не удобно все в MQL5

 
Alexey Volchanskiy:

Это типа мультиплатформенный код  МТ4? Гуд, я почти все пишу сейчас мультиплатформенное.

Алексей, это для тех кто в танке. А для нормальных, CopyRates() доступен и в mql4. Так-что забудь все iOpen и прочую чушь. Я вообще не понимаю зачем вставили это в mql5...

CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Получает в массив rates_array исторические данные структуры MqlRates указанного символа-периода в указанном количестве. Отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар. При копировании заранее неизвестного количества данных рекомендуется в качестве приемного...
 

А функции iOpen и остальные работают сами по себе, или все равно нужен CopyRates? У меня запись Print(iOpen(0,CURRENT_PERIOD,1)); возвращает 0.0 без CopyRates (вызывается из Инита). Локальная история есть.

И куда ставить СopyRates если он нужен и необходимо получать данные по барам постоянно? В OnTick() на каждом тике, или в функцию нового бара?

 
Реter Konow:
А функции iOpen и остальные работают сами по себе, или все равно нужен CopyRates? У меня запись Print(iOpen(0,CURRENT_PERIOD,1)); возвращает 0.0 без CopyRates (вызывается из Инита). Локальная история есть.

Сами по себе. Может проблема в том, что неправильно указана именованная константа? Не CURRENT_PERIOD, а PERIOD_CURRENT. Если все равно выдает 0, то это ошибка. Ее можно узнать через GetLastError().

 
Реter Konow:

А функции iOpen и остальные работают сами по себе, или все равно нужен CopyRates? У меня запись Print(iOpen(0,CURRENT_PERIOD,1)); возвращает 0.0 без CopyRates (вызывается из Инита). Локальная история есть.

И куда ставить СopyRates если он нужен и необходимо получать данные по барам постоянно? В OnTick() на каждом тике, или в функцию нового бара?

Выкиньте из головы ВСЕ iXXXX функции - как сказали выше - только CopyRates. В справке же есть пример получения данных.

А получать эти данные нужно в зависимости от потребностей: нужно ли значения нулевого (самого правого бара на графике) или нет.

 
Ihor Herasko:

Сами по себе. Может проблема в том, что неправильно указана именованная константа? Не CURRENT_PERIOD, а PERIOD_CURRENT. Если все равно выдает 0, то это ошибка. Ее можно узнать через GetLastError().

Нет, это я здесь неверно написал. Там правильно. Ошибка 0.
 
Vladimir Karputov:

Выкиньте из головы ВСЕ iXXXX функции - как сказали выше - только CopyRates. В справке же есть пример получения данных.

А получать эти данные нужно в зависимости от потребностей: нужно ли значения нулевого (самого правого бара на графике) или нет.

  Ок. Попробую.
 
Vladimir Karputov:

Выкиньте из головы ВСЕ iXXXX функции - как сказали выше - только CopyRates. В справке же есть пример получения данных.

А получать эти данные нужно в зависимости от потребностей: нужно ли значения нулевого (самого правого бара на графике) или нет.

Ой, Владимир. Хоть я и ляпнул такое, но к сожалению не сделал оговорку. Если нужна исключительно цена, к примеру открытия, или время, то нет особой необходимости пользоваться CopyRates() в этом случае вполне достаточно или CopyOpen, или iOpen... соответственно CopyTime или iTime. Выбирается по религиозным пристрастиям.

И дополню свою оговорку: По затратам производительности, ощутимой разницы нет. Соответственно остаются исключительно религиозные пристрастия.