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

 
// Список изменений:
// 21.07.2023
//   Fix: Исправлена OrderLotsOpen() для удаленных отложенных ордеров.
//   Add: Обрабатывается ситуация, когда торговая MT5-сделка не имеет MT5-ордера.
//   Fix: Корректное определение OrderClosePriceRequest() при отсутствии цены у SL/TP-ордера.
//   Add: Макрос MT4ORDERS_AUTO_VALIDATION позволяет автоматически проходить проверку Маркет-продуктов.
//   Add: Макрос MT4ORDERS_ORDERS_SORT формирует сортированную по времени закрытия/удаления историю MT4-ордеров.
 

fxsaber #:

/   Add: Макрос MT4ORDERS_ORDERS_SORT формирует сортированную по времени закрытия/удаления историю MT4-ордеров.

Скачал обновление и проверил, сейчас с лимит-ордерами всё работает нормально, лагов пока не замечено.

Спасибо!

 
Vitaly Muzichenko #:

лагов пока не замечено.

Сейчас используется лобовой вариант.

Вот код, который может показать время выполнения такого решения после, если между соседними вызовами OrdersHistoryTotal() была обновлена история торгов.

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

ulong OrdersMQL5()
{
  ulong Res = 0;

  if (HistorySelect(0, INT_MAX))
  {
    const int Total = HistoryOrdersTotal();
    ulong Array[][2];
    
    ArrayResize(Array, Total);
    
    for (int i = 0; i < Total; i++)
    {
      const ulong Ticket = HistoryOrderGetTicket(i);

      Array[i][0] = HistoryOrderGetInteger(Ticket, ORDER_TIME_DONE_MSC);
      Array[i][1] = Ticket;
    }
          
    ArraySort(Array);      
    
    Res = Array[Total - 1][1];
  }
  
  return(Res);
}

void OnStart()
{
  OrdersMQL5(); // Разогрев.
  
  for (int i = 0; i < 3; i++)
    _B(OrdersMQL5(), 1);
    
  Print(HistoryOrdersTotal());
}


Результаты запуска на некоторых торговых счетах. По абсциссе HistoryOrdersTotal().

X - HistoryOrdersTotal()

Хорошо видно, что при 100K MT5-ордеров лаг займет 10 мс (время выполнения OrdersHistoryTotal в случае, если после предыдущего запуска была обновлена торговая история).

В Тестере лага нет совсем. Только в Терминале. Очевидно, что можно ускорить, но не до этого.

 

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

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

fxsaber, 2023.07.21 22:59

// Список изменений:
// 21.07.2023
//   Add: Макрос MT4ORDERS_AUTO_VALIDATION позволяет автоматически проходить проверку Маркет-продуктов.


Идея этого макроса состоит в том,

#define MT4ORDERS_AUTO_VALIDATION // Торговые приказы отправляются только в случае успешной проверки на корректность
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

что не нужно делать никаких проверок в своем коде. От этого код становится лаконичным и сразу готов пройти автоматическую валидацию в Маркете.


Это в теории, т.к. никто пока не проверял. Если подтвердите или опровергните работу этого механизма, будет хорошо.

 
fxsaber #:


Идея этого макроса состоит в том,

что не нужно делать никаких проверок в своем коде. От этого код становится лаконичным и сразу готов пройти автоматическую валидацию в Маркете.


Это в теории, т.к. никто пока не проверял. Если подтвердите или опровергните работу этого механизма, будет хорошо.

По возможности, Я это сделаю

Спасибо!

 
саб, вопрос в качестве оптимизации кода, в конце прошлой страницы
 
lynxntech #:

саб, на сколько выгодно использовать в передачи функции const?

и за одно, есть смысл создавать член класса внутри функции, или вполне обойтись глобальной, 7 символов в торговле робот

обработка на каждом тике, через индикатор шпион.

обработка на каждом тике, в пустую обычно, не ловит аномалии, это вопрос оптимизации своих функции вопросы..

К сожалению, мне не удалось понять этот текст.

 
fxsaber #:

К сожалению, мне не удалось понять этот текст.

это именно точно заданный вопросы, мне нужен такой же точно ответ, как и ты задаешь

 

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

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

fxsaber, 2023.07.07 13:12

Производительность.

Таблица производительности (время выполнения в миллисекундах) для b3815 и b2958.

MT5 build LastCloseTimeMQL4 LastCloseTimeMQL5 LastCloseTimeMQL4_2 LastCloseTimeMQL4+VIRTUAL::Snapshot LastCloseTimeMQL4+VirtualTester
b3815 2875 113 708 732 45
b2958 2718 107 675 715 50

Везде использовалась MT4Orders от 20.07.2022.

По той же методике сравнительная таблица двух билдов MT5: b4040 и b4057.

MT5 build LastCloseTimeMQL4 LastCloseTimeMQL5 LastCloseTimeMQL4_2 LastCloseTimeMQL4+VIRTUAL::Snapshot LastCloseTimeMQL4+VirtualTester
b4040 3663 117 881 928 27
b4057 246 122 171 213 27

На b4057+ производительность MT4Orders при работе с историей не уступает нативному MQL5.


Соответственно, больше (для MT5 b4057+) неактуальна данная ранее рекомендация.

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

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

fxsaber, 2023.07.07 13:12

  • нужно добиваться уменьшения вызовов OrderSelect для исторических ордеров. Этого можно добиться способами, что указаны в правых трех столбцах таблицы.
 

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

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

fxsaber, 2017.06.14 11:30

// Список изменений:
// 14.06.2017:
//   Add: Включена изначально заложенная реализация определения SL/TP закрытых позиций (закрытых через OrderClose).
//   Add: MagicNumber теперь имеет тип long - 8 байт (раньше был int - 4 байта).
//   Add: Если в OrderSend, OrderClose или OrderModify цветовой входной параметр (самый последний) задать равным INT_MAX, то будет сформирован
//        соответствующий торговый MT5-запрос (MT4ORDERS::LastTradeRequest), но отправлен он НЕ будет. Вместо этого будет проведена его MT5-проверка,
//        результат которой станет доступен в MT4ORDERS::LastTradeCheckResult.
//        В случае успешной проверки OrderModify и OrderClose вернут true, иначе - false.
//        OrderSend вернет 0 в случае успеха, иначе - -1.
//
//        Если же соответствующий цветовой входной параметр задать раным INT_MIN, то ТОЛЬКО в случае успешной MT5-проверки сформированного
//        торгового запроса(как в случае с INT_MAX) он БУДЕТ отправлен.
//   Add: Добавлены асинхронные аналоги MQL4-торговым функциям: OrderSendAsync, OrderModifyAsync, OrderCloseAsync, OrderDeleteAsync.
//        Возвращают соответствующий Result.request_id в случае удачи, иначе - 0.

Если нужно понять, терминал сделал отказ на торговый приказ или сервер.

// Если отказ - смотрим причину.  
if (!OrderDelete(OrderTicket(), INT_MIN)) // https://www.mql5.com/ru/forum/93352/page12#comment_5290455
  Print(ToString(MT4ORDERS::LastTradeRequest) + // https://www.mql5.com/en/forum/203931#comment_5287237
        ToString(MT4ORDERS::LastTradeResult) +
        ToString(MT4ORDERS::LastTradeCheckResult));