Discussion de l'article "Les principes fondamentaux de tests dans MetaTrader 5"

 

Un nouvel article Les principes fondamentaux de tests dans MetaTrader 5 a été publié :

Quelles sont les différences entre les trois modes de test dans MetaTrader 5, et que faut-il particulièrement rechercher ? Comment se déroule le test d'un EA, tradant simultanément sur plusieurs instruments ? Quand et comment les valeurs des indicateurs sont-elles calculées lors des tests, et comment les événements sont-ils gérés ? Comment synchroniser les barres de différents instruments lors des tests en mode « prix d’ouverture uniquement » ? Cet article vise à apporter des réponses à ces questions et à bien d'autres.

S'il n'y a pas de positions ouvertes ou d'ordres en attente, nous n'avons pas besoin d'effectuer ces contrôles sur les traits cachés, et l'augmentation de la vitesse peut être assez substantielle. Ce mode « Prix d'ouverture uniquement » est bien adapté pour tester les stratégies, qui ne traitent les transactions qu'à l'ouverture de la barre et n'utilisent pas les ordres en attente, ainsi que les ordres StopLoss et TakeProfit. Pour la classe de telles stratégies, la précision nécessaire des tests est préservée.

Utilisons le Moving Average Expert Advisor du paquet standard comme exemple d'EA, qui peut être testé dans n'importe quel mode. La logique de cet EA est élaborée de telle manière que toutes les décisions sont prises à l'ouverture de la barre, et les transactions sont réalisées immédiatement, sans utilisation d'ordres en attente.

Exécutez un test de l'EA sur EURUSD H1 dans un intervalle de 2010.01.09 à 2010.31.12, et comparez les graphiques. La figure montre le graphique d'équilibre du rapport de test pour les trois modes.


Auteur : MetaQuotes

 
Il convient de rappeler que lors de l'optimisation par le critère "Custom max", un maximum local est toujours recherché. Pour trouver le minimum local, vous pouvez renvoyer à partir de функции OnTester la valeur inverse de la valeur calculée de la fonction :

return(1/значение_функции);



Il est préférable d'utiliser

return(-значение_функции);

sinon vous risquez de vous retrouver avec une division par zéro, et il y a moins de distorsion.

 
Urain:

Il est préférable d'utiliser

sinon vous risquez d'obtenir une division par zéro, et il y a moins de distorsion.

Nous sommes d'accord. Nous l'ajouterons à l'article, merci pour la suggestion !
 

Необходимо помнить, что при оптимизации по критерию "Custom max" всегда ищется локальный максимум. Для поиска локального минимума можно из функции OnTester ..........

Le mot "local" doit être remplacé par "global". C'est l'extremum global qui est recherché dans l'intervalle donné.

 
joo:

Le mot "local" devrait être remplacé par "global". C'est l'extremum global qui est recherché dans un intervalle donné.

C'est difficile à dire. D'une part, l'optimisation ne garantit pas que l'extremum global sera trouvé.
 
Rosh:
Il est difficile de répondre à cette question. D'une part, l'optimisation ne garantit pas qu'un extremum global sera trouvé.
Ce qui sera trouvé, l'extremum local ou l'extremum global, est une autre question. Mais c'est l'extremum global qui est recherché - c'est là tout l'intérêt de l'optimisation.
 
Rosh:
Je suis d'accord. Je l'ajouterai à l'article, merci pour la suggestion !
Ajouté
 
Pourriez-vous expliquer la différence entre la création d'un handle d'indicateur (par exemple Alligator) en utilisant iAlligator(...) et IndicatorCreate(...) ?
 
slyusar:
Veuillez expliquer la différence entre la création d'un handle d'un indicateur (par exemple Alligator) en utilisant iAlligator(...) et IndicatorCreate(...) ?
Les poignées ne seront pas différentes "au toucher". Mais ce n'est pas le sujet de l'article.
 
Rosh:
Les poignées ne diffèrent pas en fonction du "toucher". Mais ce n'est pas le sujet de cet article.

Je ne parlais pas de différences au toucher.....

Vous écrivez

"Qu'il y ait un appel d'indicateur dans un gestionnaire d'événement particulier ou non, tous les indicateurs dont les handles ont été créés par iCustom() ou IndicatorCreate() seront recalculés de force avant que la fonction du gestionnaire d'événement ne soit appelée."

Question :

Pourquoi les indicateurs dont les handles ont été créés en utilisant (si nous revenons à Alligator) iAlligator() ne seront pas recalculés, quelle est la différence avec IndicatorCreate() , qu'est-ce qui est mieux, qu'est-ce qui est moins bien, qu'est-ce qui doit être utilisé et pourquoi ?

 
Lire "Tous les indicateurs créés par des fonctions d'Indicateurs techniques ou IndicatorCreate()...".