![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ещё раз, для "кандидатов", "докторов", "профессоров" и "академиков".
Любое событие, приходящее в OnTradeTransaction() может потерятся
Поэтому я считаю ошибкой, что после прихода значащаго события TRADE_TRANSACTION_HISTORY_ADD
данные в терминало о позиции не обновляются!
В справке (https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction):
Один торговый запрос, отправленный из терминала вручную или через торговые функции OrderSend()/OrderSendAsync(), может порождать на торговом сервере несколько последовательных торговых транзакций. При этом очередность поступления этих транзакций в терминал не гарантирована, поэтому нельзя свой торговый алгоритм строить на ожидании поступления одних торговых транзакций после прихода других. Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.
Поэтому вообще непонятно зачем нужна эта функция. Просто не надо ей пользоваться и все. Надо самостоятельно анализировать историю ордеров и сделок.
В справке (https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction):
Поэтому вообще непонятно зачем нужна этой функцией. Просто не надо ей пользоваться и все. Надо самостоятельно анализировать историю ордеров и сделок.
Что касается ордеров, позиций и сделок.
Как написано в хелпе - последовательность поступления транзакций не гарантирована - транзакция переноса ордера в историю может быть получена раньше, чем транзакция сделки.
Изменение позиции в терминале происходит строго в результате получения сделочной транзакции, соответственно её получение является гарантией того что позиция поменялась.
Получение транзакции переноса ордера в историю, гарантирует только то, что ордер перестал быть активным (открытым) и был перенесён в историю ордеров.
Что касается этой фразы.
Судя по всему - она осталась из документации к одной из начальных версий терминала с асинхронной торговли. В ближайшее время уберём. Виновные будут расстреляны.
Что касается ордеров, позиций и сделок.
Как написано в хелпе - последовательность поступления транзакций не гарантирована - транзакция переноса ордера в историю может быть получена раньше, чем транзакция сделки.
Изменение позиции в терминале происходит строго в результате получения сделочной транзакции, соответственно её получение является гарантией того что позиция поменялась.
Получение транзакции переноса ордера в историю, гарантирует только то, что ордер перестал быть активным (открытым) и был перенесён в историю ордеров.
Что касается этой фразы.
Судя по всему - она осталась из документации к одной из начальных версий терминала с асинхронной торговли. В ближайшее время уберём. Виновные будут расстреляны.
Большое спасибо!
А мне автомат датите (на худой конец ружо), чтобы поучаствовать в расстреле? :)
MQ Alexander!
Хотелось бы получить более расширеное пояснение по сделкам и позициям.
Потому что ВЫ писали:
А на деле получается следующее:
Тестовый эксперт билд 1375 демо открытия(был запущен 2 раза)
А вот, результаты:
Оба раза тразакция TRADE_TRANSACTION_HISTORY_ADD пришла первой, но
в первом случае позиции небыло, а во втором - была!
Как же понимать это?
Забыл приколоть лог терминала:
prostotrader, а позвольте Вам интимный вопрос. Вы за что так любите исторические ордера и не любите сделки? :-))
MQ Alexander ведь сказал:
Что касается ордеров, позиций и сделок.
Как написано в хелпе - последовательность поступления транзакций не гарантирована - транзакция переноса ордера в историю может быть получена раньше, чем транзакция сделки.Изменение позиции в терминале происходит строго в результате получения сделочной транзакции, соответственно её получение является гарантией того что позиция поменялась.
Получение транзакции переноса ордера в историю, гарантирует только то, что ордер перестал быть активным (открытым) и был перенесён в историю ордеров.
А в Вашем случае case
почти пустой...
И ещё лирическое замечание. По концепции MT5 наличие исторического ордера отражает факт того, что была попытка совершить какую-то торговую операцию. И не факт, что такая была выполнена. А чтобы это узнать нужно обратиться к сделке. Именно она уже отражает результат совершения торговой операции. Тогда логичнее в своём коде заниматься сделками...
prostotrader, а позвольте Вам интимный вопрос. Вы за что так любите исторические ордера и не любите сделки? :-))
MQ Alexander ведь сказал:
А в Вашем случае case
почти пустой...
Отвечаю Вам на Ваш интимный вопрос.
Вы, вероятно работатете на ФОРЕКС и имеете дело с одним ордером,
поэтому так настойчиво "лезите" в проблему, которую даже не понимаете.
Представьте, что в машине два руля и два водителя, которые оба смотрят только на
дорогу. Как 1-ый водитель узнает, что второй повереул руль (допустим вправо)?
И ещё посмотрите внимательно:
Вся Ваша примитивная логика строится на исполнении рыночного ордера, так вот,
довожу ло Вашкго сведения, что ещё есть лимитные и отложеннве ордера, которые
могут исполняться не полностью, а частями.
И ещё посмотрите внимательно:
И что я там должен увидеть?!
А Вы понимаете, что Вы случайно получаете информацию о позиции в case TRADE_TRANSACTION_HISTORY_ADD?
И Вам об этом уже говорили...prostotrader:
Вся Ваша примитивная логика строится на исполнении рыночного ордера, так вот,
довожу ло Вашкго сведения, что ещё есть лимитные и отложеннве ордера, которые
могут исполняться не полностью, а частями.
Деточка, не Вам судить о моей примитивной логике...
А кто будет судить?
Я сужу о Ваших способностях по Вашим высказываниям!
Картина явно неприглядная :(
Так понятней "профессор"?
И что-то я не припомню чтобы MQ Alexander делигировал Вас отвечать за него.