Backtesting/Optimisation - page 82

 

Bon article sur le backtesting, le cours acheteur et le cours vendeur :

https://www.mql5.com/en/forum/181204

 

Strategytester : Limite LotSize MT4

Bonjour,

Comment puis-je modifier les paramètres de la taille maximale des lots dans le Strategy Tester MT4 ? Actuellement, le testeur de stratégie n'ouvre pas les positions > 50 lots.

Et y a-t-il une limite d'équilibre dans le testeur de stratégie ?

J'apprécierais une aide. Merci !

 
lsteixeira:
Certaines données décentes que j'ai utilisées venaient d'ici :

Http://www.histdata.com

Cheers !!

Merci pour les conseils... J'utilise les données de Ducas avec une qualité de modélisation de 99% pour le moment. Je ne peux pas dire à quel point cela se rapproche de la réalité, mais j'espère que c'est assez proche ^^.

 

[langtitle=fr]Probl�me sur un backtest[/langtitle]

[lang=fr]Bonjour tout le monde,

Je me tourne vers vous car j'ai un problème lors du backtest de mon EA.

Comme vous pourrez voir sur le graphique, il y a une chute brutale et je ne sais pas d ou ca vient j ai un stop loss regler sur 10 pips

Dossiers :
graphique.jpg  117 kb
rapport.jpg  97 kb
 

Fin normale de l'arrêt du testeur

targetik:
[Bonjour tout le monde,

Je me tourne vers vous car j'ai un problème lors du backtest de mon EA.

Comme vous pourrez voir sur le graphique, il y a une chute brutale et je ne sais pas d ou ca vient j ai un stop loss regler sur 10 pips

Bonjour Targetik,

C'est un Stop-Out normal de "Fin de test de stratégie"...

Le testeur ferme toutes les positions ouvertes à la fin du test... et toutes vos positions ouvertes actives se terminent généralement par une perte.

J'ignore simplement la dernière transaction... ou je redéfinis les dates pour dépasser cette transaction afin qu'elle puisse se fermer correctement... ou je fixe la date de la dernière transaction fermée afin de ne pas avoir de transactions ouvertes à la fin du test.

J'espère que cela vous aidera,

Robert

 

[lang=fr]Merci beaucoup [/lang]

 

Superbe fil de discussion !

--

 

Récupérer l'équité la plus élevée des optimisations ?

Est-il possible de récupérer des informations sur l'équité la plus élevée atteinte par chaque exécution d'un ensemble donné de résultats d'optimisation dans MT4 ?

Pour autant que je sache, MT4 ne fournit pas d'informations dans la fenêtre de résultats sur l'équité la plus élevée atteinte par une stratégie pendant le back testing - que ce soit dans les résultats d'optimisation ou dans le rapport d'une seule exécution manuelle. (Ce qui s'en rapproche le plus est le drawdown $, qui, je pense, nécessite de connaître la valeur du creux pertinent pour déterminer quel était le pic précédent - et vous ne pouvez que le deviner à partir du solde final). On peut supposer que le testeur de stratégie aurait connu le chiffre exact de l'équité la plus élevée à un moment donné pendant ses calculs. Existe-t-il un moyen de récupérer ces données pour les résultats d'optimisation ?

Je peux penser à une solution partielle. L'équité la plus élevée atteinte au cours d'un seul back test manuel pourrait être visualisée en ajoutant une variable dans l'EA qui enregistre la "marque d'eau la plus élevée" atteinte en termes d'équité, puis en l'imprimant dans le journal à la fin de l'exécution (ou à tout moment). Le problème est que les informations du journal ne semblent pas être disponibles lorsque la même stratégie est exécutée dans le cadre d'une optimisation... Cela conviendrait pour un petit nombre d'exécutions manuelles, mais pas pour un grand nombre d'optimisations.

La seule autre solution à laquelle je pense est d'utiliser un indicateur qui agit comme un EA, et de le charger sur le graphique normal du terminal. En entrant une "heure de début" comme variable externe, il pourrait tenir un compte des profits et des pertes (tant que les positions ne sont pas ouvertes à l'intérieur des chandeliers). Le problème reste cependant le même. Vous devrez toujours saisir manuellement les différentes variables externes pour chaque exécution des possibilités d'optimisation - qui peuvent être nombreuses !

Vous pourriez également placer un plafond artificiel sur les capitaux propres d'un EA, puis fermer toutes les positions et mettre fin à la négociation dans l'EA lorsqu'un capital prédéterminé a été atteint. Vous pourriez alors voir une liste du nombre d'exécutions qui se sont terminées sur cette valeur dans les résultats des optimisations. Cependant, vous ne pourriez pas savoir si une exécution donnée aurait atteint un niveau d'équité plus élevé, à moins que vous n'exécutiez un grand nombre d'exécutions avec des plafonds d'équité différents. Cela semble être une solution très maladroite et inefficace.

(Même la possibilité de voir un simple graphique du solde par rapport au nombre de transactions serait un début - mais cela ne semble pas être disponible dans les optimisations non plus).

Quelqu'un connaît-il une meilleure méthode qui serait plus efficace pour les optimisations ?

 

Je pense que je viens de trouver la réponse à ma propre question, je vais donc la poster ici au cas où quelqu'un voudrait encore connaître la réponse.

Une solution consiste à utiliser des variables globales(Variables globales - Documentation MQL4). Il s'avère que les variables globales sont définies ou mises à jour lors de chaque exécution d'une optimisation. Je fais ici référence aux variables globales du terminal du client, et pas seulement aux "variables globales" d'un EA. Puisque la variable est globale, vous pouvez alors l'interroger en utilisant quelque chose d'extérieur au Strategy Tester. Vous pourriez simplement ajouter une variable normale (double) à l'intérieur de l'EA qui se met à jour avec la plus haute équité à chaque tick, puis définir une variable globale à cette valeur dans la section deinit() de ce même EA. Cette variable globale pourrait ensuite être interrogée à l'aide de GlobalVariableGet() dans un script sur une fenêtre graphique normale dans le terminal une fois que chaque passage de l'optimisation est terminé, et la valeur résultante pourrait être affichée comme un commentaire ou enregistrée dans le journal du terminal en utilisant Print.

Le seul problème de cette approche est que vous devriez exécuter manuellement le script après chaque passage de l'optimisation (avant que le passage suivant ne soit terminé) - vous devriez donc rester assis et observer les optimisations. Je ne pense pas qu'un EA puisse être utilisé pour interroger la variable globale, car l'EA devrait être exécuté plusieurs fois pour capturer plusieurs exécutions de l'optimisation. Il est très probable que vous ne receviez pas de ticks pendant une optimisation, car vous seriez déconnecté des données en direct afin de préserver vos paramètres de spread. Je suppose que les diverses méthodes d'envoi de "faux ticks" à l'EA ne fonctionneraient pas à partir d'une exécution d'optimisation vers le graphique normal du terminal...

C'est moins un problème si vous utilisez un compte avec une taille de spread stable, auquel cas vous pourriez exécuter des optimisations tout en étant connecté aux données en direct entrantes, sans trop de risque de modifier les données du spread. Le problème persiste si vous souhaitez optimiser pendant le week-end. De plus, si votre passe d'optimisation suivante se termine avant la réception d'un nouveau tick, les données de la dernière passe ne sont pas enregistrées.

Vous pourriez contourner ce problème en définissant une variable globale SÉPARÉE pour chaque passage de l'optimisation, puis en les lisant toutes à la fin en appuyant sur F3. Cela pourrait être fait avec une opération de cycle dans le deinit() pour récupérer le nombre actuel de variables globales ("n"), puis nommer la variable globale actuelle "n+1", et lui donner la valeur d'équité appropriée. De cette façon, vous pourriez toutes les afficher à la fin en appuyant sur F3, et le nom de la variable serait le même que le numéro de la passe de l'exécution (à condition qu'il n'y ait pas de variables globales existantes au début de l'optimisation - ce qui peut facilement être obtenu en exécutant un script avec GlobalVariablesDeleteAll() avant chaque optimisation). Je ne sais pas quel est le nombre maximum de variables globales, mais tant que vous avez un nombre raisonnable d'optimisations, cela devrait aller. Malheureusement, je ne pense pas que les données obtenues en appuyant sur F3 soient exportables, vous devrez donc les copier en utilisant une capture d'écran ou un bon vieux stylo et du papier (ou simplement avoir une installation MT4 séparée pour chaque optimisation si vous utilisez un nombre stupéfiant de passes). Je suppose que vous pourriez aussi écrire un script pour imprimer tous les noms et valeurs des variables globales dans le journal du terminal une fois l'optimisation terminée, puis exporter CE journal.

Cette méthode pourrait bien sûr être utilisée pour récupérer à peu près toutes les données des optimisations, au lieu de devoir compter sur les informations limitées de la fenêtre de résultats d'optimisation de Strategy Tester ! J'espère que cela aidera quelqu'un :-)

 

p.s. - Je viens de réaliser que Print et Alert ne permettent que 64 caractères, donc vous ne pourriez pas écrire un script pour imprimer les variables globales si vous utilisiez plus qu'une poignée d'optimisations. (A moins que vous n'imprimiez chaque variable globale dans une ligne séparée du journal du terminal, puis que vous cliquiez et copiiez toutes les variables une par une dans Excel ou autre. Il ne semble pas y avoir de moyen de sélectionner plus d'une entrée dans le journal à un moment donné).

Pour contourner ce problème, vous pourriez plutôt utiliser une opération cyclique pour écrire les valeurs de chacune des variables globales dans l'ordre sur une chaîne massive (en utilisant \n pour placer chaque valeur de variable globale sur une nouvelle ligne), puis vous envoyer cette chaîne par courrier électronique en utilisant SendMail(). Il ne semble pas y avoir de limite au nombre de caractères dans Send Mail. Vous pouvez facilement copier ces données d'e-mail dans un document texte sur votre ordinateur, et utiliser le bouton Data\Import External Data\Import Data dans Excel pour importer ces données dans le format de votre choix. Si vous copiez également les résultats de l'optimisation dans un document texte, puis les importez dans Excel en utilisant la même méthode (en sélectionnant "Délimité" dans le premier écran, puis en cochant la case "Autre" et en tapant "=" dans ce champ de saisie afin de séparer le texte des chiffres), vous pouvez alors simplement aligner les données de votre e-mail sur les données exportées directement depuis l'optimisation. Ainsi, les informations que vous avez extraites de l'optimisation à l'aide des variables globales se trouvent sur la même ligne que les données pertinentes exportées de l'optimisation pour un passage donné. C'est simple.