[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 842
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет! Недавно заинтересовался скользящими средними. Нашёл некую комбинацию мувингов и условий для торговли, решил проверить мою ТС, профитная она или нет, если что оптимизировать её. Но советник написанный мною при тестировании не открывает сделки. Весь вечер мучился и не найдя решения решил спросить у вас, уважаемые программисты. Что бы понять, как работает советник кратко объясню мою ТС: на графике EMA(13) и EMA(55), если бар пересёк EMA(13) и все последующие бары были выше/ниже EMA(13), то при соприкосновении цены с MA(13) открываем позицию в сторону в которой находились предыдущие бары(после пересечения + не менее 9 и не более 23). Тейк-профит 60 пунктов, стоп-лосс = EMA(55) плюс минус пять пунктов. Вот собственно вся стратегия. Для большей наглядности выложил пример:
А вот код советника:
Если кто может помогите пожалуйста. Так же выкладываю сам советник
В одном for-цикле может быть собрано множество функций для открытия, изменения, закрытия позиций и т.п.
Вот простой Пример:
- Вопрос: правильно ли здесь использовать "break", а не "return"? Есть ли различие?
В одном for-цикле может быть собрано множество функций для открытия, изменения, закрытия позиций и т.п.
Вот простой Пример:
- Вопрос: правильно ли здесь использовать "break", а не "return"? Есть ли различие?
Из https://docs.mql4.com/ru/basis/operators/break:
"Оператор break прекращает выполнение ближайшего вложенного внешнего оператора switch, while или for. Управление передается оператору, следующему за заканчиваемым."
Из https://docs.mql4.com/ru/basis/operators/return:
"Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе."
Ответ: правильно здесь использовать "break".
Из https://docs.mql4.com/ru/basis/operators/break:
"Оператор break прекращает выполнение ближайшего вложенного внешнего оператора switch, while или for. Управление передается оператору, следующему за заканчиваемым."
Из https://docs.mql4.com/ru/basis/operators/return:
"Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе."
Ответ: правильно здесь использовать "break".
Я в общем-то и сам использую break, но подумал что return означает смену тика (а break - нет).
В реальности, пока ордер изменится, произойдет смена тика и поэтому чтобы тестер правильно моделировал ситуацию
необходимо использовать return. Верно?
Может я ошибаюсь, но хотелось бы разобраться.
Я в общем-то и сам использую break, но подумал что return означает смену тика (а break - нет).
В реальности, пока ордер изменится, произойдет смена тика и поэтому чтобы тестер правильно моделировал ситуацию
необходимо использовать return. Верно?
Может я ошибаюсь, но хотелось бы разобраться.
Читаем в документации: "Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе."
Если текущая функция start(), то опять же читаем в документации:
https://docs.mql4.com/ru/runtime/start
"При поступлении новых котировок выполняется функция start() у присоединенных советников и пользовательских индикаторов. Если при поступлении новой котировки выполнялась функция start(), запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником. Все пришедшие во время выполнения программы новые котировки программой игнорируются до тех пор, пока не завершится очередное выполнение функции start(). После этого функция start() будет запущена только после прихода очередной новой котировки."
Читаем в документации: "Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе."
Если текущая функция start(), то опять же читаем в документации:
https://docs.mql4.com/ru/runtime/start
"При поступлении новых котировок выполняется функция start() у присоединенных советников и пользовательских индикаторов. Если при поступлении новой котировки выполнялась функция start(), запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником. Все пришедшие во время выполнения программы новые котировки программой игнорируются до тех пор, пока не завершится очередное выполнение функции start(). После этого функция start() будет запущена только после прихода очередной новой котировки."
Лучше бы Вы своими словами написали.. Не понял что Вы имели в виду.
В тестере, если происходит завершение for при помощи break, а за ним следует какая-то другая функция, то она будет исполнена на том же тике. Но в реале за это время (пока модифицируется ордер) может смениться несколько тиков. Поэтому я думаю что return отражает более реальное поведение. Разве нет?
Лучше бы Вы своими словами написали.. Не понял что Вы имели в виду.
Если происходит завершение for при помощи break, а за ним следует какая-то другая функция, то она будет исполнена на том же тике. Но в реале за это время (пока модифицируется ордер) может смениться несколько тиков. Поэтому я думаю что return отражает более реальное поведение. Разве нет?
start() начинает работать с началом тика и её работа может к началу следующего тика и не завершится.
break завершает for, return завершает функцию. Если после for операторов нет, то разницы применения for и return для данного алгоритма нет.
НО каждый оператор имеет своё назначение. И нецелевое использование оператора - это как незаряженное ружьё.
Опять же, по алгоритму в цикле for, по каким то соображениям, нет необходимости продолжать выполнение функции, тогда можно использовать return.
Другими словами, если по алгоритму надо прервать цикл, то ставится break, даже, если после цикла всё равно завершается функция.
start() начинает работать с началом тика и её работа может к началу следующего тика и не завершится.
break завершает for, return завершает функцию. Если после for операторов нет, то разницы применения for и return для данного алгоритма нет.
НО каждый оператор имеет своё назначение. И нецелевое использование оператора - это как незаряженное ружьё.
Опять же, по алгоритму в цикле for, по каким то соображениям, нет необходимости продолжать выполнение функции, тогда можно использовать return.
Другими словами, если по алгоритму надо прервать цикл, то ставится break, даже, если после цикла всё равно завершается функция.
Пришла мысль - поскольку все это затевалось только для тестера, то можно (там где надо) сделать следующее:
Спасибо!
Пришла мысль - поскольку все это затевалось только для тестера, то можно (там где надо) сделать следующее:
Спасибо!
можно