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

 
Aleksey Vyazmikin:

Где взять последнюю библиотеку?

Последняя версия всегда доступна на странице библиотеки.

А то с той, что у меня есть советник замедлился.

С библиотекой

2017.08.23 12:03:00.097 Core 3 Si Splice,M1: 992989 ticks, 248280 bars generated. Environment synchronized in 0:00:00.078. Test passed in 0:01:24.069 (including ticks preprocessing 0:00:00.421).

Без библиотеки

2017.08.23 12:06:38.022 Core 3 Si Splice,M1: 992989 ticks, 248280 bars generated. Environment synchronized in 0:00:00.079. Test passed in 0:01:09.186 (including ticks preprocessing 0:00:00.421).

Разница лишь в классе, который отрабатывает при деинициализации, пробегаясь по закрытым ордерам - он был написан на MT4.

Подобный класс должен отрабатывать за считанные миллисекунды.

 
fxsaber:

Последняя версия всегда доступна на странице библиотеки.

Подобный класс должен отрабатывать за считанные миллисекунды.


Обновил библиотеку, значительно лучше результат

2017.08.23 14:02:22.204 Core 3 Si Splice,M1: 992989 ticks, 248280 bars generated. Environment synchronized in 0:00:00.062. Test passed in 0:01:10.341 (including ticks preprocessing 0:00:00.437).


 
Aleksey Vyazmikin:

Обновил библиотеку, значительно лучше результат

Учитывайте такой нюанс. Многие пишут так

for (int i = 0; i < OrdersHistoryTotal(); i++)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    // ...

Это ведет к вызову OrdersHistoryTotal() на каждом проходе цикла. Функция оптимизирована и выполняется быстро, но все равно будет осуществляться каждый раз проверка на изменение Истории. Что явно лишнее и забирает драгоценное время. Поэтому правильно писать так

const int Total = OrdersHistoryTotal();

for (int i = 0; i < Total; i++)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    // ...

Так будет быстрее.

 
// Список изменений:
// 26.08.2017:
//   Add: Добавлены OrderOpenTimeMsc() и OrderCloseTimeMsc() - соответствующее время в миллисекундах.
//   Fix: Раньше все торговые тикеты имели тип int, как в MT4. Из-за появления случаев выхода за пределы int-типа в MT5, тип тикетов изменен на long.
//        Соответственно, OrderTicket и OrderSend возвращают long-значения. Режим возврата того же типа, что и в MT4 (int), включается через
//        прописывание следующей строки перед #include <MT4Orders.mqh>

//        #define MT4_TICKET_TYPE // Обязываем OrderSend и OrderTicket возвращать значение такого же типа, как в MT4 - int.
 
// Список изменений:
// 03.09.2017:
//   Add: Добавлены OrderTicketOpen()  - тикет MT5-сделки открытия позиции
//                  OrderOpenReason()  - причина проведения MT5-сделки открытия (причина открытия позиции)
//                  OrderCloseReason() - причина проведения MT5-сделки закрытия (причина закрытия позиции)
[Удален]  

//    if (MT4ORDERS::OrderSendBug)
//    {
//      Alert("BUG!!!!!!");
//
//      //MT4ORDERS_BENCHMARK;
//    }

что это за алерт в коде? он выдает "баг" если история не синхронизировалась за опр. время?

Нашел ранее в каментах, вопрос отпал. Стало быть ничего критичного, тоже иногда выскакивало.

 
Maxim Dmitrievsky:

//    if (MT4ORDERS::OrderSendBug)
//    {
//      Alert("BUG!!!!!!");
//
//      //MT4ORDERS_BENCHMARK;
//    }

что это за алерт в коде? он выдает "баг" если история не синхронизировалась за опр. время?

Нашел ранее в каментах, вопрос отпал. Стало быть ничего критичного, тоже иногда выскакивало.

Да, все верно. Редкий баг разработчиков. Только в библиотеке больше месяца вот так это выглядит

      if (!Res || MT4ORDERS::OrderSendBug)
      {
        Alert(Res ? "OrderSend - BUG!" : "MT4ORDERS - not Sync with History!");

Настоятельно рекомендую обновиться.

[Удален]  
fxsaber:

Да, все верно. Редкий баг разработчиков. Только в библиотеке больше месяца вот так это выглядит

Настоятельно рекомендую обновиться.

Обновился только что, спасибо )
 
Пример некоторой восприимчивости библиотеки к MQL5-штатным функциям
#include <MT4Orders.mqh>

void OnStart()
{
  if (PositionsTotal() > 1)
  {
    OrderSelect(0, SELECT_BY_POS); // Выбрали средствами MT4Orders
    OrderPrint();                  // Распечатали позицию, как в MT4
    
    PositionGetTicket(1);          // Выбрали средствами MQL5
    OrderPrint();                  // Распечатали позицию, как в MT4
  }
}
 

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

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

fxsaber, 2017.09.05 09:36

Отставание MT4Orders от максимально оптимизированного чистого MQL5 менее процента.