Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 473

 
Kutuzov:

Hilfe bei den Wanzen!

Ich habe mich entschlossen, für mich selbst einen EA auf der Grundlage eines Beispiels aus dem mql4-Handbuch zu erstellen. Ich spiele jetzt seit einer Woche damit herum, aber ich bekomme immer irgendeine Fehlermeldung.

Bitte prüfen Sie, was falsch sein könnte, vielleicht sollte zusätzlich zu den Klammern noch etwas geändert oder entfernt werden.

Irrtümer:

'}' - unerwartetes Ende des Programms expert.mq4 218 3

'{' - unausgewogene Klammern expert.mq4 23 2


Versuchen Sie zu übersetzen, was in der Fehlermeldung steht. Ich denke, das ist der einfachste Weg, um die Fehlerursache herauszufinden

Was bewirkt dies beim Start?

#property  indicator_level1 20 // Задаём верхний уровень                             
#property  indicator_level2 80 // Задаём нижний уровень 

Sie verfügen über einen Expert Advisor, nicht über einen Indikator.

 DPeriod,      // "Redline" индикатора StochRSI.mq4 
 DPeriod=Bid;   // Запрашивем значение "Redline"

warum ist er nicht als Typ festgelegt?

  return;      // Выход из start()

Wo ist die schließende Klammer?

 };

Was sind das für Neuigkeiten?

Zeigen Sie mir, wo das in dem Beispiel steht?

bool Ans =false,  // Ответ сервера после закрытия
bool Cls_B=false,

Warum steht am Ende ein Komma und nicht ein Semikolon? Warum schreibt man dasselbe zweimal?

Wenn Sie ein Komma setzen, schreiben Sie es so:

bool Ans =false,  // Ответ сервера после закрытия
 Cls_B=false, // Критерий для закрытия Buy
 Cls_S=false, // Критерий для закрытия Sell
 Opn_B=false, // Критерий для открытия Buy
 Opn_S=false; // Критерий для открытия Sell

Was ist das?

[1]Close

Ich habe nicht weiter gesucht, ich wurde müde,

Geben Sie also nicht den Fehlern die Schuld, sie sind auf Ihre Unaufmerksamkeit zurückzuführen. Sie müssen die Hilfe noch einmal lesen und das Video ansehen, um einen Artikel über die Programmierung in dieser Sprache zu lesen.

 
Vladon:

die Fehler behoben... Aber während des Tests heißt es "Benutzerdefinierte Indikatoren können nicht überprüft werden".

Zunächst zweifelte ich an dem angegebenen Indikatorpuffer, aber nachdem ich beide nacheinander angegeben hatte, war der Fehler immer noch nicht verschwunden. Habe ich wieder irgendwo Mist gebaut?

Dateien:
expert_2.mq4  9 kb
 
Programmier-Guru-Hilfe). Ich war ein EA testen und ich denke, ich habe es endlich), sobald ich auf der EA-Tester einschalten und mein Bot beginnt die Tester friert und bleibt an Ort und Stelle für eine sehr lange Zeit, was kann in den Code, der den Tester verlangsamt sein?
 
miha91:
Programmier-Guru-Hilfe). Ich war ein EA testen und ich denke, ich machte es durch), sobald ich den Tester einschalten und mein Bot beginnt die Tester friert und bleibt an Ort und Stelle für eine sehr lange Zeit, was kann in den Code, der den Tester verlangsamt sein?
Ich habe auch etwas unter der Badewanne, das raschelt! Was könnte das sein?
 
int OnInit()
  {
//--- indicator buffers mapping
 SetIndexBuffer(0,buf1);
SetIndexStyle(0,DRAW_LINE,0,1,Red);



 SetIndexBuffer(1,buf2);
SetIndexStyle(1,DRAW_LINE,0,1,Aqua);


 SetIndexBuffer(2,buf3);
SetIndexStyle(2,DRAW_LINE,0,1,Green);



 SetIndexBuffer(3,buf4);
SetIndexStyle(3,DRAW_LINE,0,1,Yellow);



//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---



   
   buf1[pos]=iOpen(Symbol(),0,pos);
   buf2[pos]=iHigh(Symbol(),0,pos);
   buf3[pos]=iClose(Symbol(),0,pos);
   buf4[pos]=iLow(Symbol(),0,pos);
   
  
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
es sollten 4 Zeilen gezeichnet werden, aber es wird nur der erste Puffer gezeichnet, wenn die anderen nicht vorhanden sind
 

Ich versuche, einen Punkt auf der Linie nach seiner Änderung zu bestimmen, es funktioniert gut in allen Perioden, aber bei 1 und 4 Uhr gibt es regelmäßig einen Fehler von 100-200 Punkten, wie man damit umgehen?

Ehe

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   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                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int d=0;
   int    X_1,X_2,X3d;
   double Y_1,Y_2,Y3d;
   static int _time_waiting=0;
   static int 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);
  }
//+------------------------------------------------------------------+
 
beginner:

Ich versuche, einen Punkt auf der Linie nach seiner Änderung zu bestimmen, in allen Perioden normalerweise funktioniert, aber bei 1 und 4 Uhr periodisch gibt es einen Fehler von 100-200 Punkte, wie man damit umgehen?


Ich habe es nicht ausprobiert.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   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                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int d=0;
   int    X_1,X_2,X3d;
   double Y_1,Y_2,Y3d;
   static int _time_waiting=0;
   static int 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);
  }
//+------------------------------------------------------------------+

Versuchen Sie es, ich habe es nicht versucht.

 

Alternativ könnten Sie auch so vorgehen

Y3d = ObjectGetValueByTime("LineAlert",Time[0],2);
  

In modernen Begriffen

 
r772ra:

Alternativ könnten Sie auch so vorgehen

Im modernen Sprachgebrauch.


Es scheint zu funktionieren, ich werde es weiter beobachten.

Ich danke Ihnen!

 
Frage an sachkundige Personen - Problem ist vor kurzem aufgetreten: auf der UPU Signal an die Post hat aufgehört zu kommen, bevor alles normal war, jetzt in das Protokoll des Terminals schreibt während des Tests: wurde sant, aber die Post nicht kommen nichts. Ich habe die UPU neu gestartet, das Terminal auch, ohne Ergebnis.