Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 Подскажите как в скрипте сделать так чтобы он исполнился при наступлении определенных условий. Например ждал когда пересекутся машки и после этого открыл ордер. Спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 15 минут назад, Partorius сказал: Подскажите как в скрипте сделать так чтобы он исполнился при наступлении определенных условий. по сути можно сделать цикл while пока не подойдет нужное условие, но в этом мало смысла, потому что такой скрипт надолго зависнет на графике и будет крутить до победного. Проще сделать индикатор, который будет каждый тик проверять ваше условие и когда оно произойдет - выполнит свое действие, поставит флаг о том, что больше его не нужно выполнять и перейдет в режим ожидания. Либо вместо ожидания можно попробовать после действия удалить этот индикатор с графика ChartIndicatorDelete Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 4 минуты назад, Rever27 сказал: по сути можно сделать цикл while пока не подойдет нужное условие, но в этом мало смысла, потому что такой скрипт надолго зависнет на графике и будет крутить до победного. Проще сделать индикатор, который будет каждый тик проверять ваше условие и когда оно произойдет - выполнит свое действие, поставит флаг о том, что больше его не нужно выполнять и перейдет в режим ожидания. Либо вместо ожидания можно попробовать после действия удалить этот индикатор с графика ChartIndicatorDelete Ну надолго вряд ли, все равно рано или поздно машки пересекутся, тем более речь идет о минутном графике. Попробую с циклом while. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 18 минут назад, Rever27 сказал: по сути можно сделать цикл while пока не подойдет нужное условие, но в этом мало смысла, потому что такой скрипт надолго зависнет на графике и будет крутить до победного. Проще сделать индикатор, который будет каждый тик проверять ваше условие и когда оно произойдет - выполнит свое действие, поставит флаг о том, что больше его не нужно выполнять и перейдет в режим ожидания. Либо вместо ожидания можно попробовать после действия удалить этот индикатор с графика ChartIndicatorDelete Возникла проблема, если бы было одно условие, допустим любое пересечение машек, тогда понятно по циклу while, но мне надо проверять два условия, например если пересеклись две МА и быстрая выше медленной то открыть ордер в бай, если наоборот то в селл, пока пересечений нет соответственно скрипт ждет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 29 минут назад, Rever27 сказал: по сути можно сделать цикл while пока не подойдет нужное условие, но в этом мало смысла, потому что такой скрипт надолго зависнет на графике и будет крутить до победного. Проще сделать индикатор, который будет каждый тик проверять ваше условие и когда оно произойдет - выполнит свое действие, поставит флаг о том, что больше его не нужно выполнять и перейдет в режим ожидания. Либо вместо ожидания можно попробовать после действия удалить этот индикатор с графика ChartIndicatorDelete Такое написание будет корректно: while ((MAfast2 > MAslow2 && MAfast > MAslow) || (MAfast2 < MAslow2 && MAfast < MAslow ) { это пустое поле здесь ничего не пишем, чтобы цикл крутился до выполнения условия пересечения машек } if (MAfast2 > MAslow2 && MAfast < MAslow2) { открываем ордер в селл } if (MAfast2 < MAslow2 && MAfast > MAslow2) { открываем ордер в бай } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 4 минуты назад, Partorius сказал: Такое написание будет корректно: Можно сделать таким образом. Но я повторюсь, это не совсем корректно, правильнее кинуть индикатор, который ничем вам не будет мешать и будет обновлять данные каждый тик, а лучше каждый раз после закрытия свечи, чтобы получить нужные данные о показателях МА, при ТФ М1 он будет брать данные МАшек раз в минуту и при соблюдении условий - открывать ордер, активировать флаг о прекращении расчета и уходить в ждущий решим. Можно и информацию в коммент выдавать о значениях МАшек и другую информацию. Цикл же гоняется каждую милисекунду ваш код, обращаясь к индикатору постоянно, что сделает нагрузку на терминал и не факт, что он завершится когда вам нужно, а не тогда, когда терем зависнет. bool exit_loop = false; while (!exit_loop && !IsStopped()) { MAfast2 = ... MAslow2 = ... if (MAfast2 > MAslow2 && MAfast < MAslow2) { //открываем ордер в селл exit_loop = true; } if (MAfast2 < MAslow2 && MAfast > MAslow2) { //открываем ордер в бай exit_loop = true; } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 1 час назад, Rever27 сказал: Можно сделать таким образом. Но я повторюсь, это не совсем корректно, правильнее кинуть индикатор, который ничем вам не будет мешать и будет обновлять данные каждый тик, а лучше каждый раз после закрытия свечи, чтобы получить нужные данные о показателях МА, при ТФ М1 он будет брать данные МАшек раз в минуту и при соблюдении условий - открывать ордер, активировать флаг о прекращении расчета и уходить в ждущий решим. Можно и информацию в коммент выдавать о значениях МАшек и другую информацию. Цикл же гоняется каждую милисекунду ваш код, обращаясь к индикатору постоянно, что сделает нагрузку на терминал и не факт, что он завершится когда вам нужно, а не тогда, когда терем зависнет. bool exit_loop = false; while (!exit_loop && !IsStopped()) { MAfast2 = ... MAslow2 = ... if (MAfast2 > MAslow2 && MAfast < MAslow2) { //открываем ордер в селл exit_loop = true; } if (MAfast2 < MAslow2 && MAfast > MAslow2) { //открываем ордер в бай exit_loop = true; } } С индикатором, мне не понятно что с ним дальше делать после того как он отработал и открыл сделки. Мне надо чтобы он как в скрипте сделал свое дело один раз и удалился. Просто смысл в том чтобы увидев на рынке подходящие условия кинул скрипт (ну или индикатор) который ждет соблюдения условий входа в сделку (в данном случае пересечение машек) открывает ордер и заканчивает работу (удаляется). Потом опять если на рынке сложилась необходимая ситуация опять кидаем скрипт (индикатор) и все повторяется. Как то так. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 9 минут назад, Partorius сказал: С индикатором, мне не понятно что с ним дальше делать Вот пример: Данные обновляются каждый тик. Если нужно 1 раз после закрытия свечи, то строки с Update_Time нужно раскомментировать. Далее идет сравнение условий, если все окей, то открывается ордер и флаг condition становится true. Если флаг стал тру, то индикатор удаляется. test.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 3 минуты назад, Rever27 сказал: Вот пример: Данные обновляются каждый тик. Если нужно 1 раз после закрытия свечи, то строки с Update_Time нужно раскомментировать. Далее идет сравнение условий, если все окей, то открывается ордер и флаг condition становится true. Если флаг стал тру, то индикатор удаляется. test.mq4 4 \u043a\u0411 · 0 загрузок Спасибо попробую Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 4 часа назад, Rever27 сказал: Вот пример: Данные обновляются каждый тик. Если нужно 1 раз после закрытия свечи, то строки с Update_Time нужно раскомментировать. Далее идет сравнение условий, если все окей, то открывается ордер и флаг condition становится true. Если флаг стал тру, то индикатор удаляется. test.mq4 4 \u043a\u0411 · 1 загрузка Что то у меня индикатор ордера не открывает пишет ошибку "2020.05.08 20:08:58.126 Custom indicator 'Индикатор': OrderSend function cannot be called from a custom indicator" Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 4 часа назад, Rever27 сказал: Вот пример: Данные обновляются каждый тик. Если нужно 1 раз после закрытия свечи, то строки с Update_Time нужно раскомментировать. Далее идет сравнение условий, если все окей, то открывается ордер и флаг condition становится true. Если флаг стал тру, то индикатор удаляется. test.mq4 4 \u043a\u0411 · 1 загрузка Я так понимаю индикатор не может открывать ордера? Ссылка на сообщение Поделиться на другие сайты More sharing options...
MikR0ReR Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 @Partorius @Rever27 Приветствую! Кто то по забыл, что торговый действия доступны только в советниках и скриптах. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Partorius Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 1 минуту назад, MikR0ReR сказал: @Partorius @Rever27 Приветствую! Кто то по забыл, что торговый действия доступны только в советниках и скриптах. Вот про это я и говорю, тогда не понятно как реализовать то что я хочу Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 8 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 8 мая, 2020 43 минуты назад, MikR0ReR сказал: Кто то по забыл, что торговый действия доступны только в советниках и скриптах. Забыл, что ордера нельзя открывать, но модифицировать и закрывать индикатор может. Ну значит вместо индикатора нужно сделать советник, вместо ChartIndicatorDelete поставить ExpertRemove(); Изменено 8 мая, 2020 пользователем Rever27 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Macter97 Опубликовано 14 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 мая, 2020 А продолжение курса есть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 14 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 мая, 2020 13 минут назад, Macter97 сказал: А продолжение курса есть? http://tlap.com/category/uroki-po-mql/ 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alex Sol Опубликовано 26 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 мая, 2020 Всем привет! Подскажите, почему Мартин не работает? Ошибок нет, но открывает только одну сделку. DZ4.mq4 Изменено 26 мая, 2020 пользователем Alex Sol Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 27 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 мая, 2020 В 26.05.2020 в 17:15, Alex Sol сказал: Всем привет! Подскажите, почему Мартин не работает? Ошибок нет, но открывает только одну сделку. DZ4.mq4 14 \u043a\u0411 · 3 загрузки Привет! Поправил в циклах условие, должно быть i>=0. DZ4.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 27 мая, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 мая, 2020 В 26.05.2020 в 14:15, Alex Sol сказал: Ошибок нет, но открывает только одну сделку. В строчке 218 должно быть i>=0 Сейчас код пропускает первый ордер из расчета. з.ы. Чтобы самостоятельно найти ошибку нужно по всему коду расставить надпись Print. Допустим такого вида Print(__FUNCTION__ + 218); Тогда можно сразу узнать, в какой функции этот принт сработал. цифры 218 обозначают строчку, где этот принт вызван. Из-за того, что числа не переведены в стринг при компиляции всегда можно найти где эти принты и удалить их, чтобы после решения проблемы не было лишних записей в журнал. Вместо номера строчки можно просто писать 1,2,3 в каждом принте, лишь бы они отличались. Если принта №3 нет, значит ошибка между 2 и 3 принтом. 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svob Опубликовано 3 июня, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июня, 2020 Приветствую! Ребята, подскажите пожалуйста, как мне к буферам индикатора (прикрепил) привязать советника, чтобы открывал бай, если гистограмма ваше нуля и продавал, соответствено, если ниже. Заранее спасибо! Fisher_Yur4ik_2.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 июня, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 июня, 2020 @Svob в Вашем индикаторе 2 буфера: в 1-м зелёные столбики, в 2-м - красные. Условие на продажу выглядит так: if ( fiser1 == EMPTY ) //зелёных столбиков нет - продаём! на покупку if ( fisher2 == EMPTY ) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Svob Опубликовано 4 июня, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 июня, 2020 11 часов назад, 0ll сказал: @Svob в Вашем индикаторе 2 буфера: в 1-м зелёные столбики, в 2-м - красные. Условие на продажу выглядит так: if ( fiser1 == EMPTY ) //зелёных столбиков нет - продаём! на покупку if ( fisher2 == EMPTY ) Спасибо! Получилось, правда, не очень. Советник не открывает сделки. Поможете разобраться Код прикрепил.RomRenko_v7.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 14 июня, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июня, 2020 Здравствуйте! Несколько общий вопрос... Довольно часто выключается терминал. После включения советник не "видит" сделки, которые были набраны до отключения. Вопрос: Как добиться, чтобы советник не терял сделки свои сделки, вне зависимости от внешних факторов.? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 14 июня, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июня, 2020 @Владимир Стариков сделки открытые или закрытые? может закрытые во время выключения терминала? Как Вы поняли что советник их потерял? В общем существует несколько способов сохранения или восстановления информации, какой способ выбрать зависит от советника - какая информация ему нужна для нормальной работы. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Владимир Стариков Опубликовано 14 июня, 2020 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 июня, 2020 14 минут назад, 0ll сказал: @Владимир Стариков сделки открытые или закрытые? может закрытые во время выключения терминала? Как Вы поняли что советник их потерял? В общем существует несколько способов сохранения или восстановления информации, какой способ выбрать зависит от советника - какая информация ему нужна для нормальной работы. Как Вы поняли что советник их потерял? - после запуска терминала на инфо панели не отображается информация про открытые ордера. Кнопки робота не закрывают открытые ордера. Очень важно иметь актуальну информацию про открытые ордера. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти