[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 160
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Si pendant le test visuel de l'EA 1.mq4 (ci-joint) je mets sur un graphique l'indicateur 3-cci-h3 (ci-joint), alors, comme il semblerait, avec exactement les mêmes paramètres de signaux cci calculés de l'indicateur et le cci réel (texte de l'objet dans le coin supérieur droit) ne coïncident pas.
POURQUOI ?
Pourquoi les alertes ne fonctionnent-elles pas dans cet indicateur ?
Code du conseiller expert :
Code indicateur :
//+------------------------------------------------------------------+
//| i-3CCI-h.mq4 |
//| johnfantom & kimIV |
//| http://www.kimiv.ru |
//| |
//| 02.01.2006 CCI avec 3 TF dans une bouteille. | |
//+------------------------------------------------------------------+
#property copyright "johnfantom & KimIV"
#lien de propriété "http://www.kimiv.ru"
#propriété indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_maximum 1.4
#property indicator_level1 0
#property indicator_minimum -1.2
//------- Paramètres de l'indicateur externe -------------------------------
extern int CCI_Period_0 = 14 ; // Période CCI pour la période en cours
extern int Level_0 = 100 ; // Niveau CCI pour le TF actuel
extern int TF_1 = 60 ; // Nombre de minutes dans la première période de temps.
extern int CCI_Period_1 = 14 ; // Période CCI pour le premier TF
extern int Level_1 = 100 ; // Niveau CCI pour le premier TF
extern int TF_2 = 240 ; // Nombre de minutes de la deuxième TF
extern int CCI_Period_2 = 14 ; // Période CCI pour le deuxième TF
extern int Level_2 = 100 ; // Niveau CCI pour le deuxième TF
extern int NumberOfBars = 1000 ; // Nombre de barres (0-All)
extern int ExtBars = 3 ;
int per ;
//------- Tampons indicateurs ------------------------------------------
double buf0[] ;
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé |
//+------------------------------------------------------------------+
void init() {
IndicateurDigits(1) ;
SetIndexBuffer(0, buf0) ;
SetIndexLabel(0, "i-3CCI-h") ;
SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 2) ;
SetIndexEmptyValue(0, 0) ;
}
//+------------------------------------------------------------------+
//| Fonction personnalisée de désinitialisation de l'indicateur |
//+------------------------------------------------------------------+
void deinit() {
Commentaire (") ;
}
//+------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé |
//+------------------------------------------------------------------+
void start() {
double cci0,cci1,cci2 ;
int nb1, nb2 ; count ;
int LoopBegin, sh ;
si (NumberOfBars==0) LoopBegin=Bars-1 ;
sinon LoopBegin=NumberOfBars-1 ;
LoopBegin=MathMin(Bars-1, LoopBegin) ;
count=IndicatorCounted() ;
for (sh=count ; sh>=0 ; sh--) {
nb1=iBarShift(NULL, TF_1, Time[sh+1], False) ;
nb2=iBarShift(NULL, TF_2, Time[sh+1], False) ;
cci0=iCCI(NULL, 0, CCI_Period_0, PRICE_CLOSE, sh+1) ;
cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1) ;
cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2) ;
/* double cci[3] ;
cci[0]=cci0 ;
cci[1]=cci1 ;
cci[2]=cci2 ;
string s1="cci-0 ***"+DoubleToStr(cci[0],3) ;
string s2="cci-1 ***"+DoubleToStr(cci[1],3) ;
string s3="cci-2 ***"+DoubleToStr(cci[2],3) ;
chaîne str[3] ;
str[0]=s1 ;
str[1]=s2 ;
str[2]=s3 ;
color col=Lime ;
for(int y=0;y<3;y++)
{ObjectCreate("textSignal "+y,OBJ_LABEL,0,0,0,0)
ObjectSet("textSignal "+y,OBJPROP_CORNER,1) ;
ObjectSet("textSignal "+y,OBJPROP_XDISTANCE,35-25) ;
ObjectSet("textSignal "+y,OBJPROP_YDISTANCE,y*(20)+20+8) ;
si(cci[y]>=0)col=Lime;else col=Red ;
si(cci[y]>Niveau_0) col=Aqua ;
if(cci[y]<-Level_0) col=DarkViolet ;
ObjectSetText("textSignal "+y,str[y],15, "Tahoma",col) ;
}
*/
if (cci0>Niveau_0 && cci1>Niveau_1 && cci2>Niveau_2) {buf0[sh]=1 ;
if (per != Time[0]) {per = Time[0] ;
si(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TimeYear(Time[sh]), ",
TimeDay(Time[sh]), ",
TimeMonth(Time[sh]), ",
TimeHour(Time[sh]), " :",
TimeMinute(Time[sh]), ",
"Achat");}}
if (cci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2) {buf0[sh]=-1 ;
if (per != Time[0]) {per = Time[0] ;
si(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TimeYear(Time[sh]), ",
TimeDay(Time[sh]), ",
TimeMonth(Time[sh]), ",
TimeHour(Time[sh]), " :",
TimeMinute(Time[sh])," ",
"Sale");}}
}
}
//+------------------------------------------------------------------+
Essayez-le vous-même. Je n'arrive pas du tout à le faire fonctionner. Ça ne marche pas du tout.
Les lignes sont censées être alignées. Mais en pratique, c'est un peu différent.
Pouvez-vous me dire ce qui ne va pas ?
J'ai créé une fonction récursive qui écrit une valeur dans le tampon.
Lorsqu'il est appelé depuis l'indicateur, il fonctionne bien, mais lorsque j'essaie de le mettre dans l'EA, la réponse est 0.
Quel peut être le problème ?
Pouvez-vous me dire ce qui ne va pas ?
J'ai créé une fonction récursive qui écrit une valeur dans le tampon.
Lorsqu'il est appelé depuis l'indicateur, il fonctionne bien, mais lorsque j'essaie de le mettre dans l'EA, la réponse est 0.
Quel peut être le problème ?
peut-être que la taille du tampon n'est pas définie !
J'ai trouvé où se situe le problème.
Il s'avère que IndicatorCounted donne 0 dans l'indicateur et -1 dans l'Expert Advisor (cette fonction a un contrôle d'exactitude - être >=0, donc elle n'est pas considérée dans l'Expert Advisor).
Quelle est la raison et comment réparer l'erreur ?
MT4 build 225, eurusd M1.
J'ai trouvé où se situe le problème.
Il s'avère que IndicatorCounted donne 0 dans l'indicateur et -1 dans l'Expert Advisor (cette fonction a un contrôle d'exactitude - être >=0, donc elle n'est pas considérée dans l'Expert Advisor).
Quelle est la raison et comment réparer l'erreur ?
MT4 build 225, eurusd M1.
https://docs.mql4.com/ru/customind
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
L'ouverture et la fermeture ont lieu sur des ticks différents. Et le conseiller expert ne se souvient plus de ce qui a été affecté à la variable t. Il doit être soit global, soit statique.
Une variable globale est définie en dehors des fonctions. Ou bien il peut être déclaré comme static int
L'ouverture et la fermeture ont lieu sur des ticks différents. Et le conseiller expert ne se souvient plus de ce qui a été affecté à la variable t. Il doit être soit global, soit statique.
Une variable globale est définie en dehors des fonctions. Ou bien il peut être déclaré comme static int
merci beaucoup, j'avais oublié ;))
Dans l'Indicateur que j'ai défini (pour ensuite les comparer avec Time[i]) :
Puis dans la boucle
Par conséquent, StrToTime(StartRange) et StrToTime(EndRange) produisent des zéros .
- Pourquoi et comment y remédier ?