Guide MetaTrader
Appel d’indicateurs en fin de barre dans un EA

Certaines stratégies sont basées sur des valeurs d’indicateurs calculées uniquement une fois la barre en cours clôturée.
Ceci à l’avantage pour les backtests d’être plus fiable car l’historique des données pour les backtest n’es pas plus précis que 1 minute et donc les ticks générés entre l’ouverture et la fermeture de la barre M1 sont simulés. Par contre les valeurs d’ouverture et de fermeture de barre sont elles les valeurs historiques réelles.
La fonction start() d’un EA est appelée à chaque tick. Il faut donc ajouter une partie de code pour filtrer les ticks.
Filtrage des ticks
Comme il n’est pas possible de savoir quel sera le dernier tick d’une barre avant que celle-ci soit clôturée (on ne sait jamais si un nouveau tick viendra avant la fin cde barre ou si ce tick est le dernier) if faut tester le début de la barre suivante.
Pour cela il faut tout d’abord déclarer une variable globale qui conservera sa valeur entre les appels de la fonction start()
datetime barre = 0;
Puis il faut vérifier si on est à un début de barre en comparant le temps de début de la barre qui a été traité et le temps de début de la barre courante. Si ces 2 temps sont égaux alors on est toujours dans la même barre sinon on a changé de barre et c’est donc le début d’une nouvelle barre.
if (barre == Time[0]) // si ce n’est pas une nouvelle barre
{
return (0); // on attend le tick suivant
}
else // si c’est une nouvelle barre
{
barre = Time[0]; // on enregistre le temps de début de la barre
}
Dans le cas où le tick ne correspond pas à une nouvelle barre, tous le code situé après cette portion de code ne sera pas exécuté. Si par exemple un trailing stop doit être exécuté pour chaque tick mais l’ouverture d’un ordre doit être exécutée seulement en début de barre, le code ci dessua devra être placé entre ces deux portions de code.
Appel de l’indicateur
Si on veut la valeur d’un indicateur en fin de barre et que le code correspondant est exécuté seulement au premier tick de chaque barre il faut prendre la valeur de l’indicateur en fermeture de la barre suivante.
Par exemple pour une moyenne mobile de période 20, la fonction à appeler est :double mm = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1);
A lire dans le Guide MetaTrader
| MetaTrader : Leçon 9 à 16 |
|---|
|



