Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Возможно вам подойдет эта статья https://www.mql5.com/ru/articles/40
Т.е. для решения указанной проблемы без функции OnTrade() никак не обойтись? И в рамках OnTick() эту проблему не решить?
...Просто поначалу в справочнике не было описания функции OnTrade(), и первые статьи по советникам обходились только функцией OnTick(). Эсперты, написанные в такой манере, оказались работоспособными (по крайней мере, на тестере). В предложенной же Вами статье функция OnTick() вообще не используется, что вызывает на первых порах некоторое замешательство относительно совместного использования этих двух функций.
Т.е. для решения указанной проблемы без функции OnTrade() никак не обойтись? И в рамках OnTick() эту проблему не решить?
...Просто поначалу в справочнике не было описания функции OnTrade(), и первые статьи по советникам обходились только функцией OnTick(). Эсперты, написанные в такой манере, оказались работоспособными (по крайней мере, на тестере). В предложенной же Вами статье функция OnTick() вообще не используется, что вызывает на первых порах некоторое замешательство относительно совместного использования этих двух функций.
Автор не раскрыл все прелести этой функции. я сам толком ее не изучал. но суть ее такова, что она запускается когда с позицией что-то происходит. и по всей видимости проверку лучше делать в ней. и передавать необходимые значения потом в функцию OnTick().
Да, в общих-то чертах описание функции OnTrade() понятно. Непонятно пока, можно ли обойтись без неё при решении моего вопроса.
Решил использовать пока вот такой шаблон:
Но смущает следующий момент: если по каким-либо причинам терминал в течение некоторого времени не будет получать от сервера сигнал об успешном размещении первого отложенного ордера, то приведённый выше шаблон не позволит разместить второй ордер. А потом окажется, что первый отложенный ордер всё-таки был успешно размещён, но из-за несвоевременного поступления информации об этом будет упущена возможность разместить второй ордер.
Т.е. шаблон окажется из серии "перестраховался". Должно же быть какое-нибудь простое и грамотное решение!
Или же до тех пор, пока информация о результатах размещения первого ордера не будет получена от сервера, терминал (советник) вообще не будет предпринимать никаких дальнейших действий?
Да, в общих-то чертах описание функции OnTrade() понятно. Непонятно пока, можно ли обойтись без неё при решении моего вопроса.
Как я понимаю нужно последовательно поставить два ордера, при этом второй должен выставляться только при 100% установке первого?
Может я и ошибаюсь, но как я понимаю вызов на установку первого ордера должен производиться из OnTimer() или OnTick(). После чего нужно анализировать результат OrderSend(BigDogSell,ResultSell) и действовать соответственно этому.
Как я понимаю нужно последовательно поставить два ордера, при этом второй должен выставляться только при 100% установке первого?
Может я и ошибаюсь, но как я понимаю вызов на установку первого ордера должен производиться из OnTimer() или OnTick(). После чего нужно анализировать результат OrderSend(BigDogSell,ResultSell) и действовать соответственно этому.
В справке есть такое примечание. так что наверно не важно где будет исполняться OrderSend, важно как будут обработаны результаты возврата сервера
Примечание Следует иметь в виду при выставлении рыночного ордера, что успешное окончание работы метода OrderSend() не всегда означает успешное совершение сделки. Необходимо проверять в возвращаемой структуре результата result значение retcode, содержащее код возврата торгового сервера, а также значение полей deal или order в зависимости от типа операции.
В справке есть такое примечание. так что наверно не важно где будет исполняться OrderSend, важно как будут обработаны результаты возврата сервера
Возможно я не совсем правильно выразился, но я имел введу анализ именно структуры.
Я почему-то считаю что предназначение OnTimer() или OnTick() таково:
OnTick() - Анализ рыночной информации по валюте рабочего графика, и совершении торговых операций по ней.
OnTimer() - Анализ рыночной информации по остальным валютам и совершение торговых операций по ним. Тут нужно также размещать все действия которые обрабатываются в определенное время, а также действия производимые в выходные.
OnTrade() - Нужен для анализа торговой информации. Но тут такая фишка - по большому счету тут нужно фиксировать факт появления, удаления нового отложника. И серьезно анализировать срабатывания отложника и выполнение рыночной операции (Buy или Sell).
PS
По идеи проще проанализировать результат установки первого отложника в или открытия позиции в OnTimer() или OnTick(), а затем ставить второй. Вот если бы скажем производилась открытие с рынка при уже существующей позе логичнее будет в OnTimer() или OnTick() зафиксировать сам факт успешности операции, а в OnTrade() уже узнать как это повлияло на открытую позу...
Возможно я не совсем правильно выразился, но я имел введу анализ именно структуры.
Я почему-то считаю что предназначение OnTimer() или OnTick() таково:
OnTick() - Анализ рыночной информации по валюте рабочего графика, и совершении торговых операций по ней.
OnTimer() - Анализ рыночной информации по остальным валютам и совершение торговых операций по ним. Тут нужно также размещать все действия которые обрабатываются в определенное время, а также действия производимые в выходные.
вы не правы по поводу этих функции
OnTick() - срабатывает при каждом тике
OnTimer() - срабатывает при заданном количестве секунд
вы не правы по поводу этих функции
OnTick() - срабатывает при каждом тике
OnTimer() - срабатывает при заданном количестве секунд
А я что говорил что это нет так?
То что OnTimer() будет выполнятся с интервалов в 1 секунду не помешает там получать торговую информацию или реализовать суточный/недельный ролловер...