Fehler, Irrtümer, Fragen - Seite 276

 
Yedelkin:
Sehen Sie sich das MQL5 Referenzhandbuch / Technische Indikatoren / iCustom an

Vielen Dank für Ihre Schnelligkeit)

 

Zum Thema. Ich habe es fast geschafft, aber COUNTER startet nicht im Terminalprotokoll sagt


entfernt

erfolgreich geladen


Es hat funktioniert!!!
 

Sie haben hier einen Fehler.

   v161_handle=iCustom(NULL,0,"ErolМТ5");                            
   v162_handle=iCustom(NULL,0,"ErolМТ5");
   Sum_handle=iCustom(NULL,0,"ErolМТ5");
In diesem Fall haben alle drei Variablen denselben Handle, da Sie denselben Indikator dreimal aufrufen.
 
sergey1294:

Sie haben hier einen Fehler

In diesem Fall haben alle drei Variablen denselben Handle, da Sie denselben Indikator dreimal aufrufen.

Ja, aber so wie ich es verstehe, sind die Werte der Indexzeilen des Indikators (die Werte der 3 Zeilen)

kommen wir durch:

CopyBuffer(v161_handle,1,0,3,Spr1Buffer)
CopyBuffer(v162_handle,2,0,3,Spr2Buffer)
CopyBuffer(Sum_handle,4,0,3,SumBuffer)

Dabei sind 1, 2 und 4 die Indexwerte der Indikatorzeilen, die im Puffer gespeichert sind,

die wir dann miteinander vergleichen.

Aber das ist kein Problem, es wird mit diesen Indikatorlinienindizes nicht korrekt berechnet

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 

Haben Sie einen Tipp, wohin Sie gehen oder was Sie hier tun können?


void OnTick()
{  
   ArraySetAsSeries(Spr1Buffer,true);
   ArraySetAsSeries(Spr2Buffer,true);
   ArraySetAsSeries(SumBuffer,true);

   if(CopyBuffer(v161_handle,1,0,3,Spr1Buffer)<0 || CopyBuffer(v162_handle,2,0,3,Spr2Buffer)<0 || CopyBuffer(Sum_handle,4,0,3,SumBuffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      }
   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
   bool SellSum1 =(SumBuffer[1]>=Sp);
   if(SellSpr1 && SellSum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =(Spr1Buffer[1] < Spr2Buffer[1]);
   bool BuySum1 =(SumBuffer[1]>=Sp);
   if(BuySpr1 && BuySum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenBuy1();
      }
 
alexluek:

Ja, aber so wie ich es verstehe, sind die Werte der Indexzeilen des Indikators (Werte der 3 Zeilen)

kommen wir durch:

Dabei sind 1, 2 und 4 die Indexwerte der Indikatorzeilen, die im Puffer gespeichert sind,

die wir dann miteinander vergleichen.

Aber das ist kein Problem, es wird nicht korrekt nach diesen Indizes der Indikatorlinien berechnet

Es reicht aus, eine Kopie des Indikators zu laden und die notwendigen Pufferindizes über den Kopierpuffer zu adressieren
 
sergey1294:
Es reicht aus, eine Kopie des Indikators zu laden und den gewünschten Pufferindex über den Copybuffer zu adressieren

nein, ich kann die Werte der 2. Zeile nicht abrufen

da die Werte von 2 Zeilenindizes, die in verschiedenen Puffern gespeichert sind, verglichen werden.


   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
 
alexluek:

Falsch, es ist nicht möglich, die Werte der 2. Zeile zu erhalten

da die Werte von 2 Zeilenindizes, die in verschiedenen Puffern gespeichert sind, verglichen werden.


Es kann ein Fehler im Indikator selbst vorliegen.
 
sergey1294:
der Indikator selbst kann Fehler enthalten

der Indikator richtig anzeigt

 

Die Rettung des Ertrinkenden ist die Aufgabe des Ertrinkenden.

Das könnte sich in der Zukunft als nützlich erweisen:

So rufen Sie 2 oder mehr Indikatorzeilen in einem EA für den aktuellen Takt auf

Wählen Sie 1 Handle und rufen Sie den Indikator auf, dann verwenden Sie den Copybuffer, um Indexwerte zu speichern

und arbeiten dann mit diesen Puffern. sergey1294 danke für die Hilfe!

int OnInit()
  {
   v161_handle=iCustom(NULL,0,"LeroyMТ5");                            
   if(v161_handle<0)
     {
      Alert("Ошибка при создании индикаторов: ",GetLastError());
      return(-1);
     }
   return(0);
  }


void OnTick()
{  
   ArraySetAsSeries(Sp1Buffer,true);
   ArraySetAsSeries(Sp2Buffer,true);
   ArraySetAsSeries(Sp3Buffer,true);
   if(CopyBuffer(v161_handle,1,0,1,Sp1Buffer)<0 || CopyBuffer(v161_handle,2,0,1,Sp2Buffer)<0 || CopyBuffer(v161_handle,4,0,1,Sp3Buffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      return;
      }    
   bool SellSpr1 =( Sp1Buffer[0]> Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(SellSpr1  && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =( Sp1Buffer[0]< Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(BuySpr1 && !PositionSelect(_Symbol));   
      {
        PositionOpenBuy1();
      }
}