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

 
2314. La commission en pourcentages par mode de transaction n'est pas calculée correctement. + ne peut être réglé au-delà de la deuxième décimale via l'interface graphique (cela peut être fait via un fichier).
 

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

Expert Advisors : Valider

fxsaber, 2020.02.06 17:20

SZZY Malheureusement, MT5-Tester lui-même ne permet pas de prescrire des critères d'optimisation personnalisés (pas de sélection) en dehors du code source de l'EA. Bien qu'il n'y ait aucun obstacle architectural à cela.

Vous pouvez maintenant sélectionner n'importe quel laissez-passer parmi les résultats de l'optimisation en fonction de votre critère de choix.

Mais il est impossible de définir votre propre critère d'optimisation s'il n'y a qu'un EX5. De mon point de vue, un tel critère d'optimisation pourrait être défini comme un EA où seules les données OnTester et TesterStatistics sont disponibles. Il est fort probable qu'il n'y ait rien de tel dans les plans des développeurs. Par conséquent, il ne s'agit que d'un sondage.

 

Désolé pour la traduction automatique de l'anglais en russe, mais je n'ai trouvé ce fil de discussion que pour signaler des bugs.

Il semble y avoir un problème avec la plateforme Metatrader 5 lorsque je lance un test visuel de débogage dans l'éditeur et que j'atteins un point d'arrêt et appuie sur Ctrl + F.

Indicateurs (tous, même activés) redessiner / décaler 1 barre en appuyant sur ctrl + f lors du débogage des données historiques)

Lecture :

  1. Ouvrez Metatrader 5.
  2. Ajouter EMA 5 et EMA 10 (intégré)
  3. Réglez Strategytester sur Daily, Simulation : ticks ou Real ticks (les deux causent le même problème).
  4. Ouvrez l'éditeur Metatrader 5
  5. Ouvrez le fichier ExpertMACD.mqh inclus.
  6. Définir un point d'arrêt sur la ligne 651 dans Expert.mqh
  7. Démarrer avec CTRL + F5 pour exécuter sur les données historiques
  8. Placez le curseur sur un chandelier complètement fermé (au moins 1 à 2 jours en arrière).
  9. Lorsque le point d'arrêt est atteint, activez le testeur visuel et appuyez sur Ctrl + F.
  10. Tous les indicateurs se déplacent d'une barre vers la gauche lorsque vous appuyez sur CTRL + F dans la fenêtre du testeur visuel et que vous obtenez une croix.
  11. Continuez à partir du point de rupture et tous les indicateurs se déplaceront d'une barre vers la droite.
  12. Les étapes 8 à 11 peuvent être répétées et ont toujours le même effet.

Le problème est qu'en vérifiant si l'EA fait réellement ce qu'il est censé faire, ce n'est pas possible lorsque les barres sont décalées par rapport à ce que l'EA voit.

Ce n'est pas un problème avec les indicateurs, car c'est même le cas avec les exemples d'EA intégrés ainsi qu'avec les indicateurs intégrés.


Cette vidéo YouTube démontre le problème à environ 0:25, appuyez sur Ctrl + F.

https://youtu.be/_fyCv3Zla9A

 
fxsaber:

Vous pouvez maintenant sélectionner n'importe quel laissez-passer parmi les résultats de l'optimisation en fonction de votre critère de sélection du meilleur laissez-passer.

Mais il est impossible de définir votre propre critère d'optimisation s'il n'y a qu'un EX5. De mon point de vue, un tel critère d'optimisation pourrait être défini comme un EA, où seules les données des fonctions OnTester et TesterStatistics sont disponibles. Il est fort probable qu'il n'y ait rien de tel dans les plans des développeurs. C'est pourquoi seul le sondage est disponible.

Si vous avez un mauvais modèle de stratégie de trading, aucune optimisation n'est utile.

La modélisation mathématique ou l'apprentissage automatique ne peuvent donc pas résoudre ce problème. Vous devez savoir clairement ce que contient la boîte noire.

 
Petros Shatakhtsyan:

Vous ne vous en rendez compte que maintenant ?

Je ne comprends pas le motif de ces questions illogiques.

Si votre modèle de stratégie commerciale est mauvais, l'optimisation n'y changera rien.

Bien sûr, si quelqu'un est mauvais, il n'est pas bon. C'est exactement ce à quoi ressemble la phrase ci-dessus.

C'est-à-dire que la modélisation mathématique ou l'apprentissage automatique ne sont pas à la hauteur de la tâche. Vous devez savoir clairement ce qui se trouve dans la boîte noire.

Cette phrase parle d'une tâche quelconque. Et ce quelque chose doit être connu dans un certain but. En général, il est préférable que les réponses ne ressemblent pas à un morceau de conversation déchiré avec vous-même.

 
fxsaber:

Il n'y a pas de graal.

Il y en a.

 
Алексей Тарабанов:

Vérifiez.

L'affirmation de la graalité (avant la correction du mode Tester) a été confirmée par le code.

 

Dans certaines des dernières versions, l'importation du fichier tst est incomplète - l'onglet Paramètres n'est pas mis à jour avec celui de tst.

Auparavant, vous importez et dans les paramètres, vous pouvez immédiatement voir à quelles valeurs le résultat a été obtenu. Je ne peux pas le voir maintenant. Est-il possible de revenir en arrière ?

 
J'ai longtemps cherché la raison du comportement étrange du testeur en ticks réels. Je l'ai trouvé.
const bool Init = EventSetTimer(1);

void Func()
{
  static datetime PrevTime = 0;
  
  const datetime time = TimeTradeServer();
  
  if (time < PrevTime)
    DebugBreak(); // Срабатывает
  
  PrevTime = time;
}

void OnTick()
{
  Func();
}

void OnTimer()
{
  Func();
}

Le temps du serveur avance puis revient. Cela se produit sur un serveur de commerce réel, mais j'ai réussi à créer un replay sur un symbole personnalisé.


Allons-y.

sinput datetime inDateFrom = D'2020.01.01';

void OnStart()
{
  const string Name = "TEMP12345";                                                           // Имя кастомного символа
  const string SymbOrig = "EURUSD";                                                          // Имя оригинального символа

  MqlTick Ticks[];
  
  const int Size = CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)inDateFrom * 1000); // Считали EURUSD-тики.
    
  if ((Size > 0) && CustomSymbolCreate(Name, NULL, SymbOrig) && SymbolSelect(Name, true))    // Создали символ на основе EURUSD.
  {
    CustomTicksReplace(Name, 0, LONG_MAX, Ticks);                                            // Поместили в него историю EURUSD.        
    
    CustomRatesDelete(Name, D'2020.01.03 23:00', D'2020.01.04 00:00');                       // Удалили несколько баров.
  }
}


Un symbole avec un historique de ticks sera créé, mais avec plusieurs barres supprimées. Ensuite, nous commençons à déboguer l'EA ci-dessus dans ce mode.

[Tester]
Symbol=TEMP12345
Period=M1
Optimization=0
Model=4
FromDate=2020.01.01
ToDate=2020.01.08
ForwardMode=0
Deposit=100000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6


Il s'arrête.

Vous pouvez voir que le temps s'est écoulé dans une deuxième boucle.

 
fxsaber:

Dans certaines des dernières versions, l'importation du fichier tst est incomplète - l'onglet Paramètres n'est pas mis à jour avec celui de tst.

Auparavant, vous importez et dans les paramètres, vous pouvez immédiatement voir à quelles valeurs le résultat a été obtenu. Je ne peux pas le voir maintenant. Est-il possible de revenir en arrière ?

Oui, nous le pouvons.
Raison: