English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Idées de trading basées sur la direction des prix et la vitesse de déplacement

Idées de trading basées sur la direction des prix et la vitesse de déplacement

MetaTrader 4Exemples | 13 janvier 2022, 16:31
583 0
Alexander Fedosov
Alexander Fedosov

Introduction

On sait depuis longtemps que lorsqu'un prix évolue, tous les marchés liquides révèlent une sorte de nature cyclique des vagues qui montent puis descendent. Ceci est clairement visible sur les graphiques avec des délais plus élevés. La nature sinusoïdale reflète le fait que le prix a une certaine persistance. Sinon, cela ressemblerait à un zigzag : mouvements brusques vers le haut et vers le bas sur de courtes périodes de temps. Essayons de découvrir les raisons de ce phénomène et les moyens de l'employer dans le trading.


Début du mouvement et persistance

Tout mouvement dans notre monde peut être caractérisé par sa direction, son accélération et sa vitesse. Cela fonctionne également sur les marchés liquides. Cela implique une règle importante qui dit que jamais un mouvement dirigé fort par le prix ne peut se terminer brusquement. On peut le comparer à un train : lorsqu'un train entier freine à pleine vitesse, son chemin de freinage peut aller jusqu'à un kilomètre.

Alors, quand commence une tendance ? Lorsque la majorité des participants au marché changent d'avis pour certaines raisons, qu'il s'agisse d'un changement de direction global ou d'un changement de certains facteurs importants influençant le marché ou les nouvelles. Avec cela, une opinion collective réfléchie se forme et la tendance commence. Les acteurs du marché sont de plus en plus convaincus que le mouvement se renforce et se poursuivra. Il a une direction, une accélération et une certaine vitesse car de gros acteurs entrent sur le marché avec des positions importantes. C'est là que ceux qui sont entrés au début du mouvement et lui ont donné une impulsion et une vitesse, commencent à en tirer profit. D'autres traders entrent sur le marché plus tard et avec des prix moins attractifs. Mais contrairement aux premiers traders, ils essaient d'utiliser la direction du mouvement des prix.

La tendance se termine lorsque des changements se produisent. Mais pourquoi le prix évolue-t-il toujours de la même manière ? Pourquoi ça ne change pas brusquement ? La raison d'un tel comportement est que ceux qui accéléraient et poussaient le prix dans la direction souhaitée, commencent à fermer leurs positions et suppriment ainsi la tendance. Et ceux, qui ne faisaient que «surfer sur la vague», croient toujours que rien n'a changé et essaient même de faire bouger les prix. Mais ce « train » ne fait pas que s'arrêter. Il commence à se déplacer dans la direction opposée et ici l'histoire se termine.


Idée de trading et comment ne pas se faire écraser par le «train»

L'idée d'utiliser le mouvement et de gagner du profit est basée sur l'analyse de la profondeur de la tendance actuelle, c'est-à-dire sa taille et sa durée.

Pour fournir un exemple frappant, nous utilisons des indicateurs standard : RSI (indice de force relative) et AC (accélération/décélération).

1. Conditions d'entrée sur le marché

Nous utiliserons le premier indicateur pour montrer dans quelle mesure et en profondeur le prix a actuellement bougé.

On placera des niveaux pour déterminer une distance et une profondeur :

Fig. 1 Niveaux d'oscillateur RSI

Fig. 1. Niveaux d'oscillateur RSI

Les critères d'évaluation de la profondeur du mouvement des prix :

  • Une zone comprise entre les niveaux 40 et 60 est considérée comme une zone plate (zone latérale). Il n'y a pas de tendance lorsque le prix est dans cette zone. Attribuons l'indice 0 à l'absence de mouvement dirigé.

Acheter des zones de mouvement de prix :

  • Zone 60-70 - c'est un début possible du mouvement haussier. Attribuons l'indice 1 à ce mouvement.
  • Zone 70-80 - le mouvement haussier est plus net. Le mouvement prend de la vitesse. Attribuer l'index 2.
  • Zone 80-90 - le mouvement a une direction stable. La vitesse est obtenue. Attribuer l'index 3.
  • Zone 90-100. En règle générale, il s'agit d'un mouvement unidirectionnel fort qui n'a pas de retraits. Très rare. Son indice de mouvement sera de 4.

Indexons de la même manière les prix de vente :

  • Zone 30-40. Le mouvement commence à descendre. Indice -1.
  • Zone 20-30. Le mouvement prend de la vitesse. Indice -2.
  • Zone 10-20. Direction vers le bas stable. Indice -3.
  • Zone 0-10. Zone de mouvement à sens unique forte. Indice -4.

Nous pouvons décrire cette condition dans le langage MQL4 comme suit :

//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if( rsi > 80.0 ) 
   index_rsi = 3;
   else if( rsi > 70.0 ) 
   index_rsi = 2;
   else if( rsi > 60.0 ) 
   index_rsi = 1;
   else if( rsi < 10.0 ) 
   index_rsi = -4;
   else if( rsi < 20.0 ) 
   index_rsi = -3;
   else if( rsi < 30.0 ) 
   index_rsi = -2;
   else if( rsi < 40.0 ) 
   index_rsi = -1;

Nous utiliserons l'indicateur AC de Bill Williams aux fins prévues, à savoir nous mesurerons la vitesse et l'accélération du mouvement actuel.

Fig. 2. Indicateur CA

Fig. 2. Indicateur AC

Critères d'évaluation de la vitesse :

Croissance

  • Le premier critère est la comparaison de l'histogramme actuel et de l'histogramme précédent. Si l'histogramme actuel dépasse le précédent, il y a une accélération probable de la croissance des prix. Définissons-le comme un indice de vitesse égal à 1.
  • Le deuxième critère est la comparaison de 3 barres voisines (de la barre zéro à la deuxième barre). On peut parler d'accélération croissante si la valeur de chaque barre suivante dépasse la valeur de la barre précédente. L'indice de vitesse sera égal à 2.
  • Il existe une comparaison similaire de 4 barres pour vérifier si chaque barre précédente est plus petite que la suivante. L'indice de vitesse est de 3.
  • Comparaison des 5 dernières barres en tenant compte de l'actuelle pour vérifier la même condition. L'indice de vitesse est de 4.

Chute.

  • De même. Comparaison de la barre actuelle et de la précédente. Si la barre courante est plus petite que la précédente, l'indice de vitesse est égal à -1.
  • Comparaison de la réduction de 3 barres de la précédente à l'actuelle. L'indice est -2.
  • Comparaison de 4 barres. L'indice est de -3.
  • Comparaison de 5 barres. L'indice est de -4.

Dans MQL4, cela ressemblera à ceci :

double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;

Si nous avons des indices de profondeur de mouvement et connaissons la vitesse de mouvement, nous pouvons établir et classer certaines conditions d'entrée.

Il existe des options d'entrée sur le marché :

//--- buy signal
if(index_rsi==1 && index_ac>=1) //possible buy movement
if(index_rsi==2 && index_ac>=1) //weak buy movement
if(index_rsi==3 && index_ac==1) //weak buy movement
if(index_rsi==3 && index_ac>=2) //moderate buy movement
if(index_rsi==4 && index_ac>=1) //strong buy movement

//--- sell signal  
if(index_rsi==-1 && index_ac<=-1) //possible sell movement
if(index_rsi==-2 && index_ac<=-1) //weak sell movement
if(index_rsi==-3 && index_ac==-1) //weak sell movement
if(index_rsi==-3 && index_ac<=-2) //moderate sell movement
if(index_rsi==-4 && index_ac<=-1) //strong sell movement

//--- flat 
if(index_rsi==0) 


2. Conditions de sortie du marché

Nous avons défini et classé les paramètres d'entrée. Nous ferons l'analogie suivante pour expliquer comment se sont formées les conditions de sortie du marché.

Pensez, par exemple, à une balle en caoutchouc pour enfants. Et maintenant, pensons à ce qui se passera si quelqu'un lance cette balle dans l'eau depuis un point très haut. Tout d'abord, il tombera et prendra de la vitesse en raison de l'accélération gravitationnelle. Ensuite, il se heurte à l'eau. Mais il a assez de vitesse pour s'immerger à une certaine profondeur perdant sa vitesse et ayant une valeur négative. La balle est affectée par le principe de Archimedes' , elle est donc poussée à la surface.

Maintenant, nous allons explorer cet exemple :

  • Comme vous l'avez déjà compris, notre balle est le prix.
  • Une personne qui lance la balle représente les acteurs du marché qui ont lancé la tendance.
  • La force de gravité qui provoque l'accélération gravitationnelle représente les traders qui ont rejoint la direction des prix après le début de la tendance.
  • L'eau représente des facteurs importants influençant le changement de direction.
  • Le principe d'Archimède représente les positions fermées de ceux qui ont lancé la tendance.

Les deux principaux objectifs pour réaliser des bénéfices sont les suivants :

  1. Déterminez en temps opportun un moment où la balle a déjà été lancée et achetez ou vendez.
  2. Fermez une position lorsque la balle plonge dans l'eau et ralentit.

Il peut être difficile de déterminer la durée et la distance de chute exacte de la balle car nous ne voyons pas une personne lancer la balle ni de l'eau sur les marchés financiers. Nous ne pouvons voir que la vitesse et la direction de la balle.

Nous avons examiné les critères d'évaluation de la profondeur et de la vitesse de mouvement des prix ci-dessus.

Nous allons maintenant définir les conditions de sortie :

