Aller au contenu
Accueil/Articles/MQL5 et automatisation
MQL5 et automatisation

SmartVision EA : un robot de tendance sur deux unités de temps, du signal au code

Un stochastique pour le moment d'entrer, deux unités de temps pour le sens, des pivots pour le stop et l'objectif. Comment SmartVision EA décide, ce que son code fait bien, et ce qu'il faut savoir avant de le tester.

SmartVision EA est un robot de suivi de tendance dont le code source est partagé gratuitement. Il est intéressant pour deux raisons. Il montre comment faire décider un robot sur plusieurs unités de temps à la fois, et il contient une série de vérifications avant chaque ordre (volume, marge, distance des stops) qu'on retrouve rarement dans les robots gratuits.

Cet article suit le chemin d'une décision, du signal à l'ordre, avec les extraits de code correspondants. Il signale aussi les limites à connaître avant de le lancer, même en démo.

La décision en trois étages

SmartVision ne prend une position que si trois conditions sont réunies :

  1. Un signal sur l'unité de temps du graphique : le stochastique sort d'une zone extrême alors que le prix touche une moyenne mobile.
  2. Un sens validé sur deux unités de temps plus larges, H4 et H1 par défaut : le robot n'achète que si le consensus est haussier, et ne vend que s'il est baissier.
  3. Des niveaux valides : le stop et l'objectif, tirés des pivots, doivent respecter les distances minimales du courtier.

Si l'un des trois manque, le robot ne fait rien et l'écrit dans le journal de MetaTrader.

Étage 1 : le signal, stochastique et moyenne 100

