Библиотеки: MT4Orders - страница 54

 
fxsaber:

Приведите mq5-файл, который Вам видится нерабочим. Вы зря столько инфы приводите. Она не помогает понять, что имеете в виду. Лучше исходник.

Код корявый извиняюсь.

Файлы:
 
Valeriy Yastremskiy:

Код корявый извиняюсь.

В следующий раз лучше по существу.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static TICKET_TYPE Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - 100 * _Point, 0);
  else if (!OrdersTotal())
  {
    Print(OrderSelect(Ticket, SELECT_BY_TICKET)); // true
    OrderPrint();
    
    Print(__MT4ORDERS__);
    
    ExpertRemove();
  }
}


Результат.

2020.10.22 22:16:20.196 2020.10.21 00:03:10   market buy 1 EURAUD sl: 1.67661 (1.67664 / 1.67761)
2020.10.22 22:16:20.196 2020.10.21 00:03:10   deal #2 buy 1 EURAUD at 1.67761 done (based on order #2)
2020.10.22 22:16:20.196 2020.10.21 00:03:10   deal performed [#2 buy 1 EURAUD at 1.67761]
2020.10.22 22:16:20.196 2020.10.21 00:03:10   order performed buy 1 at 1.67761 [#2 buy 1 EURAUD at 1.67761]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   stop loss triggered #2 buy 1 EURAUD 1.67761 sl: 1.67661 [#3 sell 1 EURAUD at 1.67661]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   deal #3 sell 1 EURAUD at 1.67638 done (based on order #3)
2020.10.22 22:16:20.198 2020.10.21 00:12:59   deal performed [#3 sell 1 EURAUD at 1.67638]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   order performed sell 1 at 1.67638 [#3 sell 1 EURAUD at 1.67661]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   true
2020.10.22 22:16:20.198 2020.10.21 00:12:59   #3 2020.10.21 00:03:10.025 buy 1.00 EURAUD 1.67761 1.67661 0.00000 2020.10.21 00:12:59.874 1.67638 0.00 0.00 -123.00 sl 1.67661 0
2020.10.22 22:16:20.198 2020.10.21 00:12:59   2020.10.21
2020.10.22 22:16:20.198 2020.10.21 00:12:59   ExpertRemove() function called
 
fxsaber:

В следующий раз лучше по существу.


Результат.

Спасибо.

 
fxsaber:

В следующий раз лучше по существу.

Результат.

Нашел причину, старая версия MT4Orders  2018 года. С ней и Ваш пример дал false поменял на последний все заработало, и мой код тоже)

Спасибо.

 
Valeriy Yastremskiy:

Нашел причину, старая версия MT4Orders  2018 года.

К сожалению, не придумал, как сделать, чтобы пользователи меньше спотыкались на использовании не актуальных версий библиотеки.

 

Если кто-то налетит, то при использовании этой либы на MT5 на RannForex с настройкой "Отправка лимитных ордеров в рынок по цене хуже текущей на N пунктов" при модификации лимитника вылетит алёрт в этом месте

          WHILE((EqualSL && EqualTP && EqualPrice));

          if (!Res)
            ::Print("Line = " + (string)__LINE__ + "\n" + TOSTR(::OrderGetDouble(ORDER_SL)) + TOSTR(Request.sl)+
                    TOSTR(::OrderGetDouble(ORDER_TP)) + TOSTR(Request.tp) +
                    TOSTR(::OrderGetDouble(ORDER_PRICE_OPEN)) + TOSTR(Request.price) +
                    TOSTR(EqualSL) + TOSTR(EqualTP) + TOSTR(EqualPrice) +
                    TOSTR(::OrderSelect(Result.order)) +
                    TOSTR2((ENUM_ORDER_STATE)::OrderGetInteger(ORDER_STATE)));

Связано с тем, что MT4Orders видит ушедший ордер промаркапленый, а брокер сразу правит цену обратно, и при запросе параметров ордера цена уже другая. Так что похоже это фича.

 
traveller00:

Если кто-то налетит, то при использовании этой либы на MT5 на RannForex с настройкой "Отправка лимитных ордеров в рынок по цене хуже текущей на N пунктов" при модификации лимитника вылетит алёрт в этом месте

Связано с тем, что MT4Orders видит ушедший ордер промаркапленый, а брокер сразу правит цену обратно, и при запросе параметров ордера цена уже другая. Так что похоже это фича.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: MT4Orders

fxsaber, 2020.09.29 08:45

Такой строкой

MT4ORDERS::OrderSend_MaxPause = 0; // Отключение проверки корректности работы MT5-OrderSend.

можно все это отключить. Может быть полезно в случае, если тормозит MT5-история торгов, т.к. MT4Orders проверяет корректность (и даже корректирует) MT5-OrderSend иногда через обращение к этой истории.

Не рекомендую этого делать.

Использую эту возможность.
 

I have an MT4 EA that I'm trying to port to MT5 using MT4Orders so I can maintain a single source, but I've run into some issues ...

1) when an order hits SL or TP, the usual [sl] or [tp] texts are not appended to the order comment if the EA added a comment during OrderSend().

Is this normal MT5 behaviour? If so, is there a reliable way to determine whether an order actually hit SL/TP or was closed manually?

(trying to decide by checking open price / close price / SL / TP is not reliable due to slippage - especially if SL was moved very close to TP)

** interestingly, OrdersToString() shows "[sl x.xxxxx]" in comments, but the Order History tab does not show that information (and it is not included in OrderComment() in the strategy tester)


2) when a partial close occurs, the comments on the open and closed portions order do not show "to #xxxxxxx" and "from #xxxxxxx"

again, is there a reliable (and hopefully simple) way to determine what happened to a particular order?

3) the ticket number of an open trade changes when it closes, so I can't use OrderTicket() to follow an order, but OrderTicketID() seems to work like OrderTicket() does in MT4 and retains the same ID for a closed trade.

Is that value constant, or might it change between platform restarts? If constant, what's the best way to use OrderTicketID() but retain compatibility with MT4 (since OrderTicketID() is not an MT4 function)?

** OrderTicketID() seems to ignore the MT4_TICKET_TYPE directive and is always "long"
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
SysFX:

I have an MT4 EA that I'm trying to port to MT5 using MT4Orders so I can maintain a single source, but I've run into some issues ...

1) when an order hits SL or TP, the usual [sl] or [tp] texts are not appended to the order comment if the EA added a comment during OrderSend().

Is this normal MT5 behaviour? If so, is there a reliable way to determine whether an order actually hit SL/TP or was closed manually?

(trying to decide by checking open price / close price / SL / TP is not reliable due to slippage - especially if SL was moved very close to TP)

https://www.mql5.com/ru/forum/93352/page20#comment_7112531

https://www.mql5.com/ru/forum/93352/page18#comment_6246123

2) when a partial close occurs, the comments on the open and closed portions order do not show "to #xxxxxxx" and "from #xxxxxxx"

again, is there a reliable (and hopefully simple) way to determine what happened to a particular order?

По этому описанию не понял, какую задачу нужно решить.

3) the ticket number of an open trade changes when it closes, so I can't use OrderTicket() to follow an order, but OrderTicketID() seems to work like OrderTicket() does in MT4 and retains the same ID for a closed trade.

Is that value constant, or might it change between platform restarts? If constant, what's the best way to use OrderTicketID() but retain compatibility with MT4 (since OrderTicketID() is not an MT4 function)?

** OrderTicketID() seems to ignore the MT4_TICKET_TYPE directive and is always "long"

SELECT_BY_TICKET работает правильно с OrderTicket/OrderTicketID/OrderTicketOpen. Все функции из MT4Orders не изменяют своих значений после перезагрузки Терминала.

Одинаковый OrderTicketID в MT5 может иметь несколько закрытых позиций (при частичном закрытии). По той же причине одинаковый OrderTicketID может быть у открытой позиции и у закрытой позиции. Из-за этой неоднозначности MT5 используется OrderTicket - уникальный для каждой закрытой/открытой позиции тикет.


Для кроссплатформенности (совместимости с MT4) было сделано это обновление библиотеки.


** OrderTicketID() seems to ignore the MT4_TICKET_TYPE directive and is always "long"
Спасибо, исправил.
// Список изменений:
// 11.11.2020
//   Fix: OrderTicketID() и OrderTicketOpen() возвращают заданный в TICKET_TYPE тип значения.
 
2) when a partial close occurs, the comments on the open and closed portions order do not show "to #xxxxxxx" and "from #xxxxxxx"

again, is there a reliable (and hopefully simple) way to determine what happened to a particular order?

What I meant was this:

If you have a 1.00 lot trade in MT4 with a ticket number 123456 and you partially close 0.40 lots, then ticket number 123456 shows on the History tab as 0.40 lots and its trade comment shows "to #NewTicket".

On the Trades tab, a new 0.60 lot trade appears with ticket number "NewTicket", and its trade comment shows "from #123456".