Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нет, не так. В справке про функцию что написано о возвращаемом значении?
Возвращаемое значение
Значение цены закрытия бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
А если сменить таймфейм на отличный от текущего данные перестанут вовремя обновляться даже с RefreshRates(). Выходит фундаментальные функции iClose и тп. в MT4 выдают неактуальную туфту. Уверен что 80% инфопродуктов не учитывают эти уникальные особенности MT4. Как жить дальше?)))
Смена тф ничего не даст. Текущее значение iClose равно значению Bid независимо от периода графика.
Я сделал советник и запустил на M5 на сутки. В момент смены часа он рисует горизонтальные линии по каждому из значений: iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M5,1), iClose(symbol, PERIOD_ M1,1 ),Close[1],Bid
Вопрос к разработчикам. Зачем в MQL4 нужны функции iClose и тп, если они дают не достоверную информацию и обновить их данные ни как не возможно?
Я сделал советник и запустил на M5 на сутки. В момент смены часа он рисует горизонтальные линии по каждому из значений: iClose(symbol,PERIOD_H1,1),iClose(symbol, PERIOD_ M5,1), iClose(symbol, PERIOD_ M1,1 ),Close[1],Bid
Вопрос к разработчикам. Зачем в MQL4 нужны функции iClose и тп, если они дают не достоверную информацию и обновить их данные ни как не возможно?
Чушь какая-то. Вызывать RefreshRates() обязательно только в том случае, если по какой либо причине произошла задержка выполнения. Такие случаи как длительный цикл или просто обновление цен в момент отправки приказа на открытие ордера. В вашем варианте никаких проблем быть не должно. Лучше выложите пример кода который так неправильно получает значения цен.
Я сейчас запустил такой код
по сути закрытие минутки должно совпадать с любым старшим периодом графика. Позже посмотрю будет-ли что-то написано в логе.А если сменить таймфейм на отличный от текущего данные перестанут вовремя обновляться даже с RefreshRates().
Есть тестовый код, подтверждающий это утверждение? У себя такого не замечал. При переключении ТФ просто ждем подкачки истории и тогда работаем.
Выходит фундаментальные функции iClose и тп. в MT4 выдают неактуальную туфту.
Слишком громкое утверждение. В некоторых случаях такое возможно, но для этого и существуют коды ошибок. Если их не проверять, то никогда не понять, можно ли использовать полученный результат.
Уверен что 80% инфопродуктов не учитывают эти уникальные особенности MT4. Как жить дальше?)))
Скажу больше: почти все программы чего-то не учитывают. Для этого и выходят их новые версии. Как только прекращается поддержка продукта, он оказывается недееспособным.
Чушь какая-то. Вызывать RefreshRates() обязательно только в том случае, если по какой либо причине произошла задержка выполнения. Такие случаи как длительный цикл или просто обновление цен в момент отправки приказа на открытие ордера. В вашем варианте никаких проблем быть не должно. Лучше выложите пример кода который так неправильно получает значения цен.
Я сейчас запустил такой код
по сути закрытие минутки должно совпадать с любым старшим периодом графика. Позже посмотрю будет-ли что-то написано в логе.Код у меня похожий. Ошибка в OnTick
надо
Если у нас текущий таймфрейм M5 cравнивать надо М5 c H1 и M1
Текущий таймфрейм а именно M5 у меня отображался корректно. Проблема была с H1 и M1.
Я проверял на Альпари реал EURCHF M5 только вместо Print рисовал горизонтальные отрезки на каждом из уровней.
Есть тестовый код, подтверждающий это утверждение? У себя такого не замечал. При переключении ТФ просто ждем подкачки истории и тогда работаем.
Слишком громкое утверждение. В некоторых случаях такое возможно, но для этого и существуют коды ошибок. Если их не проверять, то никогда не понять, можно ли использовать полученный результат.
Скажу больше: почти все программы чего-то не учитывают. Для этого и выходят их новые версии. Как только прекращается поддержка продукта, он оказывается недееспособным.
Вот код, поставь и проверь. У меня не соответствие на каждой свече. Альпари реал EURCHF M5.
double close_H1,close_M5, close_M1; /*******************Expert initialization function*******************/ int OnInit() { return(INIT_SUCCEEDED); }/*******************************************************************/ /************************Expert tick function************************/ void OnTick() { if(NewBar(PERIOD_M5)) { close_H1 = iClose(_Symbol, PERIOD_H1, 1); close_M1 = iClose(_Symbol, PERIOD_M1, 1); close_M5 = Close[1]; if(close_H1 != close_M5) Print(close_H1, " H1 != M5 ", close_M5); if(close_M1 != close_M5) Print(close_M1, " M1 != M5 ", close_M5); Comment( close_H1, " H1\n", close_M1, " M1\n", close_M5, " M5\n" ); } }/******************************************************************/ /**********************Expert OnDeinit function**********************/ void OnDeinit(const int reason) { Comment(""); }/******************************************************************/ bool NewBar(ENUM_TIMEFRAMES tf) { static datetime nt = 0; datetime tm = iTime(_Symbol, tf, 0); if(tm == 0) return false; if(tm != nt) { nt = tm; return true; } return false; }/******************************************************************/iClose: ноль - ошибка. Ошибки функция не выдает. Выдает устаревшее на данный момент значение.
Если подозреваете ошибки в функциях iXXXXX, используйте функции SymbolInfoXXXX