Aide au codage - page 111

 

Merci beaucoup ! Vous êtes si bon !

 

Bonjour,

Est-ce que quelqu'un connaît un indicateur qui trace seulement le point de swing sur le graphique comme décrit ci-dessous (comme celui de Pipware Dashboard) :

Stratégie de rupture fractale

Comme indiqué précédemment, l'action des prix se déplace par vagues. La direction de la tendance (hausse ou baisse) est déterminée par les hauts et les bas consécutifs.

La tendance est à la hausse lorsque ces vagues atteignent des sommets et des creux plus élevés.

On parle de tendance à la baisse lorsque ces vagues produisent des creux plus bas et des sommets plus bas.

Comme les fractales sont des hauts et des bas, elles peuvent être utilisées pour déterminer la direction de la tendance.

Considérez le graphique GU H4 (à droite). Avant le point A, la tendance est à la hausse, c'est-à-dire que la deuxième fractale basse est plus haute que la première... la deuxième fractale haute est plus haute que la première.

Une nouvelle fractale basse s'est formée au point A et est plus élevée que les deux fractales basses précédentes (poursuivant la tendance à la hausse). La bougie immédiatement après le point A a formé une nouvelle fractale haute. Cette fractale est plus basse que la fractale haute précédente , indiquant un possible changement de direction de la tendance. La bougie sous le point B "casse" le niveau fractal du point A (ligne verte). Une flèche rouge est dessinée indiquant que la direction de la tendance a changé vers le BAS.

Les flèches peuvent être affichées par ArrowsOn=true. Remarque : les flèches sont dessinées uniquement lorsqu'une rupture fractale change la direction de la tendance. Par exemple, après le point B, les fractales inférieures continuent à être cassées (2 fois de plus).

Après le point B, la tendance est considérée comme BASSE jusqu'à ce qu'une fractale haute soit cassée. Juste avant le point C, une fractale basse plus élevée est formée. La direction de la tendance est toujours considérée comme DOWN ... aucune fractale haute n'a encore été cassée.

Au point E, la fractale haute du point C est cassée. Même s'il s'agit d'une petite cassure, une flèche verte est dessinée au point D, indiquant un changement de direction de la tendance. La tendance est maintenant considérée comme étant à la hausse jusqu'à la prochaine cassure de la fractale basse.

Merci beaucoup pour votre aide.

Merci beaucoup,

Gringoh

 

Merci Mladen, c'est parfait ! !! Si je veux ajouter une autre ligne à l'indicateur comme ceci, comment je modifie le code ? merci d'avance....

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_color2 Blue

double UpperBuf[];

double UpperBuf1[];

double UpperBufb[];

double UpperBuf1b[];

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

void init()

{

IndicatorBuffers(4);

SetIndexBuffer(0, UpperBuf1);

SetIndexBuffer(1, UpperBuf1b);

SetIndexBuffer(2, UpperBuf);

SetIndexBuffer(3, UpperBufb);

}

void deinit() {}

void start()

{

int counted = IndicatorCounted();

if(counted < 0) return (-1);

if(counted > 0) counted--;

int limit = Bars - counted;

for(int i = 0; i < limit; i++)

if (Close!=0)

UpperBuf= ((High/Close)-34)*Volume;

else UpperBuf= 0;

for( i = 0; i < limit; i++) UpperBuf1= iMAOnArray(UpperBuf,0,33,0,MODE_EMA,i);

for( i = 0; i < limit; i++)

if (Close!=0)

UpperBufb= ((High/Close)-34)*Volume;

else UpperBufb= 0;

for( i = 0; i < limit; i++) UpperBuf1b= iMAOnArray(UpperBufb,0,33,0,MODE_EMA,i);

}

 
k3rn3l:
Merci Mladen, c'est parfait ! !! Si je veux ajouter une autre ligne à l'indicateur comme ceci, comment je modifie le code ? merci d'avance....

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_color2 Blue

double UpperBuf[];

double UpperBuf1[];

double UpperBufb[];

double UpperBuf1b[];

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

void init()

{

IndicatorBuffers(4);

SetIndexBuffer(0, UpperBuf1);

SetIndexBuffer(1, UpperBuf1b);

SetIndexBuffer(2, UpperBuf);

SetIndexBuffer(3, UpperBufb);

}

void deinit() {}

void start()

{

int counted = IndicatorCounted();

if(counted < 0) return (-1);

if(counted > 0) counted--;

int limit = Bars - counted;

for(int i = 0; i < limit; i++)

if (Close!=0)

UpperBuf= ((High/Close)-34)*Volume;

else UpperBuf= 0;

for( i = 0; i < limit; i++) UpperBuf1= iMAOnArray(UpperBuf,0,33,0,MODE_EMA,i);

for( i = 0; i < limit; i++)

if (Close!=0)

UpperBufb= ((High/Close)-34)*Volume;

else UpperBufb= 0;

for( i = 0; i < limit; i++) UpperBuf1b= iMAOnArray(UpperBufb,0,33,0,MODE_EMA,i);

}

k3rn3l

Vous l'avez déjà fait (il y a 2 lignes sur l'indicateur). Si vous voulez en avoir une de plus (pour en avoir 3), il suffit de faire la même chose que pour la deuxième ligne.

 

chers codeurs,

J'ai trouvé cet indicateur METASTOCK très bon, pouvez-vous s'il vous plaît le faire pour mt4 ?

x:=Input("Clôtures inférieures consécutives - Entrée",

0,21,5) ;

y:=Input("Clôtures supérieures consécutives - Sortie",

0,21,5) ;

delay:=Input("Délai d'entrée et de sortie",0,5,0) ;

plot:=Input("signaux : [1]Propre, [2]Tous",

1,2,2) ;

In:=Somme(C<Ref(C,-1),x)=x ;

Out:=Sum(C>Ref(C,-1),y)=y ;

Init:=Cum(In+Out>-1)=1 ;

InInit:=Cum(In)=1 ;

flag:=BarsSince(Init OR In)

<BarsSince(Init OR Out)+InInit ;

signaux:=(InInit AND Alert(InInit=0,2)

OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag=0,2))

-(drapeau=0 AND Alert(drapeau,2)) ;

0;Ref(If(plot=1,signals,In-Out),-delay)

 
debashis:
chers codeurs,

J'ai trouvé cet indicateur METASTOCK très bon, pouvez-vous s'il vous plaît le faire pour mt4 ?

x:=Input("Clôtures inférieures consécutives - Entrée",

0,21,5) ;

y:=Input("Clôtures supérieures consécutives - Sortie",

0,21,5) ;

delay:=Input("Délai d'entrée et de sortie",0,5,0) ;

plot:=Input("signaux : [1]Propre, [2]Tous",

1,2,2) ;

In:=Somme(C<Ref(C,-1),x)=x ;

Out:=Sum(C>Ref(C,-1),y)=y ;

Init:=Cum(In+Out>-1)=1 ;

InInit:=Cum(In)=1 ;

flag:=BarsSince(Init OR In)

<BarsSince(Init OR Out)+InInit ;

signaux:=(InInit AND Alert(InInit=0,2)

OR flag AND Alert(flag=0,2)) -(flag=0 AND Alert(flag=0,2))

-(flag=0 AND Alert(flag,2)) ;

0;Ref(If(plot=1,signaux,In-Out),-delay)

debashis

Quel est le nom de cet indicateur ?

 

gourou

il s'agit du "système de modèles de base". http://www.metastocktools.com/MetaStock/Pattern01.txt

 

Bonjour Malden, merci de m'avoir aidé avec l'ASCTrend. Je me demande si vous pouvez m'aider à faire une application pour cet indicateur. Il y a un autre indicateur appelé MaonMa. (Je vais les joindre) Je pense que lorsque l'ASCTrend monte et que la barre est au-dessus de la ligne jaune (60 MA), il faut faire un trade long, le stop lose sera le plus bas précédent, de même, lorsque l'ASCTrend descend et que la barre est sous la ligne jaune (60 MA), il faut faire un trade court, le stop lose sera le plus haut précédent. Merci.

 

Bonjour Mladen,

j'ai besoin de votre aide à nouveau. j'ai mis le code suivant pour un indic basé sur une flèche. mais son pc se bloque. si cela peut éviter le lagging, pouvez-vous réécrire le code en utilisant les codes rsi, cci et cmo originaux dans l'indic sans fonction icustom.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Crimson

#property indicator_color2 RoyalBlue

//---- paramètres d'entrée

extern int barsToProcess=100 ;

//---- tampons

double ExtMapBuffer1[] ;

double ExtMapBuffer2[] ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé

//+------------------------------------------------------------------+

int init()

{

//---- indicateurs

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexArrow(0,233) ;

SetIndexBuffer(0,ExtMapBuffer1) ;

SetIndexEmptyValue(0,0.0) ;

SetIndexStyle(1,DRAW_ARROW) ;

SetIndexArrow(1,234) ;

SetIndexBuffer(1,ExtMapBuffer2) ;

SetIndexEmptyValue(1,0.0) ;

//----

retour(0) ;

}

//+------------------------------------------------------------------+

//| Fonction personnalisée de désinitialisation de l'indicateur |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted(),

limite ;

si(barres_comptées>0)

barres comptées-- ;

limit=Bars-counted_bars ;

if(limit>barsToProcess)

limite=barsToProcess ;

for(int i=0;i<limit;i++)

{

double rsi=iCustom(NULL,0, "rsi",barsToProcess,0,i) ;

double cci=iCustom(NULL,0, "cci",barsToProcess,0,i) ;

double cmo=iCustom(NULL,0, "cmo",barsToProcess,0,i) ;

if(rsi>60.0 && cci>150.0&&cmo>30.0)

ExtMapBuffer1=High+5*Point ;

sinon

ExtMapBuffer1=0.0 ;

si(rsi<10.0 && cci<-150.0&&cmo<-30.0)

ExtMapBuffer2=Low-5*Point ;

sinon

ExtMapBuffer2=0.0 ;

}

return(0) ;

}

 
anonimm:
Bonjour Mladen,

J'ai de nouveau besoin de votre aide. J'ai créé le code suivant pour un indicateur basé sur une flèche, mais il bloque le PC. Si cela peut éviter le décalage, pouvez-vous réécrire le code en utilisant les codes rsi, cci et cmo originaux dans l'indicateur sans fonction personnalisée.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Crimson

#property indicator_color2 RoyalBlue

//---- paramètres d'entrée

extern int barsToProcess=100 ;

//---- tampons

double ExtMapBuffer1[] ;

double ExtMapBuffer2[] ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé

//+------------------------------------------------------------------+

int init()

{

//---- indicateurs

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexArrow(0,233) ;

SetIndexBuffer(0,ExtMapBuffer1) ;

SetIndexEmptyValue(0,0.0) ;

SetIndexStyle(1,DRAW_ARROW) ;

SetIndexArrow(1,234) ;

SetIndexBuffer(1,ExtMapBuffer2) ;

SetIndexEmptyValue(1,0.0) ;

//----

retour(0) ;

}

//+------------------------------------------------------------------+

//| Fonction personnalisée de désinitialisation de l'indicateur |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted(),

limite ;

si(barres_comptées>0)

barres comptées-- ;

limit=Bars-counted_bars ;

if(limit>barsToProcess)

limite=barsToProcess ;

for(int i=0;i<limit;i++)

{

double rsi=iCustom(NULL,0, "rsi",barsToProcess,0,i) ;

double cci=iCustom(NULL,0, "cci",barsToProcess,0,i) ;

double cmo=iCustom(NULL,0, "cmo",barsToProcess,0,i) ;

if(rsi>60.0 && cci>150.0&&cmo>30.0)

ExtMapBuffer1=High+5*Point ;

sinon

ExtMapBuffer1=0.0 ;

si(rsi<10.0 && cci<-150.0&&cmo<-30.0)

ExtMapBuffer2=Low-5*Point ;

sinon

ExtMapBuffer2=0.0 ;

}

return(0) ;

}

Au lieu d'utiliser iCustom() pour le rsi et le cci, utilisez les fonctions intégrées.

Paramètres nécessaires pour RSI :

iCCI( [TD]string symbol, int timeframe, int period, int applied_price, int shift)
double iRSI([/TD]string symbol, int timeframe, int period, int applied_price, int shift)[/TD]

[/TR]

[/TABLE]

Paramètres nécessaires pour CCI :

[TABLE="class : docvar"]

[TR]

[TD]double

Et pour CMO, le premier paramètre est LastBarOnly et le second est CMO_Range, donc l'appel iCustom() devrait être quelque chose comme :

iCustom(NULL,0, "cmo",false,CMORange,0,i) ;

où CMORange serait un paramètre

Raison: