Aide au codage - page 31

 

Travaillant sur un tableau multidimensionnel, je bloque sur une chose si simple...

Bonjour à tous,

J'essaie juste de récupérer une cellule d'un tableau dans une ligne d'écran (même résultat message Alert), il manque quelque chose c'est sûr, mais toute la journée dessus et je ne comprends pas pourquoi...

De l'aide serait la bienvenue ... ...

C'est ici :

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

//| !XTEST sur arrays.mq4 |

//| |

//| |

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

#property copyright ""

#property link ""

#property indicator_chart_window

extern int Coin = 1 ;

extern int X_Col = 700 ;

extern int Y_Ligne = 30 ;

extern string FontCar = "Arial" ;

extern int TailCar = 14 ;

extern color Couleur = Lime ;

extern int X = 1 ;

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

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

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

chaîne Tab1dim[2] ;

string Tab2dim[2,2] ;

chaîne Tab3dim[2,2,2] ;

string Tab4dim[2,2,2,2] ;

// 5eme Dimension de tableau non autorisée . int Tab5dim[20,20,20,80,2] ;

int init()

{

//---- indicateurs

string Tab1dim[2]={"tab1-c0","tab1C1"};

//----

return(0) ;

}

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

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

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

int deinit()

{

//----

ObjectDelete("R") ;

//----

return(0) ;

}

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

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

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

int start()

{

//----

Tab1dim[2]={"tab1-c0","tab1C1"};

string affich=Tab1dim[0] ;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

ObjectCreate ("A1", OBJ_LABEL, 0, 0, 0 ) ;

ObjectSet ("A1", OBJPROP_CORNER,Coin ) ;

ObjectSet ("A1", OBJPROP_XDISTANCE,X_Col ) ;

ObjectSet ("A1", OBJPROP_YDISTANCE,Y_Ligne ) ;

ObjectSetText("A1",affich,TailCar, FontCar , Couleur ) ;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

Alerte(affich) ;

//----

return(0) ;

}

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

Merci d'avance.

 

...

Essayez-le comme ceci( l'initialisation du tableau est faite différemment) :

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

//| !XTEST sur arrays.mq4 |

//| |

//| |

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

#property copyright ""

#property link ""

#property indicator_chart_window

extern int Coin = 1 ;

extern int X_Col = 10 ;

extern int Y_Ligne = 10 ;

extern string FontCar = "Arial" ;

extern int TailCar = 14 ;

extern color Couleur = Lime ;

extern int X = 1;

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

//| Custom indicator initialization function |

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

string Tab1dim[] = {"tab1-c0","tab1C1"};

string Tab2dim[2,2];

string Tab3dim[2,2,2];

string Tab4dim[2,2,2,2];

// 5eme Dimension de tableau non autorisée . int Tab5dim[20,20,20,80,2];

int init()

{

//---- indicators

string Tab1dim[2]={"tab1-c0","tab1C1"};

//----

return(0);

}

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

//| Custom indicator deinitialization function |

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

int deinit()

{

//----

ObjectDelete("A1");

//----

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

//----

string affich=Tab1dim[0];

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

ObjectCreate ("A1", OBJ_LABEL, 0, 0, 0 );

ObjectSet ("A1", OBJPROP_CORNER,Coin );

ObjectSet ("A1", OBJPROP_XDISTANCE,X_Col );

ObjectSet ("A1", OBJPROP_YDISTANCE,Y_Ligne );

ObjectSetText("A1",affich,TailCar, FontCar , Couleur );

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

//----

return(0);

}

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

Ilevna:
Bonjour messieurs,

J'essaie juste de récupérer une cellule d'un tableau dans une ligne d'écran ( même résultat message Alert), il manque quelque chose c'est sûr, mais toute la journée dessus et je ne comprends pas pourquoi....

De l'aide serait la bienvenue ... ...

C'est ici :

Merci d'avance.
 
mladen:
Essayez-le comme ceci (l'initialisation du tableau est faite différemment) :

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

//| !XTEST sur arrays.mq4 |

//| |**************

Merci beaucoup, ça marche bien, mais je ne comprends pas pourquoi c'est nécessaire, car normalement on pourrait déclarer, ou dans la portée globale, ou dans une fonction, quelque chose comme ce qu'ils ont écrit dans le manuel : double Tab2Dim[2*n-3] ; ou alors

int [] values =new int[3] ;

valeurs[0]=5 ;

values[1]=values[0]*2;

values[2]=values[1]*2;

mais c'est bien pour ma fin de journée, merci monsieur.

 

...

Vous pouvez partiellement surmonter ce problème avec la fonction ArrayResize() (de cette façon, vous pouvez avoir des tableaux de taille dynamique).

Le problème est que ArrayResize() ne fonctionne que pour les tableaux à une seule dimension et la première dimension d'un tableau (par exemple, si vous avez array[][2], vous pouvez le redimensionner avec ArrayResize() en quelque chose comme array[anySize][2]). Toute autre dimension (à partir de la deuxième dimension des tableaux) doit être d'une taille constante connue au moment de la compilation.

Ilevna:
Merci beaucoup, ça marche bien, mais je ne comprends pas pourquoi c'est nécessaire car normalement on pourrait déclarer, ou dans la portée globale, ou dans une fonction, quelque chose comme ce qu'ils ont écrit dans le manuel : double Tab2Dim[2*n-3] ; ou encore

int [] values =new int[3] ;

values[0]=5 ;

values[1]=values[0]*2;

values[2]=values[1]*2;

mais c'est bien pour ma fin de journée, merci monsieur.
 

Aide sur mon indicateur de bande

Bonjour à tous,

Après avoir essayé de nombreux indicateurs de bande, tels que jband, tmaband, etc. J'ai finalement pris la décision d'écrire mon propre indicateur de bande,

La pièce jointe que vous trouverez est mon indicateur de bande, mais quand EA l'appelle la ligne de bande basse donne un diviseur de zéro, j'ai regardé mon code il n'y a pas de diviseur de zéro là-dedans,

Si vous avez une idée ou une expérience comme celle-ci, s'il vous plaît laissez-moi aider à résoudre le problème.

Merci d'avance....

Dossiers :
aband.gif  20 kb
 

...

Sans la source (ou sans le code pour appeler l'indicateur personnalisé) il est impossible de dire quoi que ce soit. Si votre indicateur fonctionne, alors l'erreur se trouve dans votre EA.

kemal44:
Bonjour à tous,

Après avoir essayé de nombreux indicateurs de bande, tels que jband, tmaband, etc. J'ai finalement pris la décision d'écrire mon propre indicateur de bande,

Vous trouverez ci-joint mon indicateur de bande, mais lorsque l'EA l'appelle, la ligne de bande basse donne un diviseur nul, j'ai regardé mon code, il n'y a pas de diviseur nul,

Si vous avez une idée ou une expérience comme celle-ci, s'il vous plaît laissez-moi aider à résoudre le problème.

merci d'avance....
 

Besoin d'aide pour coder un EA de croisement de MA

Bonjour à tous,

Je me demande si quelqu'un pourrait m'aider à coder un EA de croisement de MA afin que je puisse l'utiliser lorsque je suis loin de l'ordinateur.

L'idée est la suivante.

Graphique 1 minute - 3 EMA et 8 SMA

Si la 3 EMA passe en dessous de la 8 SMA, vendre la paire de devises avec un TP et un SL prédéfinis dans les paramètres.

Si la 3 EMA passe au-dessus de la 8 SMA, achetez la paire de devises avec un TP et un SL prédéfinis selon les paramètres.

Je ne sais pas s'il est possible de coder une MA ea aussi simple mais j'apprécierais beaucoup si quelqu'un pouvait me donner un coup de main.

Merci d'avance !

 

...

Avez-vous consulté ce fil de discussion : https://www.mql5.com/en/forum/general?

jacktrader:
Bonjour à tous,

Je me demande si quelqu'un pourrait m'aider à coder un ea de croisement de MA afin que je puisse l'utiliser lorsque je suis loin de l'ordinateur.

L'idée est la suivante.

Graphique 1 minute - 3 EMA et 8 SMA

Si la 3 EMA passe en dessous de la 8 SMA, vendre la paire de devises avec un TP et un SL prédéfinis dans les paramètres.

Si la 3 EMA passe au-dessus de la 8 SMA, achetez la paire de devises avec un TP et un SL prédéfinis selon les paramètres.

Je ne sais pas s'il est possible de coder une MA ea aussi simple mais j'apprécierais beaucoup si quelqu'un pouvait me donner un coup de main.

Merci d'avance !
 
kemal44:
Bonjour à tous,

après avoir essayé de nombreux indicateurs de bande, tels que jband, tmaband, etc. J'ai finalement pris la décision d'écrire mon propre indicateur de bande,

Vous trouverez ci-joint mon indicateur de bande, mais lorsque EA l'appelle, la ligne de bande basse donne un diviseur de zéro, j'ai regardé mon code, il n'y a pas de diviseur de zéro,

Si vous avez une idée ou une expérience comme celle-ci, s'il vous plaît laissez-moi aider à résoudre le problème.

merci d'avance....

Voici le code pour la bande ind.

L'EA appelle le signal moyen et haut, mais la bande basse est le problème pour moi,

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

//| IndicatorPlan.mq4 |

//| Copyright © 2007, MetaQuotes Software Corp. |

//| Plate-forme de trading MetaTrader 5 / MetaQuotes Software Corp. |

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

#property copyright "Copyright © 2007, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net/"

//---- dessin de l'indicateur dans la fenêtre principale

#property indicator_chart_window

//---- nombre de tampons d'indicateur

#property indicator_buffers 3

//---- couleur de l'indicateur

#property indicator_color1 Gold

#property indicator_color2 Magenta

#property indicator_color3 BlueViolet

//---- PARAMÈTRES D'ENTRÉE DE L'INDICATEUR

extern int MBand_Period = 15 ;

extern int UpBand_Period = 15 ;

extern int DnBand_Period = 15 ;

extern int ABand_Timeframe =15 ;

extern int shift =0 ;

//---- tampons d'indicateurs

double Ind_Buffer0[] ;

double Ind_Buffer1[] ;

double Ind_Buffer2[] ;

double Ind_Buffer3[] ;

double Ind_Buffer4[] ;

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

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

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

int init()

{

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)) ;

IndicatorShortName("ABand "+ABand_Timeframe) ;

//---- définissant le style d'exécution du graphique

SetIndexStyle(0, DRAW_LINE) ;

SetIndexLabel(0, "MBand "+MBand_Period) ;

SetIndexStyle(2, DRAW_LINE) ;

SetIndexLabel(2, "UpBand "+UpBand_Period) ;

SetIndexStyle(1, DRAW_LINE) ;

SetIndexLabel(1, "DnBand "+DnBand_Period) ;

//---- 3 tampons indicateurs sont utilisés pour le calcul

IndicatorBuffers(5) ;

SetIndexBuffer(0, Ind_Buffer0) ;

SetIndexBuffer(1, Ind_Buffer1) ;

SetIndexBuffer(2, Ind_Buffer2) ;

SetIndexBuffer(3, Ind_Buffer3) ;

SetIndexBuffer(4, Ind_Buffer4) ;

//---- óñòàíîâêà íîìåğà áàğà, íà÷èíàÿ ñ êîòîğîãî áóäåò îòğèñîâûâàòüñÿ èíäèêàòîğ

//---- Óñòàíîâêà ôîğìàòà òî÷íîñòè îòîáğàæåíèÿ èíäèêàòîğà

IndicatorDigits(Digits) ;

//---- ğàçìåğ êàíàëà â ïóíêòàõ

//---- fin de l'initialisation

return(0) ;

}

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

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

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

int start()

{

//---- Ïğîâåğêà êîëè÷åñòâà áàğîâ íà äîñòàòî÷íîñòü äëÿ äàëüíåéøåãî ğàñ÷¸òà

if(Bars < MBand_Period + UpBand_Period + DnBand_Period)

return(0) ;

//---- İÌÓËßÖÈß ÈÍÄÈÊÀÒÎĞÍÛÕ ÁÓÔÅĞÎÂ

if(ArraySize(Ind_Buffer0) < Bars)

{

ArraySetAsSeries(Ind_Buffer0, false) ;

ArraySetAsSeries(Ind_Buffer1, false) ;

ArraySetAsSeries(Ind_Buffer2, false) ;

ArraySetAsSeries(Ind_Buffer3, false) ;

ArraySetAsSeries(Ind_Buffer4, false) ;

//----

ArrayResize(Ind_Buffer0, Bars) ;

ArrayResize(Ind_Buffer1, Bars) ;

ArrayResize(Ind_Buffer2, Bars) ;

ArrayResize(Ind_Buffer3, Bars) ;

ArrayResize(Ind_Buffer4, Bars) ;

//----

ArraySetAsSeries(Ind_Buffer0, true) ;

ArraySetAsSeries(Ind_Buffer1, true) ;

ArraySetAsSeries(Ind_Buffer2, true) ;

ArraySetAsSeries(Ind_Buffer3, true) ;

ArraySetAsSeries(Ind_Buffer4, true) ;

}

//----+ ÂÂÅÄÅÍÈÅ ÑÒÀÒÈ×ÅÑÊÎÉ ÖÅËÎÉ ÏÅĞÅÌÅÍÍÎÉ ÏÀÌßÒÈ

static int IndCounted ;

//----+ Insertion de variables à virgule flottante

double Resalt0, Resalt1, Resalt2 ;

double prix ;

//----+ Insertion de variables entières et obtention de barres calculées

int limite, MaxBar,bar, counted_bars = IndicatorCounted() ;

int i,k ;

//---- vérification d'éventuelles erreurs

if(counted_bars < 0)

return(-1) ;

//---- la dernière barre calculée doit être recalculée

if(counted_bars > 0)

counted_bars-- ;

//---- définissant le numéro de la barre la plus ancienne,

// à partir duquel les nouvelles barres seront recalculées.

limit = Bars - counted_bars - 1 ;

//---- définissant le numéro de la barre la plus ancienne,

// à partir duquel les nouvelles barres seront recalculées.

MaxBar = Bars - 1 - (MBand_Period + UpBand_Period + DnBand_Period) ;

//---- initialisation de zéro

if(limite > MaxBar)

{

limit = MaxBar ;

for(bar = Bars - 1 ; bar >= MaxBar ; bar--)

{

Ind_Buffer0 = 0.0 ;

Ind_Buffer1 = 0.0 ;

Ind_Buffer2 = 0.0 ;

Ind_Buffer3 = 0.0 ;

Ind_Buffer4 = 0.0 ;

}

}

//----+ LE PREMIER CYCLE DE CALCUL DE L'INDICATEUR

i=Bars-DnBand_Period ;

if(counted_bars>DnBand_Period) i=Bars-counted_bars-1 ;

while(i>=0)

{

i=Bars-DnBand_Period ;

if(counted_bars>DnBand_Period) i=Bars-counted_bars-1 ;

alors que(i>=0)

{

double min=1000000 ;

k=i+DnBand_Period-1 ;

alors que(k>=i)

{

price=Resalt1[k] ;

if(min>price) min=price ;

k-- ;

}

Ind_Buffer1=min ;

i-- ;

}

}

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

{

// Ici code de calcul de la variable Resalt0

// basé sur les valeurs du tampon UpBand[]

// et de la variable externe0

Ind_Buffer3 =iMAOnArray(Ind_Buffer1,limit,DnBand_Period ,shift, ma_method,i) ;

}

//----+ LE DEUXIÈME CYCLE DE CALCUL DE L'INDICATEUR

{

i=Bars-UpBand_Period ;

if(counted_bars>UpBand_Period) i=Bars-counted_bars-1 ;

while(i>=0)

{

double max=-1000000 ;

k=i+Période de la bande supérieure-1 ;

alors que(k>=i)

{

price=Resalt2[k] ;

si(max<prix) max=prix ;

k-- ;

}

Ind_Buffer2=max ;

i-- ;

}

}

//---- ligne de signal est une simple moyenne de movimg

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

{

// Ici code de calcul de la variable Resalt0

// basé sur les valeurs du buffer UpBand[]

// et de la variable externe0

Ind_Buffer4 =iMAOnArray(Ind_Buffer2,limit,UpBand_Period,shift, ma_method,i) ;

}

//----+ LE CYCLE PRINCIPAL DE CALCUL DE L'INDICATEUR

//---- ligne de signal est une moyenne mobile simple

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

{

// Ici code de calcul de la variable Resalt0

// basé sur les valeurs du buffer UpBand[]

// et de la variable externe0

Ind_Buffer0 =(Ind_Buffer2+Ind_Buffer1)/2 ;

}

return(0) ;

}

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

 

...

Pouvez-vous nous dire comment vous utilisez l'appel iCustom() ?

kemal44:
Voici le code pour la bande ind.

L'EA appelle le signal de milieu et de haut, mais la bande basse est le problème pour moi,

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

//| IndicatorPlan.mq4 |

//| Copyright © 2007, MetaQuotes Software Corp. |

//| Plate-forme de trading MetaTrader 5 / MetaQuotes Software Corp. |

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

#property copyright "Copyright © 2007, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net/"

//---- dessin de l'indicateur dans la fenêtre principale

#property indicator_chart_window

//---- nombre de tampons d'indicateur

#property indicator_buffers 3

//---- couleur de l'indicateur

#property indicator_color1 Gold

#property indicator_color2 Magenta

#property indicator_color3 BlueViolet

//---- PARAMÈTRES D'ENTRÉE DE L'INDICATEUR

extern int MBand_Period = 15 ;

extern int UpBand_Period = 15 ;

extern int DnBand_Period = 15 ;

extern int ABand_Timeframe =15 ;

extern int shift =0 ;

//---- tampons d'indicateurs

double Ind_Buffer0[] ;

double Ind_Buffer1[] ;

double Ind_Buffer2[] ;

double Ind_Buffer3[] ;

double Ind_Buffer4[] ;

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

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

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

int init()

{

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)) ;