//--- possible downward reversal
if(index_rsi>2 && index_ac<0) 

Si le prix montait assez longtemps, son accélération devient négative (à la baisse). Cela montre qu'un changement de tendance est tout à fait possible.

//--- possible upward reversal
if(index_rsi<-2 && index_ac>0) 

De même avec l'exemple donné : la balle est tombée assez longtemps, mais elle est tombée dans l'eau et l'eau pousse la balle dans la direction opposée. Il indique le moment de fermeture des positions.


3. Amélioration de l'efficacité d'entrée et de sortie

Il est connu que certains indicateurs de trading accélèrent leur réponse au changement de tendance lorsque nous utilisons une période plus longue. Mais d'autres faux signaux apparaissent également.

L'autre méthode consiste à ne pas modifier la période de calcul vers le bas, mais à la suivre sur plusieurs périodes.

Fig. 3. Tendance sur différentes périodes en fonction des signaux RSI et AC

Fig. 3. Tendance sur différentes périodes en fonction des signaux RSI et AC

La tendance du mouvement des prix est clairement visible sur la figure en raison de nos critères et des indicateurs RSI et AC. Jetons-y un coup d'œil détaillé.

Mouvement et vitesse sur M1 : mouvement fort, l'indice AC est de 4, la profondeur de l'indice RSI est de 2. M5 a la même profondeur mais la vitesse est égale à 1. Le même mouvement est déterminé sur M15 mais il est moins visible que sur les cartes inférieures. En parlant d'un graphique de 30 minutes et une heure, il est impressionnant de voir que M30 a déjà un signal, et H1 a une décélération et même un signal d'inversion possible.

Cet exemple nous donne une conclusion de poids :

Si nous considérions H1 uniquement, nous passerions un ordre de vente en attente de renversement. Mais ce serait un faux signal que nous avons filtré en procédant à l'analyse des délais inférieurs.


4. Mise en place de la stratégie de trading sous la forme d'un expert advisor

Type d'Expert Advisor

//+------------------------------------------------------------------+
//|                                                       tester.mq4 |
//|                                                Alexander Fedosov |
//+------------------------------------------------------------------+
#property copyright "Alexander Fedosov"
#property strict
#include <trading.mqh>      //Support library for trade operations
//+------------------------------------------------------------------+
//| Parameters                                                       |
//+------------------------------------------------------------------+
input int             SL = 40;               // Stop loss
input int             TP = 70;               // Take profit
input bool            Lot_perm=true;         // Lot of balance?
input double          lt=0.01;               // Lot
input double          risk = 2;              // Risk of deposit, %
input int             slippage= 5;           // Slippage
input int             magic=2356;            // Magic number
input int             period=8;              // RSI indicator period
input ENUM_TIMEFRAMES tf=PERIOD_CURRENT;     // Working timeframe
int dg,index_rsi,index_ac;
trading tr;
//+------------------------------------------------------------------+
//| Expert Advisor initialization function                           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- determining variables for auxiliary class of trading functions
//--- language for displaying errors, Russian of by default.
   tr.ruErr=true;
   tr.Magic=magic;
   tr.slipag=slippage;
   tr.Lot_const=Lot_perm;
   tr.Lot=lt;
   tr.Risk=risk;
//--- number of attempts.
   tr.NumTry=5;
//--- determining decimal places on the current chart
   dg=tr.Dig();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Main calculation function                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
   depth_trend();
   speed_ac();
//--- check for presence of open orders
   if(OrdersTotal()<1)
     {
      //--- check of buy conditions
      if(Buy())
         tr.OpnOrd(OP_BUY,tr.Lots(),Ask,SL*dg,TP*dg);
      //--- check of sell conditions
      if(Sell())
         tr.OpnOrd(OP_SELL,tr.Lots(),Bid,SL*dg,TP*dg);
     }
//--- are there open orders?
   if(OrdersTotal()>0)
     {
      //--- check and close sell orders which meet closing conditions.
      if(Sell_close())
         tr.ClosePosAll(OP_SELL);
      //--- check and close buy orders which meet closing conditions.
      if(Buy_close())
         tr.ClosePosAll(OP_BUY);
     }

  }
//+------------------------------------------------------------------+
//| Function for determining the trend depth                         |
//+------------------------------------------------------------------+
void depth_trend()
  {
//--- determining buy index
   double rsi=iRSI(Symbol(),tf,period,PRICE_CLOSE,0);
   index_rsi = 0;
   if(rsi>90.0) index_rsi=4;
   else if(rsi>80.0)
      index_rsi=3;
   else if(rsi>70.0)
      index_rsi=2;
   else if(rsi>60.0)
      index_rsi=1;
   else if(rsi<10.0)
      index_rsi=-4;
   else if(rsi<20.0)
      index_rsi=-3;
   else if(rsi<30.0)
      index_rsi=-2;
   else if(rsi<40.0)
      index_rsi=-1;
  }
//+------------------------------------------------------------------+
//| Function for determining the trend speed                         |
//+------------------------------------------------------------------+
void speed_ac()
  {
   double ac[];
   ArrayResize(ac,5);
   for(int i=0; i<5; i++)
      ac[i]=iAC(Symbol(),tf,i);

   index_ac=0;
//--- buy signal
   if(ac[0]>ac[1])
      index_ac=1;
   else if(ac[0]>ac[1] && ac[1]>ac[2])
      index_ac=2;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3])
      index_ac=3;
   else if(ac[0]>ac[1] && ac[1]>ac[2] && ac[2]>ac[3] && ac[3]>ac[4])
      index_ac=4;
//--- sell signal
   else if(ac[0]<ac[1])
      index_ac=-1;
   else if(ac[0]<ac[1] && ac[1]<ac[2])
      index_ac=-2;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3])
      index_ac=-3;
   else if(ac[0]<ac[1] && ac[1]<ac[2] && ac[2]<ac[3] && ac[3]<ac[4])
      index_ac=-4;
  }
//+------------------------------------------------------------------+
//| Function for checking buy conditions                             |
//+------------------------------------------------------------------+
bool Buy()
  {
   bool res=false;
   if((index_rsi==2 && index_ac>=1) || (index_rsi==3 && index_ac==1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell conditions                            |
//+------------------------------------------------------------------+
bool Sell()
  {
   bool res=false;
   if((index_rsi==-2 && index_ac<=-1) || (index_rsi==-3 && index_ac==-1))
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking buy position closing conditions            |
//+------------------------------------------------------------------+
bool Buy_close()
  {
   bool res=false;
   if(index_rsi>2 && index_ac<0)
      res=true;
   return (res);
  }
//+------------------------------------------------------------------+
//| Function for checking sell position closing conditions           |
//+------------------------------------------------------------------+
bool Sell_close()
  {
   bool res=false;
   if(index_rsi<-2 && index_ac>0)
      res=true;
   return (res);
  }

Nous avons effectué une petite optimisation en utilisant seulement deux paramètres : tf(délai de travail) et période (Période de l'indicateur RSI).

Et nous avons obtenu les résultats suivants sur M15 :


Fig. 4. Les résultats du backtesting de l'Expert Advisor

Attention ! Ceci est juste une version de démonstration. Nous vous déconseillons de l'utiliser pour des tests et sur des comptes réels.

Conclusion

La détermination du début et de la fin de la tendance est une tâche compliquée pour les traders du monde entier car il est impossible de prédire le comportement du marché.

Mais il est tout à fait possible de déterminer des moments d'entrée et de sortie dans la tendance actuelle et donc d'en tirer un profit non négligeable. Et l'idée générale de détermination et de suivi dynamique de la vitesse de déplacement peut être utile à cet égard.

Je vous souhaite des échanges réussis.


Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/1747

Fichiers joints |
trading.mqh (48.16 KB)
tester.mq4 (11.59 KB)
Conseils pour l'achat d'un produit sur le marché. Guide détaillé Conseils pour l'achat d'un produit sur le marché. Guide détaillé
Ce guide détaillé fournit des astuces pour mieux comprendre et rechercher un produit requis. L'article tente de découvrir différentes méthodes de recherche d'un produit approprié, de tri des produits indésirables, de détermination de l'efficacité et de l'essentialité du produit pour vous.
Création d'une application interactive pour afficher les flux RSS dans MetaTrader 5 Création d'une application interactive pour afficher les flux RSS dans MetaTrader 5
Dans cet article, nous examinons la possibilité de créer une application pour l'affichage de flux RSS. L'article montrera comment les aspects de la bibliothèque standard peuvent être utilisés pour créer des programmes interactifs pour MetaTrader 5.
Better Programmer (Partie 01): Vous devez arrêter de faire ces 5 choses pour devenir un programmeur MQL5 performant Better Programmer (Partie 01): Vous devez arrêter de faire ces 5 choses pour devenir un programmeur MQL5 performant
Il y a beaucoup de mauvaises habitudes que prennent les débutants et même les programmeurs avancés qui les empêchent de devenir le meilleur possible dans leur carrière de codage. Nous allons en discuter et les aborder dans cet article. Cet article est une lecture incontournable pour tous ceux qui souhaitent devenir un développeur à succès dans MQL5.
Le MQL5 Cookbook : Ordres ОСО Le MQL5 Cookbook : Ordres ОСО
L’activité de trading de tout trader implique divers mécanismes et interrelations, y compris les relations entre les ordres. Cet article suggère une solution de traitement des ordres OCO. Les classes de bibliothèque standard sont largement impliquées, et de nouveaux types de données sont créés ici.