Почему не работает конструкция if(Volume()==1) для работы «по ценам открытия». Исследование. - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Были прецеденты для MQL?
Я не пользуюсь такой конструкцией, потому что она потенциально опасна. Возможно, в MQL нет проблем с использованием ретурна в теле цикла, но Вы не можете поручиться за разработчиков языка.
Я не пользуюсь такой конструкцией, потому что она потенциально опасна. Возможно, в MQL нет проблем с использованием ретурна в теле цикла, но Вы не можете поручиться за разработчиков языка.
Эта конструкция не опасней, чем goto.
Как говорится, переходя дорогу, сначала посмотри налево, потом на право и только после этого продолжай движение.
Опасность, обычно заключается в среднем слабом знании программистами материальной части,
а именно как происходит процесс вызова подпрограммы и что делает компилятор при этом.
От этого появилась боязнь, что при выходе из вложенных циклов по returt может разрушиться стек или потеряться память или,
не ровен час, возникнет исключение или, просто, программист забудет, что и где он return.
Но заметьте, мы же не выходим по return каждых две строки, что можем запутаться и потерять нить повествования.
От этого, в свое время, при анализе самых распространенных ошибок в C была принята рекомендация
по возможности не использовать return и goto внутри цикла, которая, в последствии, переросла в запрет на применение
команды goto в современных "продвинутых" языках программирования.
Да, кстати, если вы работаете в советнике с разными тайм фреймами, например,
советник стоит на D1, а вы работаете с двумя алгоритмами, - первый на D1, второй на H4,
то нужно сделать следующую модификацию:
И не забывайте, что тестирования советников с несколькими тайм фреймами в режиме «по ценам открытия»
невозможно, т.к. будет работать только та часть советника, которая настроена на тайм фрейм, на котором тестируется
советник, например, если в тестере стратегии в поле "Период:" вы выбрали D1, а в советнике у вас есть выбор для D1 и H4, последний период
и, соответственно, логика его работы будет проигнорирована. Работать будет только D1.
Чтобы этого избежать нужно перейти на режим тестирование "Контрольные точки". Это медленнее чем "по ценам открытия",
но значительно быстрее, чем "все тики" при приемлемом качестве моделирования, учитывая то, что мы жестко контролируем
время открытия ордеров.