Ошибки, баги, вопросы - страница 1857

fxsaber:

еще раз спасибо, а то не знал как с этими перегрузками поступить, раздельно делаю, все получается, а вместе ни как ))

опечатка в документации?

https://www.mql5.com/ru/docs/series/copyticksrange

int  CopyTicks(
   const string     symbol_name,           // имя символа
   MqlTick&         ticks_array[],         // массив для приёма тиков
   uint             flags=COPY_TICKS_ALL,  // флаг, определяющий тип получаемых тиков
   ulong            from_msc=0,            // дата, начиная с которой запрашиваются тики
   ulong            to_msc=0               // дата, по которую запрашиваются тики
   );
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyTicksRange - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5

Тестер уходит в режим жуткого тормоза после 25К транзакций.

Запускаем 1585, по тикам, RTS-6.17, Metaquotes-Demo

#include <MT4Orders.mqh>

void OnTick()
{  
  static bool Error = false;  
  static int Type = OP_BUY;
  
  if (Error)
    return;
  
  MqlTick Tick;    

  if (OrderSelect(0, SELECT_BY_POS) && (OrderType() <= OP_SELL))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);    
  else if ((OrdersTotal() == 0) && SymbolInfoTick(_Symbol, Tick) && (Tick.bid != 0) && (Tick.ask != 0))
  {
    Error = (OrderSend(_Symbol, Type + OP_BUYLIMIT, 1, (Type == OP_BUY) ? Tick.ask : Tick.bid, 0, 0, 0, "", 0, 0, INT_MAX) == -1);        
    
    if (!Error)
    {
      OrderSend(_Symbol, Type + OP_BUYLIMIT, 1, (Type == OP_BUY) ? Tick.ask : Tick.bid, 0, 0, 0);
      
      Type = OP_SELL - Type;
    }    
  }
}

Не вижу причин появления тормозов. Такое ощущение, что написано ArrayResize(Orders, ArraySize(Orders) + 1). Т.е. Reserve_Size не используется.

В логе тестера отсутствует время, когда идет запись Expired
2017.04.19 10:46:15.165 2017.04.06 23:09:37   sell limit 1.00 RTS-6.17 at 114300 (114290 / 114300 / 114300)
2017.04.19 10:46:15.168 order expired [#284 sell limit 1.00 RTS-6.17 at 114300]
2017.04.19 10:46:15.168 2017.04.07 09:45:04   buy limit 1.00 RTS-6.17 at 114170 (114140 / 114180)
Прошу в лог тестера к историческому времени добавлять еще и миллисекунды.

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

Ошибки, баги, вопросы

fxsaber, 2017.04.19 08:58

Тестер уходит в режим жуткого тормоза после 25К транзакций.

Запускаем 1585, по тикам, RTS-6.17, Metaquotes-Demo

#include <MT4Orders.mqh>

void OnTick()
{  
  static bool Error = false;  
  static int Type = OP_BUY;
  
  if (Error)
    return;
  
  MqlTick Tick;    

  if (OrderSelect(0, SELECT_BY_POS) && (OrderType() <= OP_SELL))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);    
  else if ((OrdersTotal() == 0) && SymbolInfoTick(_Symbol, Tick) && (Tick.bid != 0) && (Tick.ask != 0))
  {
    Error = (OrderSend(_Symbol, Type + OP_BUYLIMIT, 1, (Type == OP_BUY) ? Tick.ask : Tick.bid, 0, 0, 0, "", 0, 0, INT_MAX) == -1);        
    
    if (!Error)
    {
      OrderSend(_Symbol, Type + OP_BUYLIMIT, 1, (Type == OP_BUY) ? Tick.ask : Tick.bid, 0, 0, 0);
      
      Type = OP_SELL - Type;
    }    
  }
}

У кого-нибудь воспроизводится? Настройки тестера такие

Результат

Tester  RTS-6.17,M1: 254907 ticks, 785 bars generated. Test passed in 0:15:54.180 (including ticks preprocessing 0:00:00.047).

Т.е. прогон в 250К тиков за 16 минут.


Каким образом в тестере возможно замерить падение его производительности? Пробовал через GetTickCount и глобальные переменные - не выходит.

Если в тестере (визуалка выключена) прерываешь прогон, то доступен лог прерванного прогона и график его эквити. Но совершенно не доступна ордерная история прерванного прогона. В MT4  с этим проблем нет.
[Удален]
fxsaber:
Прошу в лог тестера к историческому времени добавлять еще и миллисекунды.
Также прошу ко времени прихода биржевых данных и времени прихода обновления стакана добавить миллисекунды!
fxsaber:
Прошу в лог тестера к историческому времени добавлять еще и миллисекунды.

Это вряд ли.

Если и сделаем, то не скоро. Есть более приоритетные задачи. Извините.

Artyom Trishkin:

ArrayMaximum() и ArrayMinimum() - порядок передаваемых параметров не соответствует справке:


Слева показан код на MQL4 - там другой порядок параметров