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()

Voir notre avis sur le test du broker AvaTrade qui propose la plateforme MT4

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);

Plus d'information sur le même thème

Photo of Arnaud Jeulin

Arnaud Jeulin Responsable de la publication, Trader

Après un diplôme d'ingénieur, Arnaud a commencé une carrière de développeur. Il a travaillé avec des traders et des services de back office pour mettre en place des prototypes et des outils de trading. Il a ensuite créé sa propre entreprise en 2003.

Il a été responsable du webmarketing pour la Banque en ligne Suisse Synthesis, depuis rachetée par Saxo Bank. Il a aussi fait des audits pour différents brokers et participé à plusieurs salons professionnels pour les courtiers à Londres, Paris et Chypre.

Depuis 21 ans Arnaud a approfondi sa connaissance des brokers et des marchés, il utilise son expérience pour améliorer Mataf afin d'éviter d'orienter les visiteurs vers des brokers malhonnêtes ou des stratégies de trading dangeureuses.

Vous pouvez le joindre via les réseaux sociaux suivants ou par email :

.
  Se connecter