![Graphique Liquide](https://c.mql5.com/i/articles/overlay.png)
Graphique Liquide
Introduction
Une fois, j'ai remarqué que les graphiques avec la période H4 et supérieure semblaient différents chez chaque broker. La raison en était que les brokers étaient situés dans des fuseaux horaires différents. Dans certains cas, certaines parties des mêmes graphiques étaient significativement différentes malgré une petite différence entre les fuseaux horaires. Sur un graphique, il y avait un modèle d'inversion distinct et la même partie de l'autre ne représentait aucun modèle précis.
Ensuite, il m'est venu à l'esprit d'écrire un indicateur qui redessinerait le graphique H1 de sorte qu'il y ait toujours une barre de fermeture complète à droite. La période M1 a été choisie comme source de prix. En conséquence, un graphique horaire était redessiné toutes les minutes et en une heure j'avais 60 variétés du même graphique horaire. Sa forme changeait de manière fluide, révélant des motifs cachés sur lesquels le motif initial n'avait même pas d'indice.
J'ai appelé cet indicateur «graphique liquide» pour son apparence spécifique. Selon le mode de traçage, le graphique « s'écoule » (est redessiné) soit lorsqu'une nouvelle barre de la période de base apparaît, soit lorsque la valeur du décalage statique est modifiée. Dans cet article, nous examinerons les principes de traçage d'un «graphique liquide», puis écrirons un indicateur et comparerons l'efficacité de l'utilisation de cette technologie pour les experts négociant par indicateurs et les experts négociant par modèles.
1. Principe du tracé
Avant de commencer, nous allons définir les termes.
Le décalage est une différence entre les prix d'ouverture des barres du graphique résultant et les prix d'ouverture des barres du graphique source.
La période actuelle est la période du graphique source.
La période de base est un délai avec les prix que nous allons utiliser pour former les barres du graphique résultant.
La période de base ne peut pas dépasser celle en cours. La période courante doit être divisée par la période de base sans reste. Plus le rapport entre la période actuelle et la période de base est élevé, plus nous pouvons obtenir de variations différentes du graphique résultant. Cependant, si le rapport est trop grand, les données historiques de la période de base peuvent ne pas être suffisantes pour dessiner le nombre nécessaire de barres de graphique résultantes.
Il existe trois types de tracé d'un graphique.
- Graphique avec un décalage statique (Static Shift ou SS).
- Graphique avec un décalage dynamique dans le mode d'ouverture (Dynamic Shift, just Open ou DSO
- Graphique avec un décalage dynamique dans le mode de fermeture (Dynamic Shift, expected Close ou DSC).
En mode décalage statique, les heures d'ouverture des bars sont décalées de l'heure définie. Le changement dynamique dans le mode d'ouverture donne l'impression qu'un bar vient d'être ouvert et dans le mode de fermeture, comme si le bar sera bientôt fermé.
Regardons de plus près.
1.1. Graphique avec décalage statique
Dans ce mode, l'heure d'ouverture de chaque bar est décalée du nombre de minutes équivalent au nombre défini de plages horaires de base. Nous appellerons cela un décalage. De cette façon, si le décalage défini est égal à 0, alors le graphique est exactement le même que celui de la source. Le décalage 1, à condition que le délai de base soit de 15 minutes, est égale à 15 minutes. Le décalage 2 est égale à 30 minutes et ainsi de suite.
Le décalage ne peut pas dépasser (k-1), où k est un rapport entre la période actuelle et la période de base. Cela signifie qu'avec l'horizon temporel actuel H1 et celui de base M1, le décalage maximum autorisé est de 60/1 - 1 = 59 des échéances de base, soit 59 minutes. Si le délai de base est M5, alors le décalage maximum autorisé est de 60/5 - 1 = 11 des délais de base, soit 55 minutes.
L'heure d'ouverture des bars pour la tranche horaire actuelle H1 et le décalage de 15 minutes, est 00h15, 01h15, 02h15 et ainsi de suite. Pour la tranche horaire actuelle M15 et le décalage de 1 minute, l'heure d'ouverture des bars est 00:16, 00:31, 00:46, 01:01 et ainsi de suite.
Lorsque les décalages sont proches des valeurs limites, un tel graphique est rarement différent de celui source. Des différences significatives apparaissent lorsqu'une valeur de décalage est proche du milieu de la plage admissible.
Fig. 1. Exemple de formation de barres horaires sur l'horizon de base de M15 avec la valeur de décalage égale à 1
1.2. Graphique avec un changement dynamique en mode d'ouverture
Dans ce mode, le décalage est recalculé chaque fois qu'une nouvelle barre de la période de base apparaît. Dans le même temps, le décalage est calculé de manière à ce que le temps d'existence de la barre à la fin du graphique (les derniers prix) ne dépasse pas la valeur de la période de base. Si la période actuelle est H1 et la période de base est M5, il semblera que la barre la plus à droite ait été ouverte il y a moins de cinq minutes.
Fig. 2. Exemple de formation de barres horaires sur l'horizon temporel de base M15 avec décalage dynamique en mode ouverture
1.3. Graphique avec un changement dynamique en mode de fermeture
Dans ce mode, le décalage est recalculé à chaque fois qu'une nouvelle barre apparaît, comme dans le mode ouverture. La seule différence est que le décalage est calculé de la manière dont le temps d'existence de la barre à la fin du graphique (les derniers prix) était supérieur ou égal à la différence entre les périodes actuels et de base. Sur la période actuelle de H1 et celle de base de M5, il semble que la barre d'extrême droite se fermera au plus tard dans cinq minutes.
Fig. 3. Exemple de formation de barres horaires sur l'horizon temporel de base M15 et décalage dynamique en mode fermeture
2. Transformation des données
La fonction GetRatesLC() a été écrite pour convertir les données historiques en tenant compte du décalage défini. Il écrit les données historiques modifiées dans le tableau de structures de type MqlRates, similaire à la fonction CopyRates().
int GetRatesLC( int start_pos // source for copying int len, // amount to copy MqlRates& rates[], // target array ENUM_TIMEFRAMES base_period, // basic timeframe int& shift // shift );
Paramètres
start_pos
[in] Index du premier élément dans la période actuelle. C'est le point de départ de la conversion et de la copie des données dans un tampon.
len
[in] Nombre d'éléments copiés.
taux[]
[out] Tableau de type MqlRates.
période_base
[in] Délai de base.
décalage
[entrée] [sortie] Décalage. Il peut accepter les valeurs suivantes :
Valeur | Description |
---|---|
-2 | Calculer le décalage dans le mode d'ouverture (début de la formation de la barre) |
-1 | Calculer le décalage dans le mode de fermeture (fin de la formation de la barre) |
0 ... N | Appliquer le décalage défini. Peut accepter les valeurs de 0 à N. N = Tcur/Tbase - 1. Où Tcur est la période actuelle, Tbase est une base. |
Table 1. Valeurs admissibles du paramètre shift
Si la fonction est implémentée avec succès, shift recevra la valeur du décalage calculé si les valeurs de -2 ou -1 ont été passées.
Valeur renvoyée
Nombre d'éléments copiés ou code d'erreur :
Code | Description |
---|---|
-1 | Délai de base spécifié de manière incorrecte |
-2 | Décalage spécifié de manière incorrecte |
Table 2. Codes d'erreur renvoyés
Vous trouverez ci-dessous le code de la fonction GetRatesLC() du fichier liquidchart.mqh.
int GetRatesLC(int start_pos,int len,MqlRates &rates[],ENUM_TIMEFRAMES base_period,int& shift) { //--- number of basic timeframes contained in the current one int k=PeriodSeconds()/PeriodSeconds(base_period); if(k==0) return(-1);//basic timeframe specified incorrectly //--- MqlRates r0[]; ArrayResize(rates,len); if(CopyRates(_Symbol,_Period,start_pos,1,r0)<1) return(0);// no data //--- int sh; if(shift>=0) { //--- fixed shift if(shift<k) sh=shift; else return(-2);//--- shift specified incorrectly } else if(shift==-1) { //--- shift to be calculated (dynamic, beginning of the bar formation) sh=int((TimeCurrent()-r0[0].time)/PeriodSeconds(base_period)); } else if(shift==-2) { //--- shift to be calculated (dynamic, end of the bar formation) sh=1+int((TimeCurrent()-r0[0].time)/PeriodSeconds(base_period)); if(sh>=k) sh = 0; } else return(-2);//shift specified incorrectly //--- opening time of the basic period bar, which is the beginning of the current period bar formation //--- synchronization of the time of opening bars takes place relative to the tO time datetime tO; //--- closing time of the bar under formation, i.e. opening time of the last bar of basic timeframe in the series datetime tC; tO=r0[0].time+sh*PeriodSeconds(base_period); if(tO>TimeCurrent()) tO-=PeriodSeconds(); tC=tO+PeriodSeconds()-PeriodSeconds(base_period); if(tC>TimeCurrent()) tC=TimeCurrent(); int cnt=0; while(cnt<len) { ArrayFree(r0); int l=CopyRates(_Symbol,base_period,tC,k,r0); if(l<1) break; //--- time of the bar with the (l-1) index does not have to be equal to tC //--- if there is no bar with the tC time, it can be the nearest bar //--- in any case its time is assigned to the tC time tC=r0[l-1].time; //--- check if tO has the correct value and modify if needed. while(tO>tC) tO-=PeriodSeconds(); //--- the time values of tO and tC have actual meaning for the bar under formation int index=len-1-cnt; rates[index].close=0; rates[index].open=0; rates[index].high=0; rates[index].low=0; rates[index].time=tO; for(int i=0; i<l; i++) if(r0[i].time>=tO && r0[i].time<=tC) { if(rates[index].open==0) { rates[index].open= r0[i].open; rates[index].low = r0[i].low; rates[index].high= r0[i].high; }else{ if(rates[index].low > r0[i].low) rates[index].low=r0[i].low; if(rates[index].high < r0[i].high) rates[index].high=r0[i].high; } rates[index].close=r0[i].close; } //--- specifying closing time of the next bar in the loop tC=tO-PeriodSeconds(base_period); // cnt++; } if(cnt<len) { //-- less data than required, move to the beginning of the buffer int d=len-cnt; for(int j=0; j<cnt; j++) rates[j]=rates[j+d]; for(int j=cnt;j<len;j++) { //--- fill unused array elements with zeros rates[j].close=0; rates[j].open=0; rates[j].high=0; rates[j].low=0; rates[j].time=0; } } shift = sh; return(cnt); }
Quelques points importants doivent être soulignés.
- La fonction ne renvoie pas les volumes de ticks. La raison en est qu'en mode DSC, la fonction ne renvoie jamais le volume égal à un comme cela se produit à l'ouverture du bar. C'est assez logique. Si votre Expert Advisor utilise le volume de tick égal à un comme signal d'une nouvelle formation de barre, il ne recevra jamais ce signal. Cette méthode est utilisée dans la Moyenne mobile de Expert Advisor. Vous pourriez ajouter un comptage des volumes de ticks à la fonction mais cela ne fonctionnerait pas correctement. Pour éviter toute confusion, je ne mesure pas du tout les volumes de tick.
- La fonction renvoie le nombre de barres demandé mais cela ne signifie pas que le temps entre la première et la dernière barre sera proportionnel à l'intervalle de temps correspondant sur le graphique source. Sur un segment continu de données historiques bien qu'il y aura correspondance. Si le segment spécifié contient des weekends, des «barres fantômes» peuvent apparaître sur les bordures.
La figure ci-dessous représente un exemple de «barre fantôme». Ce bar a été formé pour la première minute du 27 octobre, qui a été inclus dans le bar avec l'heure d'ouverture de 23h01 le 26 octobre. Il est à noter qu'après de telles barres le graphique de l'indicateur sera décalé vers la gauche par rapport au graphique source. Les barres avec l'heure correspondant à l'heure initiale (par exemple, 21:00 -> 21:01), auront des index différents.
Fig. 4. Barre fantôme 2014.10.26 à 23:01
3. Indicateur Mise en œuvre
Écrivons un indicateur affichant un «graphique liquide» dans une fenêtre séparée. L'indicateur doit fonctionner dans les trois modes : le mode de décalage statique, le décalage dynamique dans le mode d'ouverture de barre et le décalage dynamique dans le mode de fermeture de barre. L'indicateur doit également avoir des éléments de contrôle pour changer les modes et la valeur de décalage sans qu'il soit nécessaire d'appeler la boîte de dialogue des paramètres de l'indicateur.
Pour commencer, nous utiliserons la fonction GetRatesLC() du fichier liquidchart.mqh. Nous l'appellerons depuis la fonction RefreshBuffers(), elle-même appelée depuis la fonction OnCalculate. Il peut également être appelé depuis OnChartEvent, à condition que certaines modifications du mode ou le décalage et le recalcul des tampons indicateurs soient nécessaires. La fonction OnChartEvent gérera l'appui sur les boutons et la modification des valeurs du décalage et du mode.
Paramètres d'entrée de l'indicateur :
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period input int Depth=100; // Depth, bars input ENUM_LC_MODE inp_LC_mode=LC_MODE_SS; // LC mode input int inp_LC_shift=0; // LC shift
où Profondeur est le nombre de barres du graphique résultant et ENUM_LC_MODE est le type décrivant les modes de tracé de l'indicateur :
enum ENUM_LC_MODE {//plotting mode LC_MODE_SS=0, // Static Shift LC_MODE_DSO=1, // Dynamic Shift, just Open LC_MODE_DSC=2 // Dynamic Shift, expected Close };Les paramètres inp_LC_mode et inp_LC_shift sont dupliqués par LC_mode et LC_shift en conséquence. Cette conception permet de changer leurs valeurs en appuyant sur le bouton. Dessiner les boutons et manipuler les boutons ne seront pas pris en compte car ils ne sont pas pertinents pour le sujet de cet article. Considérons la fonction RefreshBuffers() en détail.
bool RefreshBuffers(int total, double &buff1[], double &buff2[], double &buff3[], double &buff4[], double &col_buffer[]) { MqlRates rates[]; ArrayResize(rates,Depth); //--- int copied=0; int shift=0; if(LC_mode==LC_MODE_SS) shift = LC_shift; //static shift else if(LC_mode==LC_MODE_DSO) shift = -1; //calculate shift (beginning of the bar formation) else if(LC_mode==LC_MODE_DSC) shift = -2; //calculate shift (end of the bar formation) else return(false); //--- copied=GetRatesLC(0,Depth,rates,BaseTF,shift); //--- if(copied<=0) { Print("No data"); return(false); } LC_shift = shift; refr_keys(); //--- initialize buffers with empty values ArrayInitialize(buff1,0.0); ArrayInitialize(buff2,0.0); ArrayInitialize(buff3,0.0); ArrayInitialize(buff4,0.0); //--- int buffer_index=total-copied; for(int i=0;i<copied;i++) { buff1[buffer_index]=rates[i].open; buff2[buffer_index]=rates[i].high; buff3[buffer_index]=rates[i].low; buff4[buffer_index]=rates[i].close; //--- if(rates[i].open<=rates[i].close) col_buffer[buffer_index]=1;//bullish or doji else col_buffer[buffer_index]=0;//bearish // buffer_index++; } // return(true); }
Dans un premier temps, une valeur pertinente de la variable shift doit être transmise à la fonction GetRatesLC() selon le mode. Dans le mode statique ce sera une copie du paramètre LC_shift et dans les modes d'ouverture ou de fermeture de la barre ce sera -1 ou -2 en conséquence. Après une exécution réussie de la fonction, GetRatesLC() renvoie la valeur actuelle du décalage à la variable de décalage. Il est soit recalculé, soit laissé tel quel. Dans tous les cas, nous affectons sa valeur à la variable LC_shift puis appelons le redécoupage des éléments graphiques par la fonction refr_keys().
Après cela, nous renouvelons les valeurs OHLC et les couleurs des barres dans les tampons indicateurs.
Le code complet de l'indicateur se trouve dans le fichier liquid_chart.mq5. Après le lancement, l'indicateur se présente comme suit :
Fig. 5. Indicateur de graphique liquide
Quelques mots sur les éléments de contrôle.
- Le bouton SS fait passer l'indicateur en mode décalage statique. Les boutons avec des flèches sont actifs dans ce mode et ils peuvent être utilisés pour régler la valeur requise du décalage.
- Le bouton DSO fait passer l'indicateur en mode décalage dynamique, début de la formation de la barre. Dans ce mode, la valeur de décalage est calculée et ne peut pas être modifiée manuellement.
- Le bouton DSC commute l'indicateur du mode décalage dynamique, fin de la formation de la barre. Dans ce mode, la modification manuelle du décalage n'est pas non plus disponible.
En mode SS, lorsque la valeur de décalage est 0, l'indicateur duplique les valeurs du graphique initial. Si vous modifiez le décalage, vous verrez le redécoupage du graphique. Une différence notable apparaît déjà à la valeur de 28. Au lieu de «rails» faibles, il y a un «marteau» distinct. Est-il temps d'acheter?
Fig. 6. L'indicateur de graphique liquide, décalage 28
Basculez l'indicateur en mode DSO et une barre nouvellement formée sera toujours à droite. En mode DSC, une barre se fermera au plus tard à une valeur de base.
4. Création d'un expert
Nous allons créer deux Experts. Le premier se négociera par moyenne mobile et le second par le modèle «barre à épingles».
Prenons l'expert Moyenne mobile des exemples standard (le dossier Experts\Exemples\Moyenne mobile) comme modèle. De cette façon, nous serons en mesure de comparer les résultats d'optimisation de deux stratégies essentiellement différentes pour comprendre lorsque l'utilisation du décalage statique ou dynamique est pertinente et important.
4.1. Trading d'experts par moyenne mobile
Dans un premier temps, les paramètres d'entrée doivent être définis. Il y en a quatre :
input double MaximumRisk = 0.1; // Maximum Risk in percentage input double DecreaseFactor = 3; // Decrease factor input int MovingPeriod = 12; // Moving Average period input int MovingShift = 6; // Moving Average shift
Trois autres paramètres seront ajoutés après la modernisation :
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period input bool LC_on = true; // LC mode ON input int LC_shift = 0; // LC shift
Le paramètre LC_on sera utile pour vérifier si GetRatesLC() fonctionne correctement. La combinaison (LC_on == true && LC_shift == 0) doit avoir le même résultat que (LC_on == false).
Pour la modernisation de la moyenne mobile experte prête à l'emploi avec le décalage, le fichier liquidchart.mqh doit être inclus et les fonctions CopyRates() doivent être remplacées par les fonctions GetRatesLC() pour les cas où la fonction de décalage est activée (paramètre d'entrée LC_on est vrai) :
int copied; if(LC_on==true) { int shift = LC_shift; copied=GetRatesLC(0,2,rt,BaseTF,shift); } else copied = CopyRates(_Symbol,_Period,0,2,rt); if(copied!=2) { Print("CopyRates of ",_Symbol," failed, no history"); return; }
Cela doit être fait à la fois dans les fonctions CheckForOpen() et CheckForClose(). Nous devons refuser d'utiliser les poignées d'indicateur et calculerons les moyennes mobiles manuellement. Pour cela nous avons ajouté la fonction CopyMABuffer() :
int CopyMABuffer(int len,double &ma[]) { if(len<=0) return(0); MqlRates rates[]; int l=len-1+MovingPeriod; int copied; if(LC_on==true) { int shift = LC_shift; ArrayResize(rates,l); copied=GetRatesLC(MovingShift,l,rates,BaseTF,shift); } else copied=CopyRates(_Symbol,_Period,MovingShift,l,rates); // if(copied<l) return(0); // for(int i=0;i<len;i++) { double sum=0; for(int j=0;j<MovingPeriod;j++) { if(LC_on==true) sum+=rates[j+i].close; else sum+=rates[copied-1-j-i].close; } ma[i]=sum/MovingPeriod; } return(len); }
Il renvoie un nombre requis de valeurs ou 0 dans le tampon ma[] si, pour une raison quelconque, elles n'ont pas pu être obtenues.
Le contrôle de l'ouverture des barres est un autre point important à considérer. Dans la version originale du Moyenne mobile Expert Advisor, il a été implémenté en utilisant des valeurs de coche :
if(rt[1].tick_volume>1) return;
Dans notre cas, il n'y a pas de volume de ticks et nous allons donc écrire la fonction newbar() pour contrôler l'ouverture de la barre :
bool newbar(datetime t) { static datetime t_prev=0; if(t!=t_prev) { t_prev=t; return(true); } return(false); }
Le principe de fonctionnement réside dans la comparaison du temps d'ouverture de la barre avec sa valeur précédente. Substituons la vérification du volume de tick à l'appel de la fonction newbar() dans les fonctions CheckForOpen() et CheckForClose() :
if(newbar(rt[1].time)==false) return;
Le code complet de l'Expert prêt à l'emploi se trouve dans le fichier moving_average_lc.mq5.
4.2. Expert Advisor Trading par le modèle «Pin Bar»
Pin Bar ou Pinocchio bar est un motif composé de trois barres. La barre du milieu doit avoir une ombre longue ou «nez», indiquant un renversement probable du mouvement des prix. Les barres sur le côté sont appelées «yeux». Leurs points extrêmes ne doivent pas sortir de l'ombre du bar voisin. Ce modèle est populaire auprès des traders qui négocient par modèles de chandeliers.
Notre pin bar doit remplir les conditions suivantes pour inverser le prix à la baisse :
- La barre r[0] doit être haussière.
- La barre r[2] doit être baissière.
- La valeur la plus élevée des prix A et C ne doit pas dépasser B, où A et C sont respectivement les valeurs élevées des barres r[0] et r[2]. B est le prix élevé de la barre r[1].
- Le corps de la barre du milieu, c'est-à-dire le module de différence entre Ouvrir et Fermer(OC sur la figure) de la barre r[1], ne doit pas dépasser le nombre de points fixé par le paramètre externe.
- L'ombre de la barre du milieu, ou la différence entre le prix haut et la plus grande des valeurs d'ouverture et de fermeture de la barre r[1], ne doit pas être inférieure au nombre de points défini par le paramètre externe.
- Le rapport entre l'ombre de la barre du milieu et son corps ne doit pas être inférieur à la valeur définie par le paramètre externe.
La vérification du motif sera effectuée au moment de l'ouverture de la barre r[3].
Fig. 7. Le motif «Pin Bar»
Le code définissant la présence de la barre à broches pour l'inversion vers le bas devrait ressembler à :
if(r[0].open<r[0].close && r[2].open>r[2].close && r[1].high>MathMax(r[0].high,r[2].high)) { //--- eyes of the upper pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(r[1].high-MathMax(r[1].open,r[1].close))/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(1); }
Idem pour le renversement vers le haut. Ainsi, la fonction de vérification de la présence de la barre d'épingle se présentera comme suit :
int IsPinbar(MqlRates &r[]) { //--- there must be 4 values in the r[] array if(ArraySize(r)<4) return(0); if(r[0].open<r[0].close && r[2].open>r[2].close && r[1].high>MathMax(r[0].high,r[2].high)) { //--- eyes of the upper pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(r[1].high-MathMax(r[1].open,r[1].close))/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(1); } else if(r[0].open>r[0].close && r[2].open<r[2].close && r[1].low<MathMin(r[0].low,r[2].low)) { //--- eyes of the lower pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(MathMin(r[1].open,r[1].close)-r[1].low)/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(-1); } return(0); }
Le tableau transmis de données historiques ne doit pas comporter moins de quatre éléments. Dans le cas où la barre à broches supérieure est détectée (c'est-à-dire la barre à broches indiquant l'inversion vers le bas), la fonction renverra la valeur de 1. Dans le cas où il y a une barre à broches inférieure (inversion supposée vers le haut), la fonction renverra la valeur de -1. La fonction renverra 0 s'il n'y avait aucune barre d'épingle. La fonction utilise également les paramètres d'entrée suivants :
input uint inp_pb_min_shdw = 40; // Pin bar min shadow, point input uint inp_pb_max_OC = 20; // Pin bar max OC, point input double inp_pb_min_ratio = 2.0; // Pin bar shadow to OC min ratio
Nous allons trader par la stratégie de trading la plus simple par la barre d'épingle. Nous vendrons si un retournement à la baisse est attendu et achèterons si le retournement est à la hausse. Normalement, des confirmations d'indicateurs sont requises, mais cette fois, nous n'allons pas les utiliser pour maintenir l'intégrité expérimentale. Nous allons utiliser uniquement la barre à broches.
Le trading de l'Expert Advisor par le modèle «Pin Bar» sera basé sur le trading de l'Expert par Moyenne mobile. La fonction CopyMABuffer() doit être supprimée de ce dernier ainsi que l'appel de cette fonction à partir des fonctions CheckForOpen() et CheckForClose(). Le nombre de données historiques demandées doit être augmenté de deux à quatre. L'heure de la barre r[3] sera utilisée dans la vérification de l'ouverture de la nouvelle barre.
int copied; if(LC_on==true) { int shift = LC_shift; copied=GetRatesLC(0,4,rt,BaseTF,shift); } else copied = CopyRates(_Symbol,_Period,0,4,rt); if(copied!=4) { Print("CopyRates of ",_Symbol," failed, no history"); return; } if(newbar(rt[3].time)==false) return;
Le contrôle d'un signal pour l'ouverture de la position ressemblera à :
int pb=IsPinbar(rt); if(pb==1) // upper pin bar signal=ORDER_TYPE_SELL; // sell conditions else if(pb==-1) // lower pin bar signal=ORDER_TYPE_BUY; // buy conditions
Pour fermer la position par la barre à broches opposée :
if(type==(long)POSITION_TYPE_BUY && pb==1) signal=true; if(type==(long)POSITION_TYPE_SELL && pb==-1) signal=true;
Veuillez noter que dans des conditions strictes de paramètres d'entrée, la barre d'épingle se produit rarement. Par conséquent, lors de la fermeture d'une position uniquement par une barre à broches opposée, il existe un risque de perdre du profit ou de fermer à perte.
A ce propos, nous ajoutons les niveaux Take Profit et Stop Loss. Ils vont être définis par les paramètres externes inp_tp_pp et inp_sl_pp respectivement :
double sl=0,tp=0,p=0; double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); if(signal==ORDER_TYPE_SELL) { p=bid; if(inp_sl_pp!=0) sl=NormalizeDouble(ask+inp_sl_pp*_Point,_Digits); if(inp_tp_pp!=0) tp=NormalizeDouble(ask-inp_sl_pp*_Point,_Digits); } else { p=ask; if(inp_sl_pp!=0) sl=NormalizeDouble(bid-inp_sl_pp*_Point,_Digits); if(inp_tp_pp!=0) tp=NormalizeDouble(bid+inp_sl_pp*_Point,_Digits); } CTrade trade; trade.PositionOpen(_Symbol,signal,TradeSizeOptimized(),p,sl,tp);
Si la valeur de inp_tp_pp ou inp_sl_pp est zéro, le niveau correspondant de Take Profit ou Stop Loss ne sera pas défini.
La modification est terminée. L'expert est prêt. Le code complet se trouve dans le fichier pinbar_lc.mq5.
5. Optimisation de l’Expert
Pour évaluer l'efficacité des graphiques avec un changement dans différentes stratégies, nous utiliserons l'optimisation Expert avec une comparaison plus poussée des meilleurs résultats. Les paramètres les plus importants ici sont le profit, le prélèvement et le nombre de transactions. Le trading Expert Advisor par moyenne mobile servira d'exemple de stratégie d'indicateur et le trading Expert par le modèle «Pin Bar» représentera un cas de stratégie sans indicateur.
L'optimisation sera effectuée par des devis pour le dernier semestre à partir du serveur MetaQuotes-Demo. L'expérience sera menée pour l'EURUSD, le GBPUSD et l'USDJPY. Le dépôt de départ est de 3000 USD avec un effet de levier de 1:100. Le mode de test est «Tous les ticks». Mode d'optimisation - rapide (algorithme générique), Balance Max.
5.1. Analyse des résultats d'optimisation d'un expert en trading par moyenne mobile
Comparons les résultats de l'optimisation d'un Expert lorsqu'il travaille dans différents modes : à décalage nul, à décalage statique et à décalage dynamique (DSO et DSC).
Le test sera effectué pour EURUSD, GBPUSD et USDJPY au cours de la période 2014.04.01 - 2014.10.25 (six derniers mois). PERIOD_H1
Paramètres d'entrée de l'Expert :
Paramètre | Valeur |
---|---|
Risque maximum en pourcentage | 0.1 |
Facteur de diminution | 3.0 |
Période de moyenne mobile | 12 |
Moyenne Mobile | 6 |
BaseTF | 1 minute |
LC_on | vrai |
LC_shift | 0 |
Table 3. Paramètres d'entrée du moyenne mobile Expert LC
5.1.1. Optimisation experte en mode Shift désactivé
Paramètres optimisés :
Paramètre | Démarrage | Etape | Arrêter |
---|---|---|---|
Période de moyenne mobile | 12 | 1 | 90 |
Décalage Moyenne Mobile | 6 | 1 | 30 |
Table 4. Paramètres optimisés du moyenne mobile Expert LC en mode zéro décalage
Graphique illustrant l'optimisation Expert dans le mode de décalage désactivé, EURUSD :
Fig. 8. Optimisation de la moyenne mobile LC Expert en mode zéro décalage, EURUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift |
---|---|---|---|---|---|
3796,43 | 796,43 | 16,18 | 111 | 24 | 12 |
3776,98 | 776,98 | 17,70 | 77 | 55 | 22 |
3767,45 | 767,45 | 16,10 | 74 | 59 | 23 |
3740,38 | 740,38 | 15,87 | 78 | 55 | 17 |
3641,16 | 641,16 | 15,97 | 105 | 12 | 17 |
Table 5. Meilleurs résultats du moyenne mobile Expert LC pour EURUSD en mode zéro décalage
Graphique illustrant l'optimisation Expert en mode zéro décalage, GBPUSD :
Fig. 9. Optimisation de la moyenne mobile LC Expert en mode zéro décalage, GBPUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift |
---|---|---|---|---|---|
4025,75 | 1025,75 | 8,08 | 80 | 18 | 22 |
3857,90 | 857,90 | 15,04 | 74 | 55 | 13 |
3851,40 | 851,40 | 18,16 | 80 | 13 | 24 |
3849,48 | 849,48 | 13,05 | 69 | 34 | 29 |
3804,70 | 804,70 | 16,57 | 137 | 25 | 8 |
Table 6. Meilleurs résultats de l'optimisation de moyenne mobile LC Expert pour GBPUSD en mode zéro décalage
Graphique illustrant l'optimisation Expert en mode décalage désactivé, USDJPY :
Fig. 10. Optimisation du moyenne mobile LC Expert en mode zéro décalage, USDJPY
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift |
---|---|---|---|---|---|
5801,63 | 2801,63 | 11,54 | 48 | 65 | 23 |
5789,17 | 2789,17 | 14,03 | 50 | 44 | 27 |
5539,06 | 2539,06 | 17,14 | 46 | 67 | 27 |
5331,34 | 2331,34 | 15,05 | 61 | 70 | 9 |
5045,19 | 2045,19 | 12,61 | 48 | 83 | 15 |
Table 7. Meilleurs résultats du moyenne mobile LC Expert pour USDJPY en mode zéro décalage
5.1.2. Optimisation experte en mode Static Shift
Paramètres optimisés :
Paramètre | Démarrage | Etape | Arrêter |
---|---|---|---|
Période de moyenne mobile | 12 | 1 | 90 |
Décalage Moyenne Mobile | 6 | 1 | 30 |
LC_shift | 1 | 1 | 59 |
Table 8. Paramètres optimisés du moyenne mobile LC Expert en mode de décalage statique
Graphique illustrant l'optimisation Expert en mode de décalage statique, EURUSD :
Fig. 11. Optimisation du moyenne mobile LC Expert en mode décalage statique, EURUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
4385,06 | 1385,06 | 12,87 | 100 | 32 | 11 | 8 |
4149,63 | 1149,63 | 14,22 | 66 | 77 | 25 | 23 |
3984,92 | 984,92 | 21,52 | 122 | 12 | 11 | 26 |
3969,35 | 969,35 | 16,08 | 111 | 32 | 11 | 24 |
3922,95 | 922,95 | 12,29 | 57 | 77 | 25 | 10 |
Table 9. Meilleurs résultats d'optimisation de l moyenne mobile LC Expert pour EURUSD en mode décalage statique
Graphique illustrant l'optimisation Expert en mode décalage statique, GBPUSD :
Fig. 12. Optimisation de la moyenne mobile LC Expert en mode décalage statique, GBPUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
4571,07 | 1571,07 | 14,90 | 79 | 12 | 25 | 42 |
4488,90 | 1488,90 | 15,46 | 73 | 12 | 25 | 47 |
4320,31 | 1320,31 | 9,59 | 107 | 12 | 16 | 27 |
4113,47 | 1113,47 | 10,96 | 75 | 12 | 25 | 15 |
4069,21 | 1069,21 | 15,27 | 74 | 12 | 25 | 50 |
Table 10. Meilleurs résultats d'optimisation de la moyenne mobile LC Expert pour GBPUSD en mode de décalage statique
Graphique illustrant l'optimisation Expert en mode décalage statique, USDJPY :
Fig. 13. Optimisation de la moyenne mobile LC Expert en mode décalage statique, USDJPY
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
6051,39 | 3051,39 | 15,94 | 53 | 76 | 12 | 31 |
5448,98 | 2448,98 | 10,71 | 54 | 44 | 30 | 2 |
5328,15 | 2328,15 | 11,90 | 50 | 82 | 13 | 52 |
5162,82 | 2162,82 | 10,46 | 71 | 22 | 26 | 24 |
5154,71 | 2154,71 | 14,34 | 54 | 75 | 14 | 58 |
Table 11. Meilleurs résultats d'optimisation de la moyenne mobile LC Expert pour USDJPY en mode décalage statique
5.1.3. Optimisation experte en mode décalage dynamique
Paramètres optimisés :
Paramètre | Démarrage | Etape | Arrêter |
---|---|---|---|
Période de moyenne mobile | 12 | 1 | 90 |
Décalage Moyenne Mobile | 6 | 1 | 30 |
LC_shift | -2 | 1 | -1 |
Table 12. Paramètres optimisés de la Moyenne mobile LC Expert en mode décalage dynamique
Graphique illustrant l'optimisation Expert en mode décalage dynamique, EURUSD :
Fig. 14. Optimisation de la moyenne mobile LC Expert en mode décalage dynamique, EURUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
3392,64 | 392,64 | 27,95 | 594 | 15 | 13 | -2 |
3140,26 | 140,26 | 23,35 | 514 | 12 | 17 | -2 |
2847,12 | -152,88 | 17,04 | 390 | 79 | 23 | -1 |
2847,12 | -152,88 | 17,04 | 390 | 79 | 12 | -1 |
2826,25 | -173,75 | 20,12 | 350 | 85 | 22 | -1 |
Table 13. Meilleurs résultats d'optimisation de la Moyenne mobile LC Expert pour EURUSD en mode décalage dynamique
Graphique illustrant l'optimisation Expert en mode décalage dynamique, GBPUSD :
Fig. 15. Optimisation de la moyenne mobile LC Expert en mode décalage dynamique, GBPUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
5377,58 | 2377,58 | 19,73 | 391 | 12 | 26 | -2 |
3865,50 | 865,50 | 18,18 | 380 | 23 | 23 | -2 |
3465,63 | 465,63 | 21,22 | 329 | 48 | 21 | -2 |
3428,99 | 428,99 | 24,55 | 574 | 51 | 16 | -1 |
3428,99 | 428,99 | 24,55 | 574 | 51 | 15 | -1 |
Table 14. Meilleurs résultats d'optimisation de la Moyenne mobile LC Expert pour GBPUSD en mode décalage dynamique
Graphique illustrant l'optimisation Expert en mode décalage dynamique, USDJPY :
Fig. 16. Optimisation de la moyenne mobile LC Expert en mode décalage dynamique, USDJPY
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
6500,19 | 3500,19 | 17,45 | 244 | 42 | 28 | -2 |
6374,18 | 3374,18 | 19,91 | 243 | 54 | 24 | -2 |
6293,29 | 3293,29 | 19,30 | 235 | 48 | 27 | -2 |
5427,69 | 2427,69 | 17,65 | 245 | 90 | 8 | -2 |
5421,83 | 2421,83 | 16,30 | 301 | 59 | 12 | -2 |
Table 15. Meilleurs résultats d'optimisation de la moyenne mobile LC Expert pour USDJPY en mode décalage dynamique
5.2. Analyse des résultats d'optimisation du trading expert par le modèle «Pin Bar»
Comparons les résultats de l'optimisation d'un Expert lorsqu'il travaille dans différents modes : à décalage nul, à décalage statique et à décalage dynamique (DSO et DSC). Le test sera effectué pour EURUSD, GBPUSD et USDJPY, sur la période 2014.04.01 - 2014.10.25. PERIOD_H1
Paramètres d'entrée de l'Expert :
Paramètre | Valeur |
---|---|
Risque maximum en pourcentage | 0.1 |
Facteur baissier | 3.0 |
Pin bar ombre min, points | 40 |
Pin bar max OC, points | 110 |
Ratio d'ombre de la barre d'épingle au OC min | 1.4 |
SL, points (0 pour OFF) | 150 |
TP, points (0 pour OFF) | 300 |
Période de base LC | 1 minute |
Mode LC activé | vrai |
décalage LC | 0 |
Table 16. Paramètres d'entrée du Pin Bar LC Expert
Nous allons optimiser les paramètres définissant la forme du pin bar : longueur du «nez», rapport entre la longueur du «nez» et le corps de la barre médiane et la taille maximale du corps. Les niveaux Take Profit et Stop Loss sont également à optimiser.
5.2.1. Optimisation experte en mode Shift désactivé
Paramètres optimisés :
Paramètre | Démarrage | Etape | Arrêter |
---|---|---|---|
Pin bar ombre min, points | 100 | 20 | 400 |
Pin bar max OC, points | 20 | 20 | 100 |
Ratio d'ombre de la barre d'épingle au OC min | 1 | 0.2 | 3 |
SL, points (0 pour OFF) | 150 | 50 | 500 |
TP, points (0 pour OFF) | 150 | 50 | 500 |
Table 17. Paramètres optimisés du Pin Bar LC Expert en mode décalage désactivé
Graphique illustrant l'optimisation Expert dans le mode de décalage désactivé, EURUSD :
Fig. 17. Optimisation du Pin Bar LC Expert en mode zéro décalage, EURUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Barre d'épingle ombre min | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP |
---|---|---|---|---|---|---|---|---|
3504,59 | 504,59 | 9,82 | 33 | 100 | 60 | 1.8 | 450 | 500 |
3428,89 | 428,89 | 8,72 | 21 | 120 | 60 | 2.8 | 450 | 350 |
3392,37 | 392,37 | 9,94 | 30 | 100 | 60 | 2,6 | 450 | 250 |
3388,54 | 388,54 | 9,93 | 31 | 100 | 80 | 2,2 | 450 | 300 |
3311,84 | 311,84 | 6,84 | 13 | 140 | 60 | 2,2 | 300 | 450 |
Table 18. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour EURUSD en mode zéro décalage
Graphique illustrant l'optimisation Expert en mode zéro décalage, GBPUSD :
Fig. 18. Optimisation du Pin Bar LC Expert en mode zéro décalage, GBPUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Ombre min de la barre d'épingles | Pin Bar max OC | Ombre de barre d'épingle rapport OC min | SL | TP |
---|---|---|---|---|---|---|---|---|
3187,13 | 187,13 | 11,10 | 13 | 160 | 60 | 2,6 | 500 | 350 |
3148,73 | 148,73 | 3,23 | 4 | 220 | 40 | 2,8 | 400 | 400 |
3142,67 | 142,67 | 11,27 | 17 | 160 | 100 | 1,8 | 500 | 350 |
3140,80 | 140,80 | 11,79 | 13 | 180 | 100 | 2 | 500 | 500 |
3094,20 | 94,20 | 1,62 | 1 | 260 | 60 | 1,6 | 500 | 400 |
Table 19. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour GBPUSD en mode zéro décalage
Graphique illustrant l'optimisation Expert en mode décalage désactivé, USDJPY :
Fig. 19. Optimisation du Pin Bar LC Expert en mode zéro décalage, USDJPY
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Barre d'épingle ombre min | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP |
---|---|---|---|---|---|---|---|---|
3531,99 | 531,99 | 9,00 | 6 | 160 | 60 | 2.2 | 450 | 500 |
3355,91 | 355,91 | 18,25 | 16 | 120 | 60 | 1,6 | 450 | 400 |
3241,93 | 241,93 | 9,11 | 4 | 160 | 40 | 2,8 | 450 | 500 |
3180,43 | 180,43 | 6,05 | 33 | 100 | 80 | 1,8 | 150 | 450 |
3152,97 | 152,97 | 3,14 | 6 | 160 | 80 | 2,8 | 150 | 500 |
Table 20. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour USDJPY en mode zéro décalage
5.2.2. Optimisation experte en mode Static Shift
Paramètres optimisés :
Paramètre | Démarrage | Etape | Arrêter |
---|---|---|---|
Pin bar ombre min, points | 100 | 20 | 400 |
Pin bar max OC, points | 20 | 20 | 100 |
Ratio d'ombre de la barre d'épingle au OC min | 1 | 0.2 | 3 |
SL, points (0 pour OFF) | 150 | 50 | 500 |
TP, points (0 pour OFF) | 150 | 50 | 500 |
décalage LC | 1 | 1 | 59 |
Table 21. Paramètres optimisés du Pin Bar LC Expert en mode statique
Graphique illustrant l'optimisation Expert en mode de décalage statique, EURUSD :
Fig. 20. Optimisation du Pin Bar LC Expert en mode décalage statique, EURUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Barre d'épingle ombre min | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP | décalage LC |
---|---|---|---|---|---|---|---|---|---|
4843,54 | 1843,54 | 10,14 | 19 | 120 | 80 | 1,6 | 500 | 500 | 23 |
4714,81 | 1714,81 | 10,99 | 28 | 100 | 100 | 1,6 | 500 | 500 | 23 |
4672,12 | 1672,12 | 10,16 | 18 | 120 | 80 | 1,8 | 500 | 500 | 23 |
4610,13 | 1610,13 | 9,43 | 19 | 120 | 80 | 1,6 | 450 | 450 | 23 |
4562,21 | 1562,21 | 13,94 | 27 | 100 | 100 | 1,6 | 500 | 400 | 25 |
Table 22. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour EURUSD en mode décalage statique
Graphique illustrant l'optimisation Expert en mode décalage statique, GBPUSD :
Fig. 21. Optimisation du Pin Bar LC Expert en mode décalage statique, GBPUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Barre d'épingle ombre min | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP | décalage LC |
---|---|---|---|---|---|---|---|---|---|
4838,10 | 1838,10 | 5,60 | 34 | 100 | 40 | 2,4 | 450 | 500 | 24 |
4797,09 | 1797,09 | 5,43 | 35 | 100 | 40 | 2,6 | 400 | 500 | 24 |
4755,57 | 1755,57 | 7,36 | 42 | 100 | 100 | 2 | 400 | 500 | 24 |
4725,41 | 1725,41 | 8,35 | 45 | 100 | 80 | 1 | 400 | 500 | 24 |
4705,61 | 1705,61 | 8,32 | 41 | 100 | 100 | 2 | 450 | 500 | 24 |
Table 23. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour GBPUSD en mode décalage statique
Graphique illustrant l'optimisation Expert en mode décalage statique, USDJPY :
Fig. 22. Optimisation du Pin Bar LC Expert en mode décalage statique, USDJPY
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Ombre min de la barre d'épingles | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP | décalage LC |
---|---|---|---|---|---|---|---|---|---|
4108,83 | 1108,83 | 6,45 | 9 | 140 | 40 | 1,4 | 500 | 450 | 55 |
3966,74 | 966,74 | 7,88 | 12 | 140 | 60 | 2,8 | 450 | 500 | 45 |
3955,32 | 955,32 | 9,91 | 21 | 120 | 80 | 2 | 500 | 500 | 45 |
3953,80 | 953,80 | 6,13 | 10 | 140 | 60 | 2,8 | 450 | 450 | 47 |
3944,33 | 944,33 | 6,42 | 6 | 160 | 100 | 2,6 | 500 | 400 | 44 |
Table 24. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour USDJPY en mode décalage statique
5.2.3. Optimisation experte en mode décalage dynamique
Paramètres optimisés :
Paramètre | Démarrage | Etape | Arrêter |
---|---|---|---|
Pin bar ombre min, points | 100 | 20 | 400 |
Pin bar max OC, points | 20 | 20 | 100 |
Ratio d'ombre de la barre d'épingle au OC min | 1 | 0.2 | 3 |
SL, points (0 pour OFF) | 150 | 50 | 500 |
TP, points (0 pour OFF) | 150 | 50 | 500 |
décalage LC | -2 | 1 | -1 |
Table 25. Paramètres optimisés du Pin Bar LC Expert en mode décalage dynamique
Graphique illustrant l'optimisation Expert en mode décalage dynamique, EURUSD :
Fig. 23. Optimisation du Pin Bar LC Expert en mode décalage dynamique, EURUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Barre d'épingle ombre min | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP | décalage LC |
---|---|---|---|---|---|---|---|---|---|
4185,65 | 1185,65 | 13,22 | 49 | 200 | 100 | 1,8 | 450 | 500 | -2 |
4011,80 | 1011,80 | 13,75 | 49 | 200 | 100 | 2 | 400 | 500 | -2 |
3989,28 | 989,28 | 12,01 | 76 | 140 | 20 | 1,2 | 350 | 200 | -1 |
3979,50 | 979,50 | 16,45 | 157 | 100 | 20 | 1 | 450 | 500 | -1 |
3957,25 | 957,25 | 16,68 | 162 | 100 | 20 | 1 | 400 | 500 | -1 |
Table 26. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour EURUSD en mode décalage statique
Graphique illustrant l'optimisation Expert dans le mode de décalage dynamique pour GBPUSD :
Fig. 24. Optimisation du Pin Bar LC Expert en mode décalage dynamique, GBPUSD
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Barre d'épingle ombre min | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP | décalage LC |
---|---|---|---|---|---|---|---|---|---|
4906,84 | 1906,84 | 10,10 | 179 | 120 | 40 | 1,8 | 500 | 500 | -2 |
4316,46 | 1316,46 | 10,71 | 151 | 120 | 20 | 2,4 | 450 | 500 | -1 |
4250,96 | 1250,96 | 12,40 | 174 | 120 | 40 | 1,8 | 500 | 500 | -1 |
4040,82 | 1040,82 | 12,40 | 194 | 120 | 60 | 2 | 500 | 200 | -2 |
4032,85 | 1032,85 | 11,70 | 139 | 140 | 40 | 2 | 400 | 200 | -1 |
Table 27. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour GBPUSD en mode décalage dynamique
Graphique illustrant l'optimisation Expert en mode décalage dynamique, USDJPY :
Fig. 25. Optimisation du Pin Bar LC Expert en mode décalage dynamique, USDJPY
Meilleurs résultats :
Résultat | Bénéfice | Prélèvement en % | Nombre de trades | Barre d'épingle ombre min | Barre de broche max OC | Ombre de barre d'épingle rapport OC min | SL | TP | décalage LC |
---|---|---|---|---|---|---|---|---|---|
5472,67 | 2472,67 | 13,01 | 138 | 100 | 20 | 2,4 | 500 | 500 | -1 |
4319,84 | 1319,84 | 15,87 | 146 | 100 | 20 | 2,2 | 400 | 500 | -1 |
4259,54 | 1259,54 | 19,71 | 137 | 100 | 20 | 2,4 | 500 | 500 | -2 |
4197,57 | 1197,57 | 15,98 | 152 | 100 | 20 | 1 | 350 | 500 | -1 |
3908,19 | 908,19 | 16,79 | 110 | 120 | 40 | 3 | 400 | 400 | -1 |
Table 28. Meilleurs résultats d'optimisation du Pin Bar LC Expert pour USDJPY en mode décalage dynamique
6. Comparaison des résultats d'optimisation
Pour créer un tableau de comparaison, sélectionnons les valeurs maximales de profit, de tirage et un certain nombre de transactions dans chaque tableau des meilleurs résultats. A côté de la valeur reçue dans les modes de décalage statique ou dynamique, on écrira la variation (en pourcentage) ou cette valeur par rapport à la même valeur dans le mode de décalage zéro.
6.1. Trading d'experts par moyenne mobile
Profit :
Pas de décalage | Décalage statique | Statique dynamique | |
---|---|---|---|
EURUSD | 796,43 | 1385,06 (+74%) | 392,64 (-51%) |
GBPUSD | 1025,75 | 1571,07 (+53%) | 2377,58 (+132%) |
USDJPY | 2801,63 | 3051,39 (+9%) | 3500,19 (+25%) |
Table 29. Comparaison des valeurs de profit maximum du tableau des meilleurs résultats d'optimisation de l'Expert Moyenne Mobile LC
Prélèvement :
Pas de décalage | Décalage statique | Dynamic statique | |
---|---|---|---|
EURUSD | 17,7 | 21,52 (+22%) | 27,95 (+58%) |
GBPUSD | 18,16 | 15,46 (-15%) | 24,55 (+35%) |
USDJPY | 17,14 | 15,94 (-7%) | 19,91 (+16%) |
Table 30. Comparaison des valeurs de prélèvement maximum du tableau des meilleurs résultats d'optimisation de l'Expert Moyenne Mobile LC
Nombre de trades :
Pas de décalage | Décalage statique | Statique statique | |
---|---|---|---|
EURUSD | 111 | 122 (+10%) | 594 (+435%) |
GBPUSD | 137 | 107 (-22%) | 574 (+319%) |
USDJPY | 61 | 71 (+16%) | 301 (+393%) |
Table 31. Comparaison des valeurs maximales du nombre de trades du tableau des meilleurs résultats d'optimisation de la Moyenne Mobile LC Expert
La première chose qui attire tout de suite l'attention est une augmentation significative des points d'entrée dans le mode de changement de vitesse dynamique. Dans le même temps, cependant, le Prélèvement a sensiblement augmenté et le bénéfice a diminué deux fois pour l'EURUSD.
Le mode de décalage statique est plus rentable pour cet Expert Advisor. Ici, nous pouvons voir la diminution du prélèvement pour GBPUSD et USDJPY et une augmentation significative du profit pour EURUSD et GBPUSD.
6.2. Trading d'experts par le modèle «Pin Bar»
Profit :
Pas de décalage | Décalage statique | Statique statique | |
---|---|---|---|
EURUSD | 504,59 | 1843,54 (+265%) | 1185,65 (+135%) |
GBPUSD | 187,13 | 1838,10 (+882%) | 1906,84 (+919%) |
USDJPY | 531,99 | 1108,83 (+108%) | 2472,67 (+365%) |
Table 32. Comparaison des valeurs de profit maximum à partir des tableaux des meilleurs résultats d'optimisation du Pin Bar LC Expert
Prélèvement :
Pas de décalage | Décalage statique | Statique statique | |
---|---|---|---|
EURUSD | 9,94 | 13,94 (+40%) | 16,68 (+68%) |
GBPUSD | 11,79 | 8,35 (-29%) | 12,4 (+5%) |
USDJPY | 18,25 | 9,91 (-46%) | 19,71 (+8%) |
Table 33. Comparaison des valeurs de prélèvement maximales du tableau des meilleurs résultats d'optimisation du Pin Bar LC Expert
Nombre de trades :
Pas de décalage | Décalage statique | Statique statique | |
---|---|---|---|
EURUSD | 33 | 28 (-15%) | 162 (+391%) |
GBPUSD | 17 | 45 (+165%) | 194 (+1041%) |
USDJPY | 33 | 21 (-36%) | 152 (+361%) |
Table 34. Comparaison des valeurs maximales du nombre de transactions du tableau des meilleurs résultats d'optimisation du Pin Bar LC Expert
Ici, nous voyons également une augmentation substantielle du nombre de transactions dans le mode de décalage dynamique. Dans ce cas cependant, une augmentation significative du prélèvement, comme dans le cas similaire avec la Moyenne mobile LC Expert, ne concerne que l'EURUSD. Pour les autres paires, le prélèvement augmente de manière insignifiante, d'environ 5 à 8 %.
En mode décalage statique, l'optimisation a montré un profit limité pour GBPUSD et USDJPY. Néanmoins, nous pouvons voir une baisse significative du prélèvement pour les mêmes paires et sa hausse pour l'EURUSD. Le mode de décalage statique semble moins rentable pour cet Expert Advisor.
Conclusion
Dans cet article, nous avons considéré les principes de traçage du « graphique liquide » et comparé l'influence de ses modes de fonctionnement sur le résultat d'optimisation de l'expert en fonction des stratégies indicatrices et non indicatrices.
D'où les conclusions suivantes :
- Pour les experts utilisant des stratégies d'indicateurs (par exemple le trading par moyenne mobile), le mode de décalage statique est plus approprié. Il assure une entrée sur le marché plus précise, ce qui entraîne une diminution du tirage et une augmentation du profit.
- Le mode de décalage dynamique est meilleur pour les experts qui négocient par modèles. Ce mode augmente le nombre de points d'entrée bien que le prélèvement augmente en même temps.
- Le mode de changement dynamique associé à une gestion de l'argent bien organisée peut donner des résultats impressionnants.
- Bien qu'il semble très prometteur pour les stratégies d'indicateurs, le mode de décalage statique présente un inconvénient important. La valeur de décalage fournissant le meilleur résultat est une autre variable dans la liste des paramètres d'entrée qui doit être devinée correctement.
Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/1208
![Les bases de la programmation MQL5 : Variables globales du terminal](https://c.mql5.com/2/12/MQL5_Basics_Global_variables_terminal_MetaTrader5.png)
![Tracer des lignes de tendance basées sur des fractales à l’aide de MQL4 et MQL5](https://c.mql5.com/2/18/TrendLines_Fractals_Based.png)
![Le livre de recettes statistique du trader : Hypothèses](https://c.mql5.com/2/12/Trader_Statistics_Recipes_MetaTrader5_Alglib_MQL5__1.png)
![Le MQL5 Cookbook : Manipulation BookEvent](https://c.mql5.com/2/11/OnBookEvent_MetaTrader5.png)
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation