МТ4 или МТ5. Какие преимущества и недостатки? - страница 56

 
Maxim Dmitrievsky:

мт5 жеж в Открывахе

так может лимитки в мт5 тоже эээ маркетами исполняются? на других платформах что?

[Удален]  
Комбинатор:

так может лимитки в мт5 тоже эээ маркетами исполняются? на других платформах что?


ну на бирже в принципе такого быть не должно.. другие платформы там не пробовал

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

п.с. но там еще 4-х знак, спред плавает 1-2 пункта в среднем, т.е. особо не разгуляешься

 

Советники на Trade.mqh Оптимизируются на > 50% медленнее, чем написанные на чистом MQL5 (либо с помощью другой торговой библы).

 

Объясните как такое возникает:


Тики есть - баров нет.

Нет цен Last и поэтому берется Bid.

Тысячи таких случаев по каждой паре.

И все это не просто на сервере у какого-то брокера, а на сервере MQ.

Ну как так-то?

Что делать пользователю продукта, который видит такие записи в процессе тестирования и задается вопросом о смысле тестирования и оптимизации на таких данных?


В справке о таких нюансах ничего не нашел.

Поделитесь рецептом

 
Kirill Belousov:

Объясните как такое возникает:

Расшифруйте.

 
fxsaber:

Расшифруйте.

Если есть тик принадлежащий интервалу бара, то почему может не быть самого бара в истории?

 
Kirill Belousov:

Если есть тик принадлежащий интервалу бара, то почему может не быть самого бара в истории?

Вы заставляете додумываться до Вашего торгового окружения, вместо того, чтобы сообщить мин. требуемой информации.

Речь про биржу?

 
fxsaber:

Вы заставляете додумываться до Вашего торгового окружения, вместо того, чтобы сообщить мин. требуемой информации.

Речь про биржу?

Нет.

Речь про форекс. Начал переход с МТ4, поэтому вопрос может быть нубский...

 
Kirill Belousov:

Нет.

Речь про форекс. Начал переход с МТ4, поэтому вопрос может быть нубский...

С барами не работаю, поэтому точно знать не могу. Хорошо, если предоставите кусок лога или скрина.

И рекомендую всегда начинать обсуждении видящейся для Вас проблемы с данными для воспроизведения.

Идеально - код + результат запуска.

 
fxsaber:

Советники на Trade.mqh Оптимизируются на > 50% медленнее, чем написанные на чистом MQL5 (либо с помощью другой торговой библы).

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

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

fxsaber, 2017.12.29 13:29

Об этом было написано летом вместе с заявкой в СД. Удивительно, что все ровно! Или это логично? Как можно говорить о супер-скорости тестера, когда почти все советники (используют СБ) проваливаются в скорости, съедают деньги в Облаке и т.д.?! Видимо, это нормально.


Исходный код упростил, выкинув работу с Историей и MT4Orders. Оставил только чистый MQL5 и СБ

#include <TesterBenchmark.mqh>

#include <Trade\Trade.mqh> // Закомментировать, чтобы включить вариант на чистом MQL5

input int Interval = 60;

void OnTick()
{
#ifdef  ERR_USER_INVALID_HANDLE // Trade.mqh
  static CTrade Trade;
  static CDealInfo Deal;
  static CPositionInfo Position;

  if (!Position.SelectByIndex(0))
  {
    if (HistorySelect(0, LONG_MAX))
    {
      const int Total = HistoryDealsTotal() - 1;

      if ((Total >= 0) && Deal.SelectByIndex(Total) && (Deal.DealType() == DEAL_TYPE_SELL))
        Trade.Sell(1);
      else
        Trade.Buy(1);
    }
  }
  else if (TimeCurrent() - Position.Time() >= Interval)
    Trade.PositionClose(_Symbol);
#else  // ERR_USER_INVALID_HANDLE
  if (!PositionGetTicket(0))
  {
    if (HistorySelect(0, LONG_MAX))
    {
      const int Total = HistoryDealsTotal() - 1;
      MqlTradeRequest Request = {0};

      Request.action = TRADE_ACTION_DEAL;

      Request.symbol = _Symbol;
      Request.type = ((Total >= 0) && ((ENUM_DEAL_TYPE)HistoryDealGetInteger(HistoryDealGetTicket(Total), DEAL_TYPE) == DEAL_TYPE_SELL)) ?
                     ORDER_TYPE_SELL : ORDER_TYPE_BUY;;

      Request.volume = 1;
      Request.price = SymbolInfoDouble(Request.symbol, (Request.type == ORDER_TYPE_BUY) ? SYMBOL_ASK : SYMBOL_BID);

      MqlTradeCheckResult CheckResult;
      if (OrderCheck(Request, CheckResult))
      {
        MqlTradeResult Result;

        const bool AntiWarning = OrderSend(Request, Result);
      }
    }
  }
  else if (TimeCurrent() - PositionGetInteger(POSITION_TIME) >= Interval)
  {
    MqlTradeRequest Request = {0};
    MqlTradeResult Result;

    Request.action = TRADE_ACTION_DEAL;
    Request.position = PositionGetInteger(POSITION_TICKET);

    Request.symbol = PositionGetString(POSITION_SYMBOL);
    Request.type = (ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE));

    Request.volume = PositionGetDouble(POSITION_VOLUME);
    Request.price = PositionGetDouble(POSITION_PRICE_CURRENT);

    const bool AntiWarning = OrderSend(Request, Result);
  }
#endif // ERR_USER_INVALID_HANDLE
}


Результат СБ

------
OnTesterInit
i = 0 Pass = 0 OnTester = 1.898 s.: Count = 2007057, 1057458.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1730
i = 1 Pass = 1 OnTester = 1.900 s.: Count = 2007057, 1056345.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1730
iMin = 0 Results[iMin] = 1.898s.
iMax = 1 Results[iMax] = 1.900s.
Amount = 2 Mean = 1.899 s. - 81.75%
OnTesterDeinit
------
Interval = 4.646 s., Count = 0, 0.0 unit/sec


Результат чистого MQL5

------
OnTesterInit
i = 0 Pass = 0 OnTester = 1.239 s.: Count = 2007057, 1619900.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1730
i = 1 Pass = 1 OnTester = 1.243 s.: Count = 2007057, 1614687.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1730
iMin = 0 Results[iMin] = 1.239s.
iMax = 1 Results[iMax] = 1.243s.
Amount = 2 Mean = 1.241 s. - 75.10%
OnTesterDeinit
------
Interval = 3.305 s., Count = 0, 0.0 unit/sec

Все в те же 1.5 раза! Но лохамвсем пофиг, продолжаем использовать супер-СБ.