Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1144
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
это понятно, но сходу mql5 сложен для понимания к сожалению. Согласен с fxsaber, думается мне легче на 4ке, а для оптимизации и других плюшек затаскиваем советник в 5ку. Вообще хотелось бы знать, а есть ли кто, что бы без ООП практики сразу mql5 осилил? После С++ 4ка конечно не актуальна, хотя может и ошибаюсь.
Два абсолютно одинаковых языка. Ни больше, ни меньше. И ООП (которым всех запугали) абсолютно одинаково есть в обоих. Не знали? Начитались страшилок в интернете и нагляделись блогеров в ютубе, которые "сеют доброе-разумное-вечное"? Которые с умным видом рассказывают чушь собачью, намеренно отпугивая людей от MQL5.
Спешу разочаровать - оба языка совершенно одинаковы. Как по лёгкости понимания, так и по возможностям и наличию ООП.
Правда возможностей в MQL5 больше.
Я там испанца к тебе отправил - ну пугайся. Сделай ему индикатор - мне некогда. На английском пишет. Если что - поясню. Но .. сам разберёшься.
Я не помню ответ Артёма, да и искать не буду, я и так догадаюсь что он мог ответить. Именно в его статьях есть весь нужный функционал для этого и все коды в его статьях либо мультитерминальные либо их две версии, для mql5 и для mql4. Я проверял эти варианты на mql4, всё отрабатывает «на ура» отлавливает закрытие по стопу или тейку и не ошибается.
Да, разобраться в этих статьях сложно, но оно того сто́ит, если вам не больше лет чем мне. А мне, для программиста неприлично много.
Другой вариант попроще, но работать будет гораздо медленнее. Пишите тикеты ордеров в массив, и по этому массиву выбирайте ордер, сверяйте время закрытия ордера. Если больше нуля, значит закрыт. Если в комментарии этого закрытого ордера есть буквы «sl» значит ордер закрыт по стопу. Дальше, если ордер закрыт из массива удаляем. Или после завершения прохода по всему массиву, его перезаполняем оставшимися открытыми ордерами. В общем полёт фантазии...
Какой вариант выбрать решение за вами. И прочтите несколько моих сообщений по поводу учебника Ковалёва. Именно в учебнике предлагается писать int start() тогда как в обновлённом mql4 для советников надо писать void OnTick()
Для индикаторов и скриптов смотрите в документации. И к стати, индикаторы писать в обновлённом mql4 гораздо легче, чем это было в то время когда Сергей писал этот учебник.
Большое спасибо. Ваша Информация была для меня очень ценной. Особенно о функции start()
Я не помню ответ Артёма, да и искать не буду, я и так догадаюсь что он мог ответить. ...
Вот мой ответ. С чётким указанием что нужно сделать:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Artyom Trishkin, 2020.04.28 08:22
Объяснение на словах: нужно отслеживать количество ордеров и позиций и сравнивать их с прошлым состоянием. Если на прошлом тике было 12 позиций, а на текущем их стало 8, то имеем изменение на 4 позиции. Соответственно, нужно брать четыре последние (по времени их закрытия) позиции для того чтобы понять что с ними произошло.
Но, судя по приложенному коду, в котором написаны "чудеса", вам пояснение на словах действительно не нужно. Но здесь помогают, а не пишут за/для.
Большое спасибо. Ваша Информация была для меня очень ценной. Особенно о функции start()
А что вообще делает ваш код кроме того, что открывает две позиции на продажу каждую в строго заданное время, и распечатывает время открытия последней позиции когда это разрешено? Всё. При этом используя неинициализированные переменные, что может привести к "чудесам" в поведении кода, и очень-очень старый обработчик start(), который вытащен с пыльной полки с многолетней паутиной, и в маркет (когда-нибудь ведь захотите что-то продать) с древними обработчиками никогда не пропустит валидатор - будет твердить, что неверный тип программы.
Спасибо за участие. На паре англ.фунт- доллар США я нашел при тестировании одну закономерность в поведении цены. Эта закономерность с небольшими коррекциями, и так же с небольшими просадками , график баланса ведет постоянно вверх с 2008 года и по текущий момент. Как я сказал коррекции графика баланса и просадки небольшие, но по времени бывают длительными , по несколько месяцев .На других парах эта закономерность выражена, но не так явно, как на фунт - долларе.
Я начал тестировать различные варианты этой закономерности и прибегнул для этой цели к оптимизации. Но как оказалось оптимизация по нескольким параметрам сразу ,занимает огромное количество времени. В моем случае - около года. Генетический алгоритм мне не подходит.
Потом мне пришла мысль , что протестировать и оптимизировать можно быстрее при помощи правильно составленного кода , функции Рrint() и таблицы Ексель.
Код внизу - это как раз попытка написать такой код. Этот код в дальнейшем я буду дорабатывать. Но сейчас столкнулся с проблемой для решения которой мне не хватает знаний.
Прошу не судить меня и мой код очень строго.... я новичок , который только только начал понимать основы кодирования и немного более того . Но к критике отношусь спокойно и не обижаюсь.....особенно к конструктивной.
Спасибо за помощь.
Если на одном тике закрываются по стопу или тейку два и более ордеров, программа печатает Print() только после последнего закрывшегося на этот тике ордера. А мне нужен Print() после каждого закрытого ордера. Как этого добиться я не знаю. Но если увижу нужный код, сразу все пойму и запомню.
Внизу пример моей проблемы
По хорошему в редакторе создаём что нам нужно, советник, скрипт, индикатор и редактор создаст шаблон с правильными полями.
Да. Я обращал внимание на эти правильные поля , то есть новые функции вместо СТАРТА . Но не придавал им значения и по прежнему пользовался для тестирования СТАРТОМ.
А Вы не знаете где можно почитать по подробнее о последних обновлениях MQL4 А то информации везде очень много, а нужной найти очень сложно. Иногда даже не знаю где искать.Учебник Ковалева мне очень нравится именно тем что в нем вся информация логически структурирована и потому заходит в мозги легко и быстро. И в достаточной степени детализирована, для понимания всех необходимых тонкостей. Удивляюсь почему он не напишет так же учебник для MQL5.
Два абсолютно одинаковых языка. Ни больше, ни меньше. И ООП (которым всех запугали) абсолютно одинаково есть в обоих. Не знали? Начитались страшилок в интернете и нагляделись блогеров в ютубе, которые "сеют доброе-разумное-вечное"? Которые с умным видом рассказывают чушь собачью, намеренно отпугивая людей от MQL5.
Спешу разочаровать - оба языка совершенно одинаковы. Как по лёгкости понимания, так и по возможностям и наличию ООП.
Правда возможностей в MQL5 больше.
Да. Я обращал внимание на эти правильные поля , то есть новые функции вместо СТАРТА . Но не придавал им значения и по прежнему пользовался для тестирования СТАРТОМ.
А Вы не знаете где можно почитать по подробнее о последних обновлениях MQL4 А то информации везде очень много, а нужной найти очень сложно. Иногда даже не знаю где искать.Учебник Ковалева мне очень нравится именно тем что в нем вся информация логически структурирована и потому заходит в мозги легко и быстро. И в достаточной степени детализирована, для понимания всех необходимых тонкостей. Удивляюсь почему он не напишет так же учебник для MQL5.
Спасибо за участие.
...
Код внизу - это как раз попытка написать такой код. Этот код в дальнейшем я буду дорабатывать. Но сейчас столкнулся с проблемой для решения которой мне не хватает знаний.
Прошу не судить меня и мой код очень строго.... я новичок , который только только начал понимать основы кодирования и немного более того . Но к критике отношусь спокойно и не обижаюсь.....особенно к конструктивной.
Спасибо за помощь.
Если на одном тике закрываются по стопу или тейку два и более ордеров, программа печатает Print() только после последнего закрывшегося на этот тике ордера. А мне нужен Print() после каждого закрытого ордера. Как этого добиться я не знаю. Но если увижу нужный код, сразу все пойму и запомню.
Внизу пример моей проблемы
Я вам уже отвечал:
Объяснение на словах: нужно отслеживать количество ордеров и позиций и сравнивать их с прошлым состоянием. Если на прошлом тике было 12 позиций, а на текущем их стало 8, то имеем изменение на 4 позиции. Соответственно, нужно брать четыре последние (по времени их закрытия) позиции для того чтобы понять что с ними произошло.
Вы берёте последний в списке ордер:
А вам нужно сначала узнать на сколько изменилось состояние в списке ордеров. Было 12, стало 8 - изменилось на 4 ордера. Соответственно - вам нужно все четыре ордера распечатать. А вы всегда распечатываете только самый последний в списке.
Как узнать на сколько изменилось? Нужно при запуске советника записать количество ордеров в переменную, например int last_total. Затем на каждом тике сравнивать OrdersTotal() с last_total. Если они НЕ равны - произошло изменение. Записать разницу между OrdersTotal() и last_total в переменную, например num_changes и сохранить в last_total новое состояние OrdersTotal().
Тут могут быть нюансы, например, при срабатывании отложенных ордеров. Но пока вам бы сделать то, что нужно для начала.
Зная количество пропавших ордеров, вы можете их посмотреть в истории. Впрочем, можно ограничиться только контролем ордеров в историческом списке - сделать всё вышеописанное не для списка рыночных, а для списка исторических ордеров. Разница между тем, что было, и тем что стало - это и есть то количество ордеров, которые нужно проанализировать. Вы же всегда анализируете только самый последний в списке.
При этом никто не гарантирует, что последний в историческом списке ордер будет последним закрытым. Это тоже нюансы, которые нужно учитывать. Но потом.