Новая версия платформы MetaTrader 5 build 2615: Фундаментальный анализ и комплексный критерий в тестере стратегий - страница 7

 
Попытка запуска профилировщика на реальных данных.
code generated          1       1
internal error #112             0       0
1 errors, 0 warnings            2       1
Профилирование на исторических - аналогично.
 

Удалось запустить профилировщик не на боевом советнике. На истории показывает так.

OrderSend съедает 92%. Видимо, в Тестере это дорогая функция.

 
Видимо, мое невежество в знании возможностей синтаксиса.
Print(OrdersTotal() + + PositionsTotal()); // OK
 
fxsaber:
Видимо, мое невежество в знании возможностей синтаксиса.

Это математика - 1ый класс: 1 + + 1 = 1 + (+1) = 2

 
Профилирование на реальных данных этого советника.

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

MT5 и скорость в боевом исполнении

fxsaber, 2020.09.08 19:46

// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}

Выделил совсем непонятные значения. Например, по какой причине OrderSend, который вызывается в OnTimer, сработал 445 раз, а OnTimer - один раз?


Лог запуска/выгрузки советника.

2020.09.15 21:12:32.553 Experts expert Test6 (EURUSD,H1) loaded successfully
2020.09.15 21:12:35.160 Trades  '34510052': instant buy 0.1 EURUSD at 1.18465
2020.09.15 21:12:35.232 Trades  '34510052': accepted instant buy 0.1 EURUSD at 1.18465
2020.09.15 21:12:35.242 Trades  '34510052': deal #690865344 buy 0.1 EURUSD at 1.18465 done (based on order #711683631)
2020.09.15 21:12:35.246 Trades  '34510052': order #711683631 buy 0.1 / 0.1 EURUSD at 1.18465 done in 85.480 ms
2020.09.15 21:12:36.174 Trades  '34510052': instant sell 0.1 EURUSD at 1.18459, close #711683631 buy 0.1 EURUSD 1.18465
2020.09.15 21:12:36.246 Trades  '34510052': accepted instant sell 0.1 EURUSD at 1.18459, close #711683631 buy 0.1 EURUSD 1.18465
2020.09.15 21:12:36.246 Trades  '34510052': deal #690865354 sell 0.1 EURUSD at 1.18459 done (based on order #711683640)
2020.09.15 21:12:36.251 Trades  '34510052': order #711683640 sell 0.1 / 0.1 EURUSD at 1.18459 done in 77.863 ms
2020.09.15 21:12:37.163 Trades  '34510052': instant buy 0.1 EURUSD at 1.18465
2020.09.15 21:12:37.235 Trades  '34510052': accepted instant buy 0.1 EURUSD at 1.18465
2020.09.15 21:12:37.235 Trades  '34510052': deal #690865363 buy 0.1 EURUSD at 1.18465 done (based on order #711683648)
2020.09.15 21:12:37.236 Trades  '34510052': order #711683648 buy 0.1 / 0.1 EURUSD at 1.18465 done in 73.463 ms
2020.09.15 21:12:38.174 Trades  '34510052': instant sell 0.1 EURUSD at 1.18459, close #711683648 buy 0.1 EURUSD 1.18465
2020.09.15 21:12:38.246 Trades  '34510052': accepted instant sell 0.1 EURUSD at 1.18459, close #711683648 buy 0.1 EURUSD 1.18465
2020.09.15 21:12:38.246 Trades  '34510052': deal #690865380 sell 0.1 EURUSD at 1.18459 done (based on order #711683666)
2020.09.15 21:12:38.248 Trades  '34510052': order #711683666 sell 0.1 / 0.1 EURUSD at 1.18459 done in 73.195 ms
2020.09.15 21:12:39.157 Trades  '34510052': instant buy 0.1 EURUSD at 1.18465
2020.09.15 21:12:39.232 Trades  '34510052': accepted instant buy 0.1 EURUSD at 1.18465
2020.09.15 21:12:39.232 Trades  '34510052': deal #690865391 buy 0.1 EURUSD at 1.18465 done (based on order #711683677)
2020.09.15 21:12:39.233 Trades  '34510052': order #711683677 buy 0.1 / 0.1 EURUSD at 1.18465 done in 76.151 ms
2020.09.15 21:12:40.159 Trades  '34510052': instant sell 0.1 EURUSD at 1.18459, close #711683677 buy 0.1 EURUSD 1.18465
2020.09.15 21:12:40.235 Trades  '34510052': accepted instant sell 0.1 EURUSD at 1.18459, close #711683677 buy 0.1 EURUSD 1.18465
2020.09.15 21:12:40.238 Trades  '34510052': deal #690865401 sell 0.1 EURUSD at 1.18459 done (based on order #711683687)
2020.09.15 21:12:40.239 Trades  '34510052': order #711683687 sell 0.1 / 0.1 EURUSD at 1.18459 done in 80.488 ms
2020.09.15 21:12:41.124 Experts expert Test6 (EURUSD,H1) removed

Девять секунд работал. Секундный OnTimer должен был сработать примерно столько же раз. Как и OrderSend.

В общем, что-то не так с профилировщиком.


ЗЫ На скрине только четыре строки. Где mqh-составляющая и PositionSelectByTicket?

 
A100:

Это математика - 1ый класс: 1 + + 1 = 2

Дело не в математике, а в синтаксисе.

1 + - + 1 = 0
Не в курсе, прокатит ли с operator-ами.
 
Профилирование на реальных данных этого советника вызывает зависание.
 
fxsaber:

Дело не в математике, а в синтаксисе.

Не в курсе, прокатит ли с operator-ами.
1 + - + 1 = 1+(-(+1)))=0 

С operator тоже самое: унарный плюс\минус имеет больший приоритет, чем сложение\вычитание, поэтому скобки не обязательны

Если подозреваете ошибку, то напишите в чем она заключается

 
A100:

С operator тоже самое: унарный плюс\минус имеет больший приоритет, чем сложение\вычитание, поэтому скобки не обязательны

Если подозреваете ошибку, то напишите в чем она заключается

Ошибок не вижу. Тут мое незнание только.

 
fxsaber:

В общем, что-то не так с профилировщиком.

Да, после обновления он показывает ахинею. Нужно подождать, пока допилят.