IndicatorShortName("ABand "+ABand_Timeframe) ;

//---- définissant le style d'exécution du graphique

SetIndexStyle(0, DRAW_LINE) ;

SetIndexLabel(0, "MBand "+MBand_Period) ;

SetIndexStyle(2, DRAW_LINE) ;

SetIndexLabel(2, "UpBand "+UpBand_Period) ;

SetIndexStyle(1, DRAW_LINE) ;

SetIndexLabel(1, "DnBand "+DnBand_Period) ;

//---- 3 tampons indicateurs sont utilisés pour le calcul

IndicatorBuffers(5) ;

SetIndexBuffer(0, Ind_Buffer0) ;

SetIndexBuffer(1, Ind_Buffer1) ;

SetIndexBuffer(2, Ind_Buffer2) ;

SetIndexBuffer(3, Ind_Buffer3) ;

SetIndexBuffer(4, Ind_Buffer4) ;

//---- óñòàíîâêà íîìåğà áàğà, íà÷èíàÿ ñ êîòîğîãî áóäåò îòğèñîâûâàòüñÿ èíäèêàòîğ

//---- Óñòàíîâêà ôîğìàòà òî÷íîñòè îòîáğàæåíèÿ èíäèêàòîğà

IndicatorDigits(Digits) ;

//---- ğàçìåğ êàíàëà â ïóíêòàõ

//---- fin de l'initialisation

return(0) ;

}

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

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

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

int start()

{

//---- Ïğîâåğêà êîëè÷åñòâà áàğîâ íà äîñòàòî÷íîñòü äëÿ äàëüíåéøåãî ğàñ÷¸òà

if(Bars < MBand_Period + UpBand_Period + DnBand_Period)

return(0) ;

//---- İÌÓËßÖÈß ÈÍÄÈÊÀÒÎĞÍÛÕ ÁÓÔÅĞÎÂ

if(ArraySize(Ind_Buffer0) < Bars)

{

ArraySetAsSeries(Ind_Buffer0, false) ;

ArraySetAsSeries(Ind_Buffer1, false) ;

ArraySetAsSeries(Ind_Buffer2, false) ;

ArraySetAsSeries(Ind_Buffer3, false) ;

ArraySetAsSeries(Ind_Buffer4, false) ;

//----

ArrayResize(Ind_Buffer0, Bars) ;

ArrayResize(Ind_Buffer1, Bars) ;

ArrayResize(Ind_Buffer2, Bars) ;

ArrayResize(Ind_Buffer3, Bars) ;

ArrayResize(Ind_Buffer4, Bars) ;

//----

ArraySetAsSeries(Ind_Buffer0, true) ;

ArraySetAsSeries(Ind_Buffer1, true) ;

ArraySetAsSeries(Ind_Buffer2, true) ;

ArraySetAsSeries(Ind_Buffer3, true) ;

ArraySetAsSeries(Ind_Buffer4, true) ;

}

//----+ ÂÂÅÄÅÍÈÅ ÑÒÀÒÈ×ÅÑÊÎÉ ÖÅËÎÉ ÏÅĞÅÌÅÍÍÎÉ ÏÀÌßÒÈ

static int IndCounted ;

//----+ Insertion de variables à virgule flottante

double Resalt0, Resalt1, Resalt2 ;

double prix ;

//----+ Insertion de variables entières et obtention de barres calculées

int limite, MaxBar,bar, counted_bars = IndicatorCounted() ;

int i,k ;

//---- vérification d'éventuelles erreurs

if(counted_bars < 0)

return(-1) ;

//---- la dernière barre calculée doit être recalculée

if(counted_bars > 0)

counted_bars-- ;

//---- définissant le numéro de la barre la plus ancienne,

// à partir duquel les nouvelles barres seront recalculées.

limit = Bars - counted_bars - 1 ;

//---- définissant le numéro de la barre la plus ancienne,

// à partir duquel les nouvelles barres seront recalculées.

MaxBar = Bars - 1 - (MBand_Period + UpBand_Period + DnBand_Period) ;

//---- initialisation de zéro

if(limite > MaxBar)

{

limit = MaxBar ;

for(bar = Bars - 1 ; bar >= MaxBar ; bar--)

{

Ind_Buffer0 = 0.0 ;

Ind_Buffer1 = 0.0 ;

Ind_Buffer2 = 0.0 ;

Ind_Buffer3 = 0.0 ;

Ind_Buffer4 = 0.0 ;

}

}

//----+ LE PREMIER CYCLE DE CALCUL DE L'INDICATEUR

i=Bars-DnBand_Period ;

if(counted_bars>DnBand_Period) i=Bars-counted_bars-1 ;

while(i>=0)

{

i=Bars-DnBand_Period ;

if(counted_bars>DnBand_Period) i=Bars-counted_bars-1 ;

alors que(i>=0)

{

double min=1000000 ;

k=i+DnBand_Period-1 ;

alors que(k>=i)

{

price=Resalt1[k] ;

if(min>price) min=price ;

k-- ;

}

Ind_Buffer1=min ;

i-- ;

}

}

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

{

// Ici code de calcul de la variable Resalt0

// basé sur les valeurs du tampon UpBand[]

// et de la variable externe0

Ind_Buffer3 =iMAOnArray(Ind_Buffer1,limit,DnBand_Period ,shift, ma_method,i) ;

}

//----+ LE DEUXIÈME CYCLE DE CALCUL DE L'INDICATEUR

{

i=Bars-UpBand_Period ;

if(counted_bars>UpBand_Period) i=Bars-counted_bars-1 ;

while(i>=0)

{

double max=-1000000 ;

k=i+Période de la bande supérieure-1 ;

alors que(k>=i)

{

price=Resalt2[k] ;

si(max<prix) max=prix ;

k-- ;

}

Ind_Buffer2=max ;

i-- ;

}

}

//---- ligne de signal est une simple moyenne de movimg

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

{

// Ici code de calcul de la variable Resalt0

// basé sur les valeurs du buffer UpBand[]

// et de la variable externe0

Ind_Buffer4 =iMAOnArray(Ind_Buffer2,limit,UpBand_Period,shift, ma_method,i) ;

}

//----+ LE CYCLE PRINCIPAL DE CALCUL DE L'INDICATEUR

//---- ligne de signal est une moyenne mobile simple

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

{

// Ici code de calcul de la variable Resalt0

// basé sur les valeurs du buffer UpBand[]

// et de la variable externe0

Ind_Buffer0 =(Ind_Buffer2+Ind_Buffer1)/2 ;

}

return(0) ;

}

//+------------------------------------------------------------------+
Raison: