Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вообще странно что тема закрытия ордеров в тестере редко поднимается.
На данный момент реализовал механизм по принципу предложенному Ihor Herasko с линиями. Причем линии сделал невидимыми.
Но есть существенный недостаток в алгоритме. Т.к. кроме удаления самого ордера после удаления линии руками, приходиться проверять и удалять сами линии в случае закрытия ордера советником.
Т.е. в идеале на каждом тике надо проверять связку как Линия -> Ордер. так и Ордер -> Линия, что заметно замедляет работу советника.
Если у котото будут мысли по этому поводу будет интересно выслушать.
Говорю, же, есть готовые рецепты. Поищите просто.
https://www.mql5.com/ru/code/24829
Блин, который раз слышу такое очевидное заблуждение что что-то надо делать на каждом тике, зачем?! :)
Удаление линии - событие OnChartEvent, в нем удаление ордера.
Удаление ордера - если МТ5 OnTrade или если нужно OnTradeTransaction. В МТ4 советник при удалении пусть выставляет флаг, который всего лишь и проверять на тике тогда уж.
З.Ы. Когда искал что-то интересующее в кодо-базе столкнулся с тем, что по ощущениям минимум 80% там лежит программ, выполняющих 80% бесполезных действий, таких как пересчёт всей истории индикатора на каждом тике) возможно ошибаюсь и мне просто не повезло.
какое событие сработает (MT4) при закрытии ордера самим советником?
какое событие сработает (MT4) при закрытии ордера самим советником?
в МТ4 нет OnTrade, возможно пока. Цитирую:
В МТ4 советник при удалении ордера пусть выставляет флаг, который всего лишь и проверять на тике тогда уж.
Проверить флаг на порядки быстрее, чем проверять список всех ордеров, выставлен флаг - только тогда перебираем ордера чтоб удалить соответствующую линию.
в МТ4 нет OnTrade, возможно пока. Цитирую:
В МТ4 советник при удалении ордера пусть выставляет флаг, который всего лишь и проверять на тике тогда уж.
Проверить флаг на порядки быстрее, чем проверять список всех ордеров, выставлен флаг - только тогда перебираем ордера чтоб удалить соответствующую линию.
при удалении ордера руками все понятно, речь идет про удаление ордера в процессе работы советника - т.е. когда ордер удаляется самим советником (допустим по достижению тейка)
при удалении ордера руками все понятно, речь идет про удаление ордера в процессе работы советника - т.е. когда ордер удаляется самим советником (допустим по достижению тейка)
Так я и говорю не про удаление руками. Если советник удаляет ордер, значит он может и выставить флаг (булева переменная которую потом проверять) для удаления линии.
Я вообще делал класс обертку для связки линия-ордер-позиция. Советник при удалении ордера или позиции идет и меняет линию, например цвет, стиль, можно и удалить совсем. что непонятного?
Ап: А если вы выставляете Тейк не виртуальный, тогда позиция закрывается на сервере без участия советника как бы. В этом случае решение - хранить тейк для каждой линии и проверять достижение бидом или аском тейка линии, ок?
Удобно использовать из стандартной бибилиотека класс CChartTrendLines или типа того ;)
Так я и говорю не про удаление руками. Если советник удаляет ордер, значит он может и выставить флаг (булева переменная которую потом проверять) для удаления линии.
Я вообще делал класс обертку для связки линия-ордер-позиция. Советник при удалении ордера или позиции идет и меняет линию, например цвет, стиль, можно и удалить совсем. что непонятного?
Не понятно почему вы не читаете что вам пишут. Ордер может закрыться по тейкпрофиту, как вы установите флаг?
Не понятно почему вы не читаете что вам пишут. Ордер может закрыться по тейкпрофиту, как вы установите флаг?
Вы неверно пишите от этого и непонятно. если установите тейк, то ордер закрывает не советник.
Ап: А если вы выставляете Тейк не виртуальный, тогда позиция закрывается на сервере без участия советника как бы. В этом случае решение - хранить тейк для каждой линии и проверять достижение бидом или аском тейка линии, ок?
Удобно использовать из стандартной бибилиотека класс CChartTrendLines или типа того ;)
Если быть точным ChartObjectsLines.mqh
вот набросал код, должен работать - это кнопка и закрытие всех ордеров
Блин, который раз слышу такое очевидное заблуждение что что-то надо делать на каждом тике, зачем?! :)
это не заблуждение
с момента прихода прошлого тика может много, что измениться, может ордер закрыться по тейку/стопу, может пользователь "помогает советнику"
ночью тики вообще редко приходят, у ушлых брокеров на новостях вообще связь отключают, ну включат ее потом через 5 минут, что там у советника после новостей с ордерами? - да фиг его знает что!
тестировать производительность устал уже, но точно знаю, что комбинации OrdersTotal() --> OrderSelect(i,SELECT_BY_POS,MODE_TRADES)
выполняются очень быстро, видел, да и сам иногда так писал коды советников в которых на одном тике по раза 3-5 пересчет ордеров был, ничего не тупит ни в тестере/оптимизаторе да и на реале нагрузка на процессор вообще отсутствует
т.е. OrdersTotal() --> OrderSelect(i,SELECT_BY_POS,MODE_TRADES) пишите и вызывайте каждый тик, секреты производительности не в них, а сделать надежный код это Вам позволит