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

 
Alexey Viktorov:

Vous n'avez donc pas réussi à enregistrer un compte sur la bêta ?

Non.
 

Le MT4-Tester disposait d'un tel assistant pour les GA.


Il a permis de réduire considérablement le temps d'optimisation. Par exemple, si l'équilibre est au niveau du sol, pourquoi aller plus loin ? MT5 n'a pas cela. C'est pourquoi nous devons intégrer des éléments aussi raisonnables dans nos évaluations environnementales. Je ne pense pas que beaucoup d'auteurs fassent ça. Il serait donc probablement raisonnable de transférer cette fonctionnalité dans MT5-Tester également.


Les assistants de l'AG sont également pertinents. Voici la plus simple d'entre elles.

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

Expert Advisors : Valider

fxsaber, 2020.01.29 15:55

Je recommande d'utiliser une aide GA similaire dans mes EAs.

sinput int inMinTrades = 500; // Минимальное количество трейдов (позиций).
sinput int inMaxTrades = 90000; // Максимальное количество трейдов (позиций).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}

Il ne permet pas à GA de se ranger du côté des résultats statistiques faibles. Il augmente la qualité et la rapidité des résultats. Et pour Validate, il filtre également les passages dont les valeurs statistiques sont faibles.


Par exemple, lors d'un réajustement basé sur les calculs de trois mois, je fixe le nombre minimum de transactions > 100. Sinon, il y a une plus grande probabilité de rencontrer un passage dans l'AG qui donne le plus grand profit en raison du petit nombre de transactions réussies (aléatoires). Il est clair qu'un tel laissez-passer ne devrait avoir aucune incidence sur le choix de l'opération.

Je pense qu'il est raisonnable pour le testeur d'avoir de telles aides. D'autant plus qu'elle ne nécessite aucun coût de calcul.

 

Bonjour à tous.

J'ai un robot multi-marchés. Elle pratique l'arbitrage statistique, les spreads. Le robot est conçu de manière à ce qu'il prenne les instruments à partir de l'aperçu du marché lui-même ou à partir du fichier des spreads (qui se trouve dans le répertoire racine du programme, dans le dossier des fichiers). Le robot analyse les données, sélectionne les paires d'instruments les plus prometteuses et les négocie.

Si les instruments de trading ne sont pas listés dans les paramètres d'entrée du robot, comme c'est généralement le cas, mais que les instruments sont pris dans l'aperçu du marché ou dans le dossier Fichiers, le testeur est-il censé fonctionner ?

 
Peresvet Timonkin:

Bonjour à tous.

J'ai un robot multi-marchés. Elle pratique l'arbitrage statistique, les spreads. Le robot est conçu de manière à ce qu'il prenne les instruments à partir de l'aperçu du marché lui-même ou à partir du fichier des spreads (qui se trouve dans le répertoire racine du programme, dans le dossier des fichiers). Le robot analyse les données, sélectionne les paires d'instruments les plus prometteuses et les négocie.

Si les instruments de trading ne sont pas listés dans les paramètres d'entrée du robot, comme c'est généralement le cas, mais que les instruments sont pris dans l'aperçu du marché ou dans le dossier Fichiers, le testeur est-il censé fonctionner ?

L'aperçu du marché est généré par les appels du code aux symboles. Pour un testeur, il y a forcément une liste de devises dans toute variante. Et dans le monde réel, il n'y a pas de problème.

Ce qui figure sur la capture d'écran est destiné à l'optimisation.
 
Alexey Viktorov:

L'examen du marché est formé par les appels de symboles du code. Pour un testeur, il doit y avoir une liste de devises dans toutes les variantes. Et dans le monde réel, il n'y a pas de problème.

Ce qui figure sur la capture d'écran est destiné à l'optimisation.

Ai-je bien compris que vous ne pouvez pas faire de tests avec ce type de configuration comme je le fais ?

le testeur ne peut pas prendre les données de la revue du marché dans l'historique ?

Et quant au fichier dans lequel sont prescrits les outils de trading, le testeur ne peut pas non plus travailler avec ?

je viens de lire le manuel, mais je n'ai rien trouvé à ce sujet, il est dit que je peux tester et optimiser des stratégies multiples, mais je n'y connais pas grand chose.

 
Peresvet Timonkin:

Ai-je bien compris que vous ne pouvez pas faire de tests avec ce type de configuration comme je le fais ?

le testeur ne peut pas prendre les données de la revue du marché dans l'historique ?

Et quant au fichier dans lequel sont prescrits les outils de trading, le testeur ne peut pas non plus travailler avec ?

je viens de lire tout le manuel du testeur, je n'ai pas trouvé un mot à ce sujet, il est dit que je peux tester et optimiser les stratégies multirate, mais je n'y connais pas grand chose.

Si tu fais des efforts, tu peux tout faire. Par exemple, dans OnInit(), demander les ticks des devises requises et les ajouter ainsi à l'aperçu du marché, puis travailler avec l'aperçu du marché. Mais dans ce cas, quelle que soit la façon dont vous le regardez, il devrait y avoir une liste de devises. Deux options s'offrent à nous : travailler avec la liste et travailler avec ceux qui figurent dans le rapport sur le marché. Par conséquent, nous devons établir une condition dans OnInit() si le travail dans le testeur, puis travailler uniquement avec la liste. Il existe un tel conseiller expert sur le marché.

Quant au fichier : c'est bien sûr possible, mais il faut tenir compte de l'emplacement du fichier. Il doit être situé dans le dossier du testeur ou dans le dossier partagé par tous les terminaux. Ou l'insérer comme ressource.
 

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

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

fxsaber, 2020.01.22 23:08

Ma construction 2300. En mode points, j'ai appris à tenir compte du volume.


Cependant, le bénéfice des transactions InOut dans ce mode est calculé de manière incorrecte.


Si nous fonctionnons en mode normal, le bénéfice est correct.



Par conséquent, le mode pips ne fonctionne pas maintenant sur Netting (il montre un profit surévalué).


2310 est pertinent. Il est impossible d'utiliser le mode pips sur Netting.

 

En 2310 j'ai remarqué que mon EA, qui fait des modifications fréquentes, ne peut pas être profilé.

J'ai esquissé un test.

input int inFakeRange = 0;
sinput int inOffset = 10000;

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}

Il reproduit l'impossibilité d'effectuer un profilage immédiat en mode tic-tac réel, car tout est très lent.


Cependant, il provoque également le HOLD du terminal lorsqu'il fonctionne sur des ticks réels (même en mode pips) : un seul passage ! Juste une sorte de tueur.


Si vous faites son Optimisation (sur le premier paramètre), cela se passe sans problème, mais cela fait naître quelques mauvaises pensées sur les performances...


HH Si vous l'exécutez dans le Visualiseur et que vous le fermez avant qu'il ne soit terminé, le Terminal se bloque.

 
fxsaber:

Si vous l'optimisez (pour le premier paramètre), tout va bien, mais vous avez de mauvaises idées sur les performances...

Je ne peux que le comparer avec la variante virtuelle.

input int inFakeRange = 0;
sinput int inOffset = 10000;

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

#define  VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}


Variante normale.

optimization finished, total passes 5
optimization done in 1 minutes 04 seconds
shortest pass 0:00:12.560, longest pass 0:00:13.608, average pass 0:00:12.808
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Avec Virtual.

optimization finished, total passes 5
optimization done in 0 minutes 06 seconds
shortest pass 0:00:00.954, longest pass 0:00:02.060, average pass 0:00:01.231
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Le testeur est 13 fois plus lent sur l'EA élémentaire en mode Pips où il n'y a même pas de contrôles ! Construire 2310.

 
fxsaber:

Le testeur est 13 fois plus lent sur un EA élémentaire en mode pips, où il n'y a même pas de contrôles ! Construire 2310.

Même cet EA est plus de deux fois plus lent que Virtual en mode Pips.

input int inFakeRange = 0;
sinput int inOffset = 10000;

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
}

Pourquoi cela se produit-il ? L'ensemble du conseiller expert fixe la limite d'achat sur le premier tick. Il n'y a rien d'autre !

Raison: