J'ai décidé de faire un EA pour moi-même sur la base d'un exemple du manuel mql4. Je m'amuse avec depuis une semaine maintenant, mais ça me donne toujours une sorte d'erreur.
Veuillez vérifier ce qui ne va pas, peut-être que quelque chose doit être modifié ou supprimé en plus des parenthèses.
Erreurs :
'}' - fin inattendue du programme expert.mq4 218 3
'{' - parenthèses non équilibrées expert.mq4 23 2
Essayez de traduire ce qui est écrit dans les erreurs. Je pense que c'est la façon la plus simple de trouver la cause de l'erreur.
Qu'est-ce que ça fait au départ ?
#property indicator_level1 20// Задаём верхний уровень #property indicator_level2 80// Задаём нижний уровень
Vous avez un conseiller expert, pas un indicateur.
DPeriod, // "Redline" индикатора StochRSI.mq4
DPeriod=Bid; // Запрашивем значение "Redline"
pourquoi n'est-il pas défini comme un type ?
return; // Выход из start()
Où est la parenthèse fermante ?
};
Qu'est-ce que c'est que cette nouvelle ?
Montrez-moi où c'est écrit dans l'exemple ?
bool Ans =false, // Ответ сервера после закрытияbool Cls_B=false,
pourquoi y a-t-il une virgule à la fin et non un point-virgule ? pourquoi écrire deux fois la même chose ?
Tu mets une virgule, écris-le comme ça :
bool Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false;// Критерий для открытия Sell
Qu'est-ce que c'est ?
[1]Close
Je n'ai pas cherché plus loin, j'étais fatigué,
Alors ne blâmez pas les erreurs, elles sont dues à votre inattention. Vous devez relire l'aide, et regarder la vidéo pour lire un article sur la façon de programmer dans ce langage.
J'ai corrigé les erreurs... Mais pendant le test, il est indiqué "Lesindicateurs personnalisés ne peuvent pas être vérifiés".
J'ai d'abord douté du tampon indicateur spécifié, mais après avoir spécifié les deux à tour de rôle, l'erreur n'a toujours pas disparu. Est-ce que j'ai encore foiré quelque part ?
Aide du gourou de la programmation). J'étais en train de tester un EA et je pense que j'ai réussi) dès que j'allume le testeur EA et que mon bot commence à fonctionner le testeur se fige et reste en place pendant un très long moment, qu'est-ce qui peut être dans le code qui ralentit le testeur ?
miha91: Aide du gourou de la programmation). J'étais en train de tester un EA et je pense que j'ai réussi) dès que j'allume le testeur EA et que mon bot commence à fonctionner le testeur se fige et reste en place pendant un très long moment, qu'est-ce qui peut être dans le code qui ralentit le testeur ?
J'ai aussi quelque chose qui bruisse sous la baignoire ! Qu'est-ce que ça peut être ?
J'essaie de déterminer un point sur la ligne après sa modification, cela fonctionne bien à toutes les périodes, mais à 1 et 4 heures il y a périodiquement une erreur de 100-200 points, comment faire ?
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
SetTLine(Red,"LineAlert",Time[15],High[15],0,High[0]+15*Point,0,0,1);
//---return(INIT_SUCCEEDED);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Уравнение прямой. |//| Вычисляет значение Y для X в точке пересечения с прямой. |//+----------------------------------------------------------------------------+//| Параметры: |//| x1,y1 - координаты первой точки, |//| x2,y2 - координаты второй точки, |//| x - значение, для которого вычислить Y |//+----------------------------------------------------------------------------+double EquationDirect(double x1,double y1,double x2,double y2,double x)
{
double tk;
if(x2==x1) return(y1);
tk=(y2-y1)/(x2-x1)*(x-x1)+y1;
return(NormalizeDouble(tk,Digits));
}
//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Установка объекта OBJ_TREND трендовая линия |//+----------------------------------------------------------------------------+//| Параметры: |//| cl - цвет линии |//| nm - наименование ( "" - время открытия текущего бара) |//| t1 - время открытия бара ( 0 - Time[10] |//| p1 - ценовой уровень ( 0 - Low[10]) |//| t2 - время открытия бара ( 0 - текущий бар) |//| p2 - ценовой уровень ( 0 - Bid) |//| ry - луч (False - по умолчанию) |//| st - стиль линии ( 0 - простая линия) |//| wd - ширина линии ( 1 - по умолчанию) |//+----------------------------------------------------------------------------+void SetTLine(color cl,string nm="",
datetime t1=0,double p1=0,datetime t2=0,double p2=0,
bool ry=False,int st=0,int wd=1)
{
if(nm=="") nm=DoubleToStr(Time[0],0);
if(t1<=0) t1=Time[10];
if(p1<=0) p1=Low[10];
if(t2<=0) t2=Time[0];
if(p2<=0) p2=Bid;
if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_TREND,0,0,0,0,0);
ObjectSet(nm,OBJPROP_TIME1,t1);
ObjectSet(nm,OBJPROP_PRICE1,p1);
ObjectSet(nm,OBJPROP_TIME2,t2);
ObjectSet(nm,OBJPROP_PRICE2,p2);
ObjectSet(nm,OBJPROP_COLOR,cl);
ObjectSet(nm,OBJPROP_RAY,ry);
ObjectSet(nm,OBJPROP_STYLE,st);
ObjectSet(nm,OBJPROP_WIDTH,wd);
}
//+----------------------------------------------------------------------------+//| Параметры: |//| cd - код значка |//| cl - цвет значка |//| nm - наименование ("" - время открытия текущего бара) |//| t1 - время открытия бара (0 - текущий бар) |//| p1 - ценовой уровень (0 - Bid) |//| sz - размер значка (0 - по умолчанию) |//+----------------------------------------------------------------------------+void SetArrow(int cd,color cl,
string nm="",datetime t1=0,double p1=0,int sz=0)
{
if(nm=="") nm=DoubleToStr(Time[0],0);
if(t1<=0) t1=Time[0];
if(p1<=0) p1=Bid;
if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_ARROW,0,0,0);
ObjectSet(nm,OBJPROP_TIME1,t1);
ObjectSet(nm,OBJPROP_PRICE1,p1);
ObjectSet(nm,OBJPROP_ARROWCODE,cd);
ObjectSet(nm,OBJPROP_COLOR,cl);
ObjectSet(nm,OBJPROP_WIDTH,sz);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
int d=0;
int X_1,X_2,X3d;
double Y_1,Y_2,Y3d;
staticint _time_waiting=0;
staticint i;
//---
X_1= ObjectGet("LineAlert",OBJPROP_TIME1);
X_2 = ObjectGet("LineAlert", OBJPROP_TIME2);
Y_1 = ObjectGet("LineAlert", OBJPROP_PRICE1);
Y_2 = ObjectGet("LineAlert", OBJPROP_PRICE2);
SetArrow(6,Orange,"X1",X_1,Y_1,3);
SetArrow(6,Orange,"X2",X_2,Y_2,3);
X3d=Time[0];Y3d=EquationDirect(X_1,Y_1,X_2,Y_2,X3d);
SetArrow(6,Orange,"X",X3d,Y3d,3);
}
//+------------------------------------------------------------------+
J'essaie de déterminer un point sur la ligne après sa modification, à toutes les périodes cela fonctionne normalement, mais à 1 et 4 heures périodiquement il y a une erreur de 100-200 points, comment la traiter ?
Je ne l'ai pas essayé.
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
SetTLine(Red,"LineAlert",Time[15],High[15],0,High[0]+15*Point,0,0,1);
//---return(INIT_SUCCEEDED);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Уравнение прямой. |//| Вычисляет значение Y для X в точке пересечения с прямой. |//+----------------------------------------------------------------------------+//| Параметры: |//| x1,y1 - координаты первой точки, |//| x2,y2 - координаты второй точки, |//| x - значение, для которого вычислить Y |//+----------------------------------------------------------------------------+double EquationDirect(double x1,double y1,double x2,double y2,double x)
{
double tk;
if(x2==x1) return(y1);
tk=(y2-y1)/(x2-x1)*(x-x1)+y1;
return(NormalizeDouble(tk,Digits));
}
//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Установка объекта OBJ_TREND трендовая линия |//+----------------------------------------------------------------------------+//| Параметры: |//| cl - цвет линии |//| nm - наименование ( "" - время открытия текущего бара) |//| t1 - время открытия бара ( 0 - Time[10] |//| p1 - ценовой уровень ( 0 - Low[10]) |//| t2 - время открытия бара ( 0 - текущий бар) |//| p2 - ценовой уровень ( 0 - Bid) |//| ry - луч (False - по умолчанию) |//| st - стиль линии ( 0 - простая линия) |//| wd - ширина линии ( 1 - по умолчанию) |//+----------------------------------------------------------------------------+void SetTLine(color cl,string nm="",
datetime t1=0,double p1=0,datetime t2=0,double p2=0,
bool ry=False,int st=0,int wd=1)
{
if(nm=="") nm=DoubleToStr(Time[0],0);
if(t1<=0) t1=Time[10];
if(p1<=0) p1=Low[10];
if(t2<=0) t2=Time[0];
if(p2<=0) p2=Bid;
if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_TREND,0,0,0,0,0);
ObjectSet(nm,OBJPROP_TIME1,t1);
ObjectSet(nm,OBJPROP_PRICE1,p1);
ObjectSet(nm,OBJPROP_TIME2,t2);
ObjectSet(nm,OBJPROP_PRICE2,p2);
ObjectSet(nm,OBJPROP_COLOR,cl);
ObjectSet(nm,OBJPROP_RAY,ry);
ObjectSet(nm,OBJPROP_STYLE,st);
ObjectSet(nm,OBJPROP_WIDTH,wd);
}
//+----------------------------------------------------------------------------+//| Параметры: |//| cd - код значка |//| cl - цвет значка |//| nm - наименование ("" - время открытия текущего бара) |//| t1 - время открытия бара (0 - текущий бар) |//| p1 - ценовой уровень (0 - Bid) |//| sz - размер значка (0 - по умолчанию) |//+----------------------------------------------------------------------------+void SetArrow(int cd,color cl,
string nm="",datetime t1=0,double p1=0,int sz=0)
{
if(nm=="") nm=DoubleToStr(Time[0],0);
if(t1<=0) t1=Time[0];
if(p1<=0) p1=Bid;
if(ObjectFind(nm)<0) ObjectCreate(nm,OBJ_ARROW,0,0,0);
ObjectSet(nm,OBJPROP_TIME1,t1);
ObjectSet(nm,OBJPROP_PRICE1,p1);
ObjectSet(nm,OBJPROP_ARROWCODE,cd);
ObjectSet(nm,OBJPROP_COLOR,cl);
ObjectSet(nm,OBJPROP_WIDTH,sz);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
int d=0;
int X_1,X_2,X3d;
double Y_1,Y_2,Y3d;
staticint _time_waiting=0;
staticint i;
//---
X_1= ObjectGet("LineAlert",OBJPROP_TIME1);
X_2 = ObjectGet("LineAlert", OBJPROP_TIME2);
Y_1 = ObjectGet("LineAlert", OBJPROP_PRICE1);
Y_2 = ObjectGet("LineAlert", OBJPROP_PRICE2);
SetArrow(6,Orange,"X1",X_1,Y_1,3);
SetArrow(6,Orange,"X2",X_2,Y_2,3);
X3d=Time[0];Y3d=ObjectGetValueByShift("LineAlert", 0);
SetArrow(6,Orange,"X",X3d,Y3d,3);
}
//+------------------------------------------------------------------+
Question aux personnes compétentes - le problème s'est posé récemment : sur le signal UPU au courrier a cessé de venir, avant tout était normal, maintenant dans le journal du terminal écrit pendant le test : a été sant, mais le courrier ne vient rien. J'ai redémarré l'UPU, le terminal aussi, aucun résultat.
Aidez-nous à lutter contre les bugs !
J'ai décidé de faire un EA pour moi-même sur la base d'un exemple du manuel mql4. Je m'amuse avec depuis une semaine maintenant, mais ça me donne toujours une sorte d'erreur.
Veuillez vérifier ce qui ne va pas, peut-être que quelque chose doit être modifié ou supprimé en plus des parenthèses.
Erreurs :
'}' - fin inattendue du programme expert.mq4 218 3
'{' - parenthèses non équilibrées expert.mq4 23 2
Essayez de traduire ce qui est écrit dans les erreurs. Je pense que c'est la façon la plus simple de trouver la cause de l'erreur.
Qu'est-ce que ça fait au départ ?
Vous avez un conseiller expert, pas un indicateur.
pourquoi n'est-il pas défini comme un type ?
Où est la parenthèse fermante ?
Qu'est-ce que c'est que cette nouvelle ?
Montrez-moi où c'est écrit dans l'exemple ?
pourquoi y a-t-il une virgule à la fin et non un point-virgule ? pourquoi écrire deux fois la même chose ?
Tu mets une virgule, écris-le comme ça :
Qu'est-ce que c'est ?
Je n'ai pas cherché plus loin, j'étais fatigué,
Alors ne blâmez pas les erreurs, elles sont dues à votre inattention. Vous devez relire l'aide, et regarder la vidéo pour lire un article sur la façon de programmer dans ce langage.
J'ai corrigé les erreurs... Mais pendant le test, il est indiqué "Lesindicateurs personnalisés ne peuvent pas être vérifiés".
J'ai d'abord douté du tampon indicateur spécifié, mais après avoir spécifié les deux à tour de rôle, l'erreur n'a toujours pas disparu. Est-ce que j'ai encore foiré quelque part ?
Aide du gourou de la programmation). J'étais en train de tester un EA et je pense que j'ai réussi) dès que j'allume le testeur EA et que mon bot commence à fonctionner le testeur se fige et reste en place pendant un très long moment, qu'est-ce qui peut être dans le code qui ralentit le testeur ?
J'essaie de déterminer un point sur la ligne après sa modification, cela fonctionne bien à toutes les périodes, mais à 1 et 4 heures il y a périodiquement une erreur de 100-200 points, comment faire ?
J'essaie de déterminer un point sur la ligne après sa modification, à toutes les périodes cela fonctionne normalement, mais à 1 et 4 heures périodiquement il y a une erreur de 100-200 points, comment la traiter ?
Je ne l'ai pas essayé.
Essayez, je n'ai pas essayé.
Alternativement, vous pourriez faire comme ceci
En termes modernes
Alternativement, vous pourriez faire comme ceci
Dans le langage moderne.
Ça a l'air de marcher, je vais continuer à regarder.
Merci !