Testeur MT4 VS Testeur MT5

 
J'ai finalement réalisé une vieille idée

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Discussion sur "Les EA prêtes à l'emploi de l'assistant MQL5 fonctionnent sur MetaTrader 4".

fxsaber, 2017.03.09 13:02

Je vous suggère d'essayer Tick Data Suite (Compatible : MT4 build 940 - 1052) pour comparer.

Dans le testeur MT5, sélectionnez le mode "par ticks réels". Enregistrez-les et envoyez-les au testeur MT4 via TDS.

Les cotations des deux testeurs coïncideront alors à 100%, ce qui permettra de les comparer non seulement en termes de transactions, mais aussi de vitesse.

Il serait alors possible de comparer la conversion/création d'EA dans les deux sens.

MT4 build 1072, MT5 build 1596 serveur de trading Alpari-MT5.

Paramètres du testeur MT4 sur la capture d'écran

La devise des deux testeurs est le dollar américain. Cela permet dans le même testeur MT5 pour EURUSD de ne pas tirer un autre tick de symbole de conversion.


Maintenant, nous exécutons le conseiller expert multiplateforme suivant dans les deux testeurs.

// MQL4&5-code

#property strict

class FILE
{
private:
  const int handle;
  
  static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
    return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits));
  }
public:  
  FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI))
  {
  }
  
  ~FILE( void )
  {
    if (this.handle != INVALID_HANDLE)
      ::FileClose(handle);       
  }
  
  bool Write( const MqlTick &Tick ) const
  {
    return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n"));
  }
};

const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt");

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    File.Write(Tick);
}


Journal du testeur MT4

2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)


Journal du testeur MT5

2017.05.07 23:26:01.016 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).

Nous confirmons que les fichiers reçus de chaque testeur sont identiques - les tics des testeurs coïncident.


A ce stade, la préparation des deux testeurs pour le nouveau service est prête.

 

Conseiller expert

// MQL4&5-code

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

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}


Les résultats


Rapport MT4

Strategy Tester Report
Lucky
MetaQuotes-Demo (Build 1072)

SymboleEURUSD (Euro contre Dollar US)
Période1 Minute (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16)
ModèleTous les ticks (méthode la plus précise basée sur toutes les plus petites échéances disponibles)
ParamètresShift=3 ; Limit=18 ; Lots=0.1 ;
Les bars dans l'histoire7292Tiques modélisées1865515Qualité de la modélisation99.00%
Erreurs de concordance des graphiques0
Dépôt initial100000.00ÉcartementVariable
Bénéfice net-10863.90Bénéfice total2528.70Perte totale-13392.60
Rentabilité0.19Gain attendu-0.49
Dégradation absolue10864.70Abaissement maximal10864.70 (10.86%)Abattement relatif10.86% (10864.70)
Total des transactions21954Positions courtes (% de gain)12016 (68.60%)Positions longues (% de gain)9938 (67.03%)
Transactions rentables (% de toutes)14904 (67.89%)Transactions à perte (% de toutes)7050 (32.11%)
Le plus grandcommerce profitable3.00transaction perdante-4.40
Moyenneopération rentable0.17commerce perdant-1.90
Nombre maximalgains continus (profit)155 (46.60)Pertes continues (perte)115 (-210.10)
Max.bénéfices continus (nombre de victoires)46.60 (155)perte continue (nombre de pertes)-210.10 (115)
Moyennegains continus5perte continue2


Rapport MT5

Rapport du testeur de stratégie
Alpari-MT5 (Build 1596)
Paramètres
Conseiller expert :Lucky
Symbole :EURUSD
Période :M1 (2017.04.10 - 2017.04.16)
Paramètres :Décalage = 3
Limite=18
Lots=0.1
Courtier :Alpari International Limited
La monnaie :USD
Dépôt initial :100 000.00
Levier :1:100
Backtest
Qualité de l'histoire :s/o
Barres :7192Tiki :1865415Des personnages :1
Bénéfice net :-10 863.90Prélèvement absolu sur le bilan :10 863.90Prélèvement absolu sur les fonds :10 864.70
Bénéfice total :2 528.70Prélèvement maximal sur le solde :10 863.90 (10.86%)Retrait maximal des fonds :10 864.70 (10.86%)
Perte totale :-13 392.60Retrait relatif sur le bilan :10.86% (10 863.90)Prélèvement relatif sur les fonds :10.86% (10 864.70)
Rentabilité :0.19Le gain attendu :-0.49Niveau de marge :863.58%
Facteur de récupération :-1.00Ratio de Sharpe :-0.50Z-score :-52.22 (99.74%)
AHPR :1.0000 (-0.00%)Corrélation LR :-1.00Résultat du test :0
GHPR :1.0000 (-0.00%)LR Erreur standard :149.82
Total des échanges :21954Transactions courtes (% des gagnants) :12016 (68.60%)Transactions longues (% de gains) :9938 (67.03%)
Total des échanges :43908Transactions rentables (% de toutes les transactions) :14904 (67.89%)Transactions à perte (% de toutes les transactions)7050 (32.11%)
Le commerce le plus rentable3.00La plus grosse transaction perdante-4.40
Moyenne des transactions rentables :0.17Moyenne des transactions perdantes :-1.90
Nombre maximum de victoires consécutives (bénéfice) :155 (46.60)Nombre maximal de pertes continues (perte) :115 (-210.10)
Bénéfices continus maximums (nombre de victoires) :46.60 (155)Perte continue maximale (nombre de pertes) :-210.10 (115)
Gains moyens continus :5Pertes moyennes en continu :2


Les résultats sont à la hauteur !


Performance

MT4-log
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)


MT5-log

2017.05.08 02:04:53.278 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).


Le testeur MT4 a réussi à être 3 fois plus rapide que le testeur MT5. S'il y a un doute sur le fait que le blocage MT5 est dû à l'utilisation d'une bibliothèque tierce, ceux qui le souhaitent peuvent réécrire la logique MT4 simple de ce conseiller expert en MQL5 à leur manière et vérifier l'hypothèse.


HZ le testeur MT5 fonctionnait beaucoup plus lentement, jusqu'à ce que je nettoie tous les dossiers Bases à la main. Les résultats sont donnés dans cette optique.

 

Sur le serveur Alpari-MT5-Demo dans la nouvelle version (qui sera publiée dans une semaine) avec un accès rapide à l'historique des transactions, j'ai réussi :

EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.

MT5 a une surcharge système pour le transfert des données et de la tâche elle-même à un processus d'agent externe, ce qui, pour les petites tâches (secondes), introduit une erreur importante en comparaison.

Et la complexité et la qualité du testeur dans MT5 sont bien plus élevées : modélisation synchrone de nombreux instruments avec une précision de l'ordre de la milliseconde, glissements/retards réels pendant le défilement des changements de monde et un grand nombre de fonctions plus mineures. Ce n'est pas comme s'il y avait une boucle for.


Plus lent de plusieurs ordres de grandeur - n'êtes-vous pas confus avec l'initialisation/synchronisation et le téléchargement de toutes les données ? Tout est écrit dans les journaux. Les fichiers sur le disque ne doivent en aucun cas être touchés.

Je recommande de mettre le répertoire %userdata%\MetaQuotes (comme C:\Users\%username%\AppData\Roaming\MetaQuotes) dans le pass antivirus. C'est là que se trouvent les données et l'ajout de l'antivirus au passage améliore considérablement la vitesse d'accès aux données du terminal et du testeur.

Sinon, ils sont tellement excités lorsqu'ils voient metatester[64].exe s'exécuter, ouvrir un port réseau et beaucoup de gros fichiers de données, écrits par le terminal et le testeur. Le testeur de certains commerçants parvient même à tomber, car l'antivirus n'a pas le temps de vérifier le fichier metatester[64].exe, même en quelques secondes, et le terminal est incapable d'y accéder.

 
Renat Fatkhullin:

la complexité et la qualité du testeur dans MT5 sont d'un ordre de grandeur supérieur : modélisation synchrone de plusieurs instruments avec une précision de l'ordre de la milliseconde, glissements/retards honnêtes lors du défilement des changements de monde et un tas de fonctionnalités plus petites.

L'offre groupée MT4+TDS en dispose également. Plus quelques autres fonctionnalités qui manquent à MT5... Mais bien sûr, il n'y a pas de multidevise.

Plus lent de plusieurs ordres de grandeur.

Au début, je pensais que TDS ralentissait délibérément MT5, alors j'ai nettoyé sa mémoire. J'ai également nettoyé les dossiers Bases (je commençais à manquer d'espace disque). Après cela, MT5 a été deux ordres de grandeur plus rapide pour une seule exécution (les redémarrages n'ont pas aidé avant). L'hypothèse concernant les blocs TDS n'a pas pu être confirmée, mais j'ai essayé. Je n'ai pas eu d'anti-virus sur mon ordinateur.

Le serveur Alpari-MT5 est réel.


ZZY a fait tourner MT4-optimizer en exécution complète - 14 minutes. MT5 (il ne reste qu'un seul agent) - il semble que ce sera de nombreuses heures. Je publierai le total dans la matinée ou l'après-midi.

 

D'où viennent les feuillets ?

Vous avez quelque chose de complètement différent en tête. Jouez avec le champ Delay dans le testeur MT5 et vous verrez que c'est tout autre chose. Même le Sleep(2500) habituel dans le code MQL5, lorsqu'il est exécuté dans le testeur, donnera un retard dans le code lorsque le monde entier continue à simuler. Le champ du délai d'exécution montre effectivement comment les transactions seront exécutées si vous y placez votre ping de 100 ms vers le serveur.

Il ne peut pas y avoir un retard d'un ordre de grandeur. Et pourquoi y aurait-il des modules complémentaires pour MT5 alors qu'il fonctionne très bien tout seul.

À propos du dépassement - il n'y a pas de réglages ni de limites.
 

À propos de l'absence d'antivirus - depuis longtemps, toutes les versions depuis la 7 ont un Windows Defender interne et discret, qui fait un bon travail d'analyse de tous les fichiers.

Parfois, il génère des décalages notables dans les opérations de fichiers, même sur les disques SSD.

 

Overkill (100 000 USD au départ)


Glissements dans MT4 (les millisecondes dans l'historique des ticks fonctionnent comme il se doit) et autres goodies


 
Renat Fatkhullin:

À propos de l'absence d'antivirus - depuis longtemps, toutes les versions à partir de la 7 disposent d'un Windows Defender interne et discret, qui analyse tous les fichiers.

Handicapés. J'ai déjà toutes les données pour constater les forts ralentissements de MT5 sur l'optimisation. Je publierai les résultats de l'optimisation comparative lorsque MT5 sera terminé.
 
Je ne comprends pas l'idée des doublons.

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2017.05.07 21:55

Serveur de trading Alpari-MT5

Pourquoi y a-t-il des ticks en double (l'offre et la demande sont égales) dans l'historique des ticks du FOREX ?

Le testeur fait la course aux EA sur les doublons et il y en a la moitié. Est-il nécessaire d'obtenir la baisse de performance appropriée de moitié ?

 

Vous ne comprenez toujours pas les dérapages dont je parle. Par principe, cela ne fonctionne pas dans MT4.

Pas en ticks, mais dans le processus du programme mcl5, quand il s'arrête et que les ticks continuent et que le monde tourne. Écrivez Sleep(3000) et le programme attendra 3 secondes et pendant ce temps, les ticks feront tic-tac, le marché sera simulé.

Si vous définissez le champ Délai d'exécution à 200 ms dans le testeur, une latence nette de 200 lors de l'exécution des transactions sera simulée, ce qui donnera soit un slippage du marché, soit des requotes.

Il s'agit d'un tout autre niveau puissant de modélisation des processus de marché, et ce dans un système multidevises. Et surtout, dans un processus aliéné à distance. Par exemple, un agent situé à 10 000 km reçoit soudainement une demande dynamique d'accès à des symboles manquants dans le code lorsqu'il effectue une tâche. Il est capable de demander ces données au maître, de les intégrer dans le monde du marché et de continuer à les faire tourner.

 
Renat Fatkhullin:

Tu ne comprends toujours pas les dérapages dont je parle. Par principe, cela ne fonctionne pas dans MT4.

Pas en ticks, mais dans le processus du programme mcl5, quand il s'arrête et que les ticks continuent et que le monde tourne. Écrivez Sleep(3000) et le programme attendra 3 secondes et pendant ce temps, les ticks feront tic-tac, le marché sera simulé.

Cela ne fonctionne pas maintenant dans MT4.

Si vous définissez le champ Délai d'exécution à 200 ms dans le testeur, il simulera une latence nette de 200 lors de l'exécution des transactions, ce qui donnera lieu à un slippage du marché ou à des requotes.

Cela fonctionne maintenant dans MT4.

Il s'agit d'un tout autre niveau de modélisation des processus de marché, dans un système multidevises. Et surtout, dans un processus aliéné à distance. Par exemple, un agent situé à 10 000 km reçoit soudainement une demande dynamique d'accès à des symboles manquants dans le code lorsqu'il effectue une tâche. Il est capable de demander ces données au maître, de les intégrer dans le monde du marché et de continuer à les faire tourner.

Je n'ai pas l'intention de dénigrer le MT5. Je fais seulement une comparaison reproductible. Bien sûr, le testeur MT5 est inaccessible par certains paramètres, mais le testeur MT4 est maintenant capable de donner les choses, qui ne sont pas présentes dans MT5, mais qui sont vraiment demandées. Nous avons constaté qu'un test précis sur des ticks personnalisés réels sur MT4 est 100% vrai. Eh bien, et le règlement de toutes sortes de paramètres (commission, indentations, règles d'activation des ordres en cours, etc.) du testeur est là. En général, il y a des choses qui ne sont pas encore implémentées dans MT5.
Raison: