Testeur de stratégie MetaTrader 5 : bugs, anomalies, suggestions d'amélioration - page 41

 
Slava:
Et quand la transaction commencera, elle chargera un autre symbole - EURUSD.

Non, ça ne se charge pas. Regardé dans le visualiseur, tout est correct - un symbole pendant le trading.

 
fxsaber:

Le symbole personnalisé a toutes les devises égales à la devise du compte. C'est-à-dire que le mode est presque similaire à "par pips", pas besoin de connecter d'autres symboles pour calculer la marge, etc.

Sur le serveur où il y a une commission (reproduit sur ForexTimeFXTM-Demo01, EUR, Hedge) dans le mode par ticks réels après le premier trade un autre symbole des standards est connecté. Et tout, bien sûr, compte beaucoup plus lentement qu'il ne devrait.


Tout fonctionne correctement sur MQ-Demo, où il n'y a pas de commission (et ce, à tort, car le test d'exactitude de la commission ne peut être effectué sur le serveur principal de la démo).


Ce problème est-il reproduit ?

À cause de ce bogue, si une commission est nécessaire, l'optimisation est fortement ralentie.

 

Est-il possible d'afficher le numéro de position sur ce curseur ?

Je clique sur le curseur et j'utilise les touches GAUCHE/DROITE du clavier pour modifier la vitesse. Parfois, l'avant-dernière vitesse est nécessaire. Vous ne pouvez pas voir visuellement où se trouve exactement le curseur en ce moment. Et il est très facile de sélectionner la dernière vitesse.

Une fois qu'elle est sélectionnée, la visionneuse se fige. Et vous pouvez jeter tous les résultats. Une aide numérique à la vitesse comme celle de l'écran serait appréciable.


ZS Il s'avère que si vous n'effectuez pas de transaction, la vitesse maximale dans le Visualiseur ne provoque pas de blocage. Il s'avère que le vol stationnaire presque mort est dû aux opérations commerciales.

 

Certaines personnes ne comprennent pas pourquoi le testeur MT5 présente des résultats de backtest différents de ceux des testeurs concurrents utilisés précédemment.

Vous en trouverez ci-dessous une reproduction.


Sur MQ-Demo, EUR, Hedge dans le testeur nous avons mis cette EA et activé la DLL (nous en avons besoin pour ouvrir automatiquement les rapports HTML dans un navigateur).

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#define  VIRTUAL_LIMITS_TP_SLIPPAGE // Лимитники и TP исполняются по первой цене акцепта - положительные проскальзывания
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#define  REPORT_TESTER             // В тестере будут автоматически записываться отчеты
//#define REPORT_TESTER_INPUTS      // В отчете одиночного прохода будут видны входные параметры советника - требует разрешения DLL.
#define  REPORT_BROWSER            // Создание отчета с запуском браузера - требует разрешения DLL.
#include <Report.mqh> // https://www.mql5.com/ru/code/18801

int OnInit()
{
  // Если стоп/фриз-уровень не нулевой - выходим.
  return(!MQLInfoInteger(MQL_TESTER) ||
         SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) ||
         SymbolInfoInteger(_Symbol, SYMBOL_TRADE_FREEZE_LEVEL));
}

void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Tick;
    
    if (SymbolInfoTick(_Symbol, Tick) && Tick.bid && Tick.ask/* && Tick.last*/)
    {
      // Сформировали комментарий для ордера: время и цена текущего тика.
      const string comment = TimeToString(Tick.time, TIME_SECONDS) + "." + IntegerToString(Tick.time_msc % 1000, 3, '0') + " " + 
                             DoubleToString(Tick.bid, _Digits) + "/" + DoubleToString(Tick.ask, _Digits);
                             
      OrderSend(_Symbol, OP_BUYLIMIT, 1, Tick.ask, 0, 0, 0, comment); // Выставляем BuyLimit по текущей цене

      FirstRun = false;
    }  
  }    
  else if (!OrdersTotal()) // Если нет открытых ордеров - выходим.
    TesterStop();
  
  if (OrderSelect(0, SELECT_BY_POS) && (OrderType() <= OP_SELL)) // Выставляем TP позиции по текущей цене
    OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderClosePrice(), 0);  
}


Dans l'onglet des paramètres du testeur de stratégie, appuyez sur CTRL+V pour ces lignes.

[Tester]
Symbol=EURUSD
Period=M1
Optimization=0
Model=4
FromDate=2019.12.13
ToDate=2019.12.14
ForwardMode=0
Deposit=100000
Currency=EUR
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=0
[TesterInputs]
VirtualTester=false
ReverseDeals=false
Report=true


Cours. Le navigateur fera apparaître un rapport.

Ensuite, définissezVirtualTester=true et exécutez-la à nouveau, en obtenant un autre rapport dans le navigateur.


La première fois, nous avons utilisé le testeur de stratégie MT5 intégré, la deuxième fois, nous avons utilisé un testeur tiers.


Comparons les rapports. Les voici en une seule image (en haut - le testeur MT5 standard, en bas - le testeur tiers).



On voit clairement que les résultats sont très différents. L'ouverture et la fermeture ne coïncident pas avec l'heure et le prix. En général, chacun peut décider par lui-même où se trouve l'erreur.


SZZ La solution de contournement a été trouvée.

 
fxsaber:

Vous pouvez clairement voir que les résultats sont très différents. Les heures d'ouverture et de fermeture et les prix ne correspondent pas. En somme, chacun peut décider par lui-même où se situe l'erreur.

Pourquoi MT5 n'a exécuté la limite qu'après 2,6 secondes ? Le prix est-il passé de l'autre côté immédiatement après l'avoir fixé ? Ou il n'y avait pas de tiques ?

 
Andrey Khatimlianskii:

Pourquoi MT5 n'a exécuté la limite qu'après 2,6 secondes ? Le prix est-il passé de l'autre côté immédiatement après l'avoir fixé ? Ou bien il n'y avait pas de tique ?

Le prochain tic-tac satisfaisant la limite était après ce temps. Bien entendu, dans le Testeur, il est possible de fixer une limite au prix actuel et de ne pas la faire exécuter. Par exemple, vous pouvez fixer une limite à un extremum.

 
fxsaber:

Le prochain tic satisfaisant le limiteur était après un tel temps. Bien entendu, dans le Testeur, il est possible de fixer une limite au prix actuel et de ne pas la faire exécuter. Par exemple, il est possible de fixer une limite à un extremum.

Précisez-vous de quoi il s'agit : forex, échange, rann ?

Il n'y a pas d'ordre limite sur le marché des changes et il ne peut y en avoir.

 
Sergey Chalyshev:

Précisez-vous de quoi il s'agit : forex, bourse, rann ?

Nous parlons du Testeur.

 
fxsaber:

Il s'agit du Testeur.

Le testeur fonctionne différemment dans les comptes de change et les comptes forex.
 
Sergey Chalyshev:
Le testeur fonctionne différemment sur les comptes d'actions et de forex.

Des instructions pour la lecture de n'importe quel personnage sont disponibles. Si vous avez des questions, n'hésitez pas à les poser.

Raison: