Привет,
Я что-то делаю не так?
Чтобы узнать, к какому типу относятся вызовы OnTradeTransaction(), я хотел бы использовать магическое число. Единственный (почему единственный?) тип, который предоставляет магическое число - это request - НО в OnTradeTransaction() request.magic всегда 0?
Кроме того, даже комментарий пустой?
Кроме того, либо в request, либо в trans символ заполнен - это особенность или лажа => SYM = StringLen(request.symbol)>1 ? request.symbol : trans.symbol?
Когда я вручную открываю и/или закрываю позицию вызывается OnTradeTransaction(), но когда я вручную меняю SL и/или TP открытой позиции никакой реакции нет?
В списке открытых позиций и ордеров я вижу магическое число и комментарий, но все это не привязано ни к запросу, ни к транзакции, ни к результату... :(
Вот мой маленький советник, с которым вы можете проверить себя или сказать мне, что я делаю неправильно...
ТОЛЬКО ДЛЯ ДЕМО-СЧЕТОВ!!!
Два варианта получения магика
//--- Из сделки if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { if(HistoryDealSelect(trans.deal)) Print(HistoryDealGetInteger(trans.deal, DEAL_MAGIC)); } //--- Из ордера if(trans.type == TRADE_TRANSACTION_ORDER_ADD) { if(HistoryOrderSelect(trans.order)) Print(HistoryOrderGetInteger(trans.order, ORDER_MAGIC)); }
...Чтобы узнать, к какому типу относятся вызовы OnTradeTransaction(), я хотел бы использовать магическое число. Единственный (почему единственный?) тип, который предоставляет магическое число - это request - НО в OnTradeTransaction() request.magic всегда 0?
Из Документации:
request
[in] Переменная типа MqlTradeRequest с описанием торгового запроса, породившего транзакцию. Содержит значения только для транзакции типа TRADE_TRANSACTION_REQUEST.
void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { ENUM_TRADE_TRANSACTION_TYPE type=trans.type; if(type==TRADE_TRANSACTION_REQUEST) { // Dahin! Dahin möcht ich mit dir, o mein Geliebter, ziehn... }
Попробовал Test OnTradeTransaction 02.mq5. Часто не срабатывает OrderSendAsync():
CS 0 13:03:46.609 Test_OnTradeTransaction_02__1 (EURUSD,H1) 79 eurusd 70 Market Buy Mag: 70 CS 0 13:03:46.609 Test_OnTradeTransaction_02__1 (EURUSD,H1) 81 OrderSend error 4756 res.order 10021
Котировок нету. Может из-за праздников... наверное по-хорошему нужно цены обновлять принудительно перед отправкой запроса...
Посмотрел сюда:
Hinweis
Wenn die Funktion wird verwendet, um Informationen über den letzten Tick zu bekommen, ist es besser SymbolInfoTick() zu verwenden. Es ist möglich, dass seit Verbinden des Terminals an das Handelskonto keine Preise des Symbols empfangen worden. In einem solchen Fall wird der Wert nicht bestimmt.
In den meisten Fällen reicht es aus, SymbolInfoTick() zu verwenden. Mit dieser Funktion können Sie durch einen einzelnen Anruf Werte von Ask, Bid, Last, Volume und Zeit der des letzten Ticks zu bekommen.
Die Funktion bietet Informationen über die Höhe der erhobenen Marge, je nach Art und Richtung des Auftrags SymbolInfoMarginRate().
Из Документации :
request
[in] Переменная типа MqlTradeRequest с описанием торгового запроса, породившего транзакцию. Содержит значения только для транзакции типа TRADE_TRANSACTION_REQUEST .
Если вы видите здесь (https://www.mql5.com/ru/forum/438778#comment_44041215), то в запросе нет ни символа, ни комментария, ни магического числа . Последние два нужны не серверу, а нам, трейдерам.
:(
- 2022.12.29
- www.mql5.com
Почему вы должны проходить эту лишнюю милю? Я надеялся/ожидал, что смогу избежать именно такого объезда, поскольку все будет доступно.
Это всего 1/4 мили. Если вам нужно знать направление сделки IN или OUT
if(trans.symbol == _Symbol && HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)
то без выбора сделки вам не обойтись.
Или вам надо определить как закрылась позиция, по стопу, по тейку или советником, или ещё как-то… Другого варианта я не знаю, только через сделку.
Из Документации:
Попробовал Test OnTradeTransaction 02.mq5. Часто не срабатывает OrderSendAsync():
Котировок нету. Может из-за праздников... наверное по-хорошему нужно цены обновлять принудительно перед отправкой запроса...
Посмотрел сюда:
На мой взгляд ненадёжный и запутанный вариант.
Допустим пришёл тип TRADE_TRANSACTION_REQUEST увидели магик… Где его хранить? В локальной переменной? Так она при следующем типе транзакции обнулится. В переменной глобального уровня или статической переменной? А когда её следует обнулить? Ведь иметь в переменной устаревшее значение, на мой взгляд опасно. Описывать варианты возможных проблем не хочется, да и в двух словах не получится.
Это всего 1/4 мили. Если вам нужно знать направление сделки IN или OUT
то без выбора сделки вам не обойтись.
Или вам надо определить как закрылась позиция, по стопу, по тейку или советником, или ещё как-то… Другого варианта я не знаю, только через сделку.
Но это фактически означает, что функция, которая описана с таким трудом (https://www.mql5.com/ru/docs/event_handlers/ontradetransaction), на самом деле бесполезна - едва ли ее можно использовать.
:(
- www.mql5.com
Но это фактически означает, что функция, которая описана с таким трудом (https://www.mql5.com/ru/docs/event_handlers/ontradetransaction), на самом деле бесполезна - едва ли ее можно использовать.
:(
Даже не знаю как вам ответить, чтобы не обидеть.
Если я не умею играть на скрипке, то она мне бесполезна. А без функции OnTradeTransaction() я не могу обойтись. Мне от неё польза очень большая.
Даже не знаю как вам ответить, чтобы не обидеть.
Если я не умею играть на скрипке, то она мне бесполезна. А без функции OnTradeTransaction() я не могу обойтись. Мне от неё польза очень большая.
Я не думал, что такое возможно.
Это всего 1/4 мили. Если вам нужно знать направление сделки IN или OUT
то без выбора сделки вам не обойтись.
Или вам надо определить как закрылась позиция, по стопу, по тейку или советником, или ещё как-то… Другого варианта я не знаю, только через сделку.
Но и сделка не является хорошим решением! Вот пример вручную открытой позиции на продажу: в качестве сделки - покупка????
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет,
Я что-то делаю не так?
Чтобы узнать, к какому типу относятся вызовы OnTradeTransaction(), я хотел бы использовать магическое число. Единственный (почему единственный?) тип, который предоставляет магическое число - это request - НО в OnTradeTransaction() request.magic всегда 0?
Кроме того, даже комментарий пустой?
Кроме того, либо в request, либо в trans символ заполнен - это особенность или лажа => SYM = StringLen(request.symbol)>1 ? request.symbol : trans.symbol?
Когда я вручную открываю и/или закрываю позицию вызывается OnTradeTransaction(), но когда я вручную меняю SL и/или TP открытой позиции никакой реакции нет?
В списке открытых позиций и ордеров я вижу магическое число и комментарий, но все это не привязано ни к запросу, ни к транзакции, ни к результату... :(
Вот мой маленький советник, с которым вы можете проверить себя или сказать мне, что я делаю неправильно...
ТОЛЬКО ДЛЯ ДЕМО-СЧЕТОВ!!!