Ho deciso di fare un EA per me stesso sulla base di un esempio dal manuale mql4. Ci sto giocando da una settimana, ma mi dà sempre qualche tipo di errore.
Si prega di controllare cosa può essere sbagliato, forse qualcosa dovrebbe essere cambiato o rimosso oltre alle parentesi.
Errori:
'}' - fine inaspettata del programma expert.mq4 218 3
'{' - parentesi sbilanciate expert.mq4 23 2
Provate a tradurre ciò che è scritto negli errori. Penso che questo sia il modo più semplice per trovare la causa dell'errore
Cosa fa questo all'inizio?
#property indicator_level1 20// Задаём верхний уровень #property indicator_level2 80// Задаём нижний уровень
Hai un Expert Advisor, non un indicatore.
DPeriod, // "Redline" индикатора StochRSI.mq4
DPeriod=Bid; // Запрашивем значение "Redline"
perché non è impostato come tipo?
return; // Выход из start()
dov'è la parentesi di chiusura?
};
Che tipo di notizia è questa?
Mi mostri dove è scritto nell'esempio?
bool Ans =false, // Ответ сервера после закрытияbool Cls_B=false,
perché c'è una virgola alla fine e non un punto e virgola? perché scrivere due volte la stessa cosa?
Se metti una virgola, scrivi così:
bool Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false;// Критерий для открытия Sell
Che cos'è?
[1]Close
Non ho cercato oltre, mi sono stancato,
Quindi non date la colpa agli errori, sono dovuti alla vostra disattenzione. Devi rileggere la guida e guardare il video per leggere un articolo su come programmare in questo linguaggio.
corretto gli errori... Ma durante il test dice "Gliindicatori personalizzati non possono essere testati".
All'inizio ho dubitato del buffer dell'indicatore specificato, ma avendo specificato entrambi a turno, l'errore non è ancora scomparso. Ho di nuovo sbagliato da qualche parte?
Aiuto del Guru della programmazione). Stavo testando un EA e credo di avercela fatta) appena accendo il tester EA e il mio bot inizia a lavorare il tester si blocca e rimane in posizione per un tempo molto lungo, cosa può esserci nel codice che rallenta il tester?
miha91: Aiuto del Guru della programmazione). Stavo testando un EA e credo di avercela fatta) appena accendo il tester e il mio bot inizia a lavorare il tester si blocca e rimane fermo per un tempo molto lungo, cosa può esserci nel codice che rallenta il tester?
Ho anche qualcosa sotto la vasca da bagno che fruscia! Cosa potrebbe essere?
Sto cercando di determinare un punto sulla linea dopo la sua modifica, funziona bene in tutti i periodi, ma a ore 1 e 4 c'è periodicamente un errore di 100-200 punti, come affrontarlo?
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Sto cercando di determinare un punto sulla linea dopo la sua modifica, in tutti i periodi funziona normalmente, ma a ore 1 e 4 periodicamente c'è un errore di 100-200 punti, come affrontarlo?
Non l'ho provato.
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Domanda a persone competenti-problema sorto di recente: sul segnale UPU alla posta ha cessato di venire, prima tutto era normale, ora nel log del terminale scrive durante il test: è stato sant, ma la posta non viene nulla. Ho riavviato l'UPU e anche il terminale, nessun risultato.
Aiuto con gli insetti!
Ho deciso di fare un EA per me stesso sulla base di un esempio dal manuale mql4. Ci sto giocando da una settimana, ma mi dà sempre qualche tipo di errore.
Si prega di controllare cosa può essere sbagliato, forse qualcosa dovrebbe essere cambiato o rimosso oltre alle parentesi.
Errori:
'}' - fine inaspettata del programma expert.mq4 218 3
'{' - parentesi sbilanciate expert.mq4 23 2
Provate a tradurre ciò che è scritto negli errori. Penso che questo sia il modo più semplice per trovare la causa dell'errore
Cosa fa questo all'inizio?
Hai un Expert Advisor, non un indicatore.
perché non è impostato come tipo?
dov'è la parentesi di chiusura?
Che tipo di notizia è questa?
Mi mostri dove è scritto nell'esempio?
perché c'è una virgola alla fine e non un punto e virgola? perché scrivere due volte la stessa cosa?
Se metti una virgola, scrivi così:
Che cos'è?
Non ho cercato oltre, mi sono stancato,
Quindi non date la colpa agli errori, sono dovuti alla vostra disattenzione. Devi rileggere la guida e guardare il video per leggere un articolo su come programmare in questo linguaggio.
corretto gli errori... Ma durante il test dice "Gliindicatori personalizzati non possono essere testati".
All'inizio ho dubitato del buffer dell'indicatore specificato, ma avendo specificato entrambi a turno, l'errore non è ancora scomparso. Ho di nuovo sbagliato da qualche parte?
Aiuto del Guru della programmazione). Stavo testando un EA e credo di avercela fatta) appena accendo il tester e il mio bot inizia a lavorare il tester si blocca e rimane fermo per un tempo molto lungo, cosa può esserci nel codice che rallenta il tester?
Sto cercando di determinare un punto sulla linea dopo la sua modifica, funziona bene in tutti i periodi, ma a ore 1 e 4 c'è periodicamente un errore di 100-200 punti, come affrontarlo?
Sto cercando di determinare un punto sulla linea dopo la sua modifica, in tutti i periodi funziona normalmente, ma a ore 1 e 4 periodicamente c'è un errore di 100-200 punti, come affrontarlo?
Non l'ho provato.
Prova, non ho provato.
In alternativa, potresti fare così
In termini moderni
In alternativa, potresti fare così
Nel linguaggio moderno.
Sembra funzionare, continuerò a guardare.
Grazie!