Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я же описывал эту ситуацию... :)
Она будет возникать часто, если НЕ использовать OrderSendAsync()...
OnTradeTransaction() позволяет отслеживать состояния ордера ОЧЕНЬ быстро.
(у меня не возникает таких проблем)
Да, буду переводить на асинхронный режим.
Не забудьте, событие OnTradeTransaction - НЕ ГАРАНТИРОВАНО!
Моя статья почему-то не выходит :(
В примерах РЫНОК ФОРЕКС
Отслеживание ордера, после команды OrderSendAsync
Михаил | 23 апреля, 2015
В статье рассказывается принцип отслеживания ордера после команды OrderSendAsync, если нет события TradeTransaction.
Введение
Сокращение времени выставления, удаления и модификации ордера является краеугольным камнем многих стратегий торговли.
В терминале МТ5 команда OrderSendAsync позволяет существенно сократить время исполнения приказов.
Она (команда) OrderSendAsync, обрабатывается функцией OnTradeTransaction, но к сожалению,
событие TradeTransaction не гарантированно.
Идею отслеживания ордера после команды OrderSendAsync (при отсутствии событияTradeTransaction),
с использование уникальных номеров (magic number), предложил комрад Yurich, за что ему большое спасибо.
Проблему отслеживания ордеров рассмотрим на примере покупки-продажи.
Обычный алгоритм
Если ордер отправлен (SetOrder()), то мы получаем номер отправки запроса (request_id), далее,
если ордер выставлен в рынок, то мы получаем его билет (OnTradeTransaction --> TRADE_TRANSACTION_REQUEST --> order_ticket = result.order).
Зная билет ордера, мы можем отследить что с ним произошло.
Но если не произошло событие(события) TradeTransaction, узнать что
произошло с ордером невозможно, так как мы можем не получить билет ордера или
событий с ордером происходящие (отклонение биржей или брокером, удаление, экспирация или модификация).
Рассмотрим алгоритм, позволяющий отследить состояния ордера, при отсутствии событий TradeTransaction.
Алгоритм, при отсутствии событий ТradeTransaction
Дополнительные переменные, необходимые для отслеживания ордера:
SecTimer - период времени ожидания события TradeTransaction
magic_number - начало диапазона магических чисел, задаваемый для каждого символа.
Т.е, например, для EURUSD - c 1010000 по 1019999,
для GBPUSD - c 102000 по1029999 и т.д
10000 уникальных номеров для одного символа вполне достаточно,
чтобы эти уникальные номера "разнести" во времени.
При достижении 10000 происходит новый цикл:
Одинаковые уникальные номера будут, но они будут "разнесены" во времени, для чего
и служит переменная - mem_time.
mem_magic - уникальное число КАЖДОГО ордера.
magic_storage - переменная для хранения текущего уникального числа.
mem_tick - начало отсчёта времени для сравнения с периодом ожидания события TradeTransaction.
Для цикла проверки времени создаётся миллисекундный таймер:
Событие OnTimer() вызывает функцию CheckOrders();
И если время ожидания события TradeTransaction превышено,
то происходит выполнение функции.
Если мы не получили билет ордера в OnTradeTransaction, то
mem_magic > 0 и мы пытаемся получить билет вызывая функцию:
GetOrderTicket( mem_magic, mem_time - 2000, TimeTradeServer() + 5000);
Если же ордер был получен ( order_ticket > 0 ) но не пришло событие
OnTradeTransaction, то мы можем отследить его состояние, просмотрев историю.
Заключение
В статье рассмотрены общие принципы отслеживания ордера (с примерами), после команды OrderSendAsync.
При проектировании советника, с использованием этого принципа, необходимо рассмотреть
более подробно все аспекты действия с ордером.
Это означает, что приведённый выше код, может и не дать
желаемого результата, если его просто скопировать в свой советник.
Данный метод (не примеры кода для ФОРЕКС, изложенные выше) отслеживания применён мною в советниках для ФОРТС,
где с успехом работает более 9 месяцев.
С уважением, и успехов в программировании советников!
а почему не выходит? Что говорят в MQ? Давно послали на проверку?
Говорят, что по объёму "не дотягивет".
Понимаю... Mikalas, так у Вас такой опыт тестирования и проверок, что, имхо, можно книжку написать :-)
Не ленитесь, воды долейте, в смысле добавьте что-то ещё, например сравнительный анализ Forex'a и ФОРТСа в контексте заявленной темы...
Понимаю... Mikalas, так у Вас такой опыт тестирования и проверок, что, имхо, можно книжку написать :-)
Не ленитесь, воды долейте, в смысле добавьте что-то ещё, например сравнительный анализ Forex'a и ФОРТСа в контексте заявленной темы...
Нет, спасибо, что-то не хочется....
У меня есть более важные дела.
Нет, спасибо, что-то не хочется....
Ну хозяин - барин... а вообще, первая статья (вроде Вы не писали) даётся непросто... сужу по собственному опыту... помню, как меня модератор носом ткнёт то туда, то сюда...
Тут нужно набраться терпения и дойти до конца ;-)
Продолжение о модификации ордера....
Ваш код:
Для модификации нужно делать так (думаю, что и при установке ордера, Вы не правильно указываете тип экспирации):