Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 116
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так в принципе и было, ошибка наверно была в том что у меня хэндл индикатора создается в функии OnTick и сразу же на этом же тике копируются данные. Ночью до меня дошло, сейчас попробую перенести хэндлы в функцию OnInit.
Не помогло. Вот такой сейчас код
В журнале выводит такие сообщения
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
И так всегда. Ошибки вроде при копировании нет.
Но у Вас пока что нет ни проверки на успешность создания хендлов, ни проверки на успешность расчёта индикаторов и проверки копирования. Сама по себе идея перенести инициализацию хендлов в OnInit() - правильная.
Вы ещё вот что сделайте: строчку Print(MacdArray[0]); поставьте в самом начале тела OnTick() - дабы посмотреть, какое мусорное значение содержится в массиве перед началом копирования буферов.
Дополню. Использование GetLastError() после самой функции может, конечно, быть особенностью стиля программирования. Но я бы всё-таки проверял и с учётом примера из Справочника. Если не ошибаюсь, не всегда нулевое значение GetLastError() означает успешность срабатывания функции.
Но у Вас пока что нет ни проверки на успешность создания хендлов, ни проверки на успешность расчёта индикаторов и проверки копирования. Сама по себе идея перенести инициализацию хендлов в OnInit() - правильная.
tol64:
Но только в первый раз. Если же в любом другом месте программы выяснится, что какой-нибудь хэндл невалиден, то нужно его попробовать получить снова. Поэтому нельзя сказать, что вынос кода для получения хэндлов в OnInit() решит вопрос полностью и правилен на все 100. ))
Делал проверку на то сколько данных скопировалось функцией CopyBuffer, всегда пишет 1. И ошибки никакой нет, а данные все равно не верные.
У меня такой результат этого кода в тестере:
//---
Единственное, что сделал перед тестом, так просто преобразовал значения индикатора перед выводом в журнал:
Вы хотите сказать, что сама по себе идея перенести инициализацию хендлов в OnInit() из OnTick() - неправильная?
У меня такой результат этого кода в тестере:
//---
Единственное, что сделал перед тестом, так просто преобразовал значения индикатора перед выводом в журнал:
А без "если"? И применительно к данной конкретной ситуации? У человека хэндл индикатора создавался в функции OnTick на каждом тике и сразу же на этом же тике копировались данные. Т.е. без проверки на валидность-невалидность каждый раз заново запрашивался хендл одного и того же индикатора. На этом фоне Вы будете продолжать утверждать, что сама по себе идея перенести инициализацию хендлов в OnInit() из OnTick() - неправильная?
ПС. Судя по всему, человеку Вы помогли, так что вопрос можно считать исчерпанным.