MQL5
// achat : le stochastique repasse au-dessus de 20 et le plus bas touche la moyenne
if(stochDATA[0] > get_DN_L() && stochDATA[1] < get_DN_L()
      && getLow(0) < maDATA[0] && signalTimeBuy != currBarTime0) {

Le stochastique est réglé en 8, 3, 3 (lissage simple, calcul sur les plus hauts et plus bas), avec des niveaux à 20 et 80. La moyenne mobile est une simple sur 100 périodes. Un achat est signalé quand le stochastique repasse au-dessus de 20 et que le plus bas de la bougie passe sous la moyenne 100 : on achète un repli sur la moyenne, au moment où l'élan baissier s'essouffle. La vente est le symétrique, autour de 80.

La variable statique signalTimeBuy empêche de signaler deux fois sur la même bougie.

Étage 2 : le sens, sur deux unités de temps

C'est la partie la plus intéressante du code. Pour chaque unité de temps (H4 et H1 par défaut), le robot combine deux lectures.

La première lit les moyennes et le RSI. Sur les trois dernières bougies (ConfirmBars), il compte celles où le prix est au-dessus de la moyenne exponentielle 200, la 50 au-dessus de la 200 et le RSI au-dessus de 55 (et l'inverse pour la baisse, avec un RSI sous 45). Si la majorité des bougies vont dans le même sens, la tendance est retenue.

MQL5
if(closep[b]>ma_slow[b] && ma_fast[b]>ma_slow[b] && rsi[b]>RSI_threshold_up) up++;

La seconde lit la structure. Elle compare le plus haut et le plus bas des cinq dernières bougies (SwingWindow) à ceux des cinq précédentes. Plus haut plus élevé et plus bas plus élevé : haussier. L'inverse : baissier.

MQL5
if(high1 > high2 && low1 > low2) return  1;   // sommets et creux montants
if(high1 < high2 && low1 < low2) return -1;   // sommets et creux descendants

Quand les deux lectures sont d'accord, la tendance est dite forte ; quand une seule tranche, elle est faible.

Le consensus final, dans la fonction tendance(), suit des règles simples :

  • les deux unités de temps vont dans le même sens : on suit ce sens ;
  • elles s'opposent : la plus forte des deux l'emporte, si l'autre est faible ;
  • une seule a une tendance, l'autre est neutre : on suit celle qui en a une ;
  • sinon : pas de trade.

Ce découpage a un mérite : chaque règle est lisible, et le panneau affiché sur le graphique montre en direct la tendance H4, la tendance H1 et le consensus. Vous voyez pourquoi le robot accepte ou refuse un signal.

Étage 3 : le stop et l'objectif viennent des pivots

MQL5
PivotPoint  = (h + l + c) / 3.0;
Resistance2 = PivotPoint + (h - l);
Support2    = PivotPoint - (h - l);

Les pivots classiques sont calculés sur la dernière bougie H4 clôturée. Pour un achat, le stop est placé sur le deuxième support (S2) et l'objectif sur la deuxième résistance (R2). Pour une vente, c'est l'inverse.

Conséquence importante : la distance du stop et le rapport gain sur risque changent à chaque trade. Ils dépendent de l'amplitude de la dernière bougie H4 et de l'endroit où se trouve le prix par rapport au pivot. Un achat pris près de S2 aura un stop très court et un objectif lointain ; un achat pris près de R2 aura l'inverse. Si le prix est déjà sous S2, le stop serait au-dessus du prix : la vérification des niveaux refuse alors l'ordre.

Les vérifications avant chaque ordre

Avant d'envoyer un ordre, le robot vérifie quatre choses :

  1. Le volume est ramené entre le minimum et le maximum du symbole, et arrondi au pas autorisé.
  2. La marge disponible suffit (OrderCalcMargin).
  3. Le volume total ouvert sur le symbole ne dépasse pas la limite du courtier.
  4. Le stop et l'objectif respectent la distance minimale (stop level) et la zone de gel (freeze level) du courtier.
MQL5
if(sl > 0 && bid - sl < stopPts - buf) return false;   // stop trop proche

Le robot ne garde aussi qu'une position par sens, filtrée par symbole et par numéro magique. Il ne touche donc pas à vos autres positions. C'est exactement ce qu'il faut faire, et c'est une bonne base pour vos propres robots.

Le break-even progressif

Désactivé par défaut (FonctionBE = false), il remonte le stop en quatre paliers, en pourcentage de la distance jusqu'à l'objectif :

Le prix a parcouruLe stop passe à
30 % de l'objectifprix d'entrée
50 %entrée + 10 % de l'objectif
70 %entrée + 30 %
90 %entrée + 60 %

Le stop ne recule jamais. Ce système protège les trades qui ont bien avancé ; il coupe aussi certains trades qui auraient atteint l'objectif après un repli. Testez les deux réglages.

Ce qu'il faut savoir avant de le tester

Le lot est fixe. Initial_lot vaut 0,01 et ne dépend ni du capital ni de la distance du stop. Avec des stops qui changent à chaque trade, le risque en argent change aussi à chaque trade. Pour un risque constant, calculez le lot à partir de la distance du stop : c'est l'objet de notre article sur la taille de position.

Le test doit se faire tick par tick. Comme le signal est lu sur la bougie en cours, un test « prix d'ouverture uniquement » ne reproduit pas le comportement réel. Prenez le mode Chaque tick basé sur les ticks réels, sur une période qui contient des tendances et des ranges.

Pas de filtre d'actualités ni de perte journalière maximale. Le robot peut entrer juste avant une annonce importante. Si vous le faites tourner sur un compte réel, coupez-le pendant les annonces majeures, ou ajoutez ces filtres au code.

Le premier signal arrive vite. Le robot peut prendre un trade dès la première bougie après son démarrage, si les trois étages sont validés. Ce n'est pas un défaut, mais ne le lancez pas « pour voir » sur un compte réel.

Pour aller plus loin dans le code

Trois améliorations simples, si vous voulez vous faire la main :

  • lire le stochastique sur les bougies clôturées (indices 1 et 2) pour un signal qui ne bouge plus ;
  • calculer le lot à partir d'un pourcentage du capital et de la distance jusqu'à S2 ou R2 ;
  • ajouter une limite de perte journalière qui suspend le robot jusqu'au lendemain.

Ce qu'il faut retenir

SmartVision EA n'est pas une machine à gains : c'est un robot de tendance construit proprement, dont chaque décision se lit dans le code et sur le panneau. Sa logique sur deux unités de temps, ses vérifications avant ordre et son filtrage par numéro magique en font une excellente base d'étude. Ses limites, le lot fixe et le signal sur la bougie en cours, se corrigent en quelques lignes. Testez-le tick par tick, sur des périodes variées, avant toute autre décision.

Une question, un désaccord, un retour d'expérience ?

Le forum est le bon endroit pour en parler avec les autres traders.

En discuter sur le forum
L'outil dont parle l'article