Wochenende Abend - Seite 9

 
Aleksey Panfilov:

Es gibt sechs Griffe von einem Indikator auf drei Zeitebenen.

Und die Verrechnung des Wertes, der genommen werden soll, ist bereits festgelegt. Ich habe von ihnen einen Wert nach dem anderen kopiert.

Ich war verwirrt, als ich drei Griffe eines Indikators auf drei Zeitrahmen verwendete und das mögliche Offset-Intervall von ihnen kopierte.

Wenn Sie einen Indikatorwert von mehr als einem Balken auf einmal abrufen müssen, sollten Sie die Werte in ein Array kopieren. Am Beispiel von iATR:

//+------------------------------------------------------------------+
//| Get value of buffers for the iATR                                |
//+------------------------------------------------------------------+
double iATRGet(const int index)
  {
   double ATR[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATR array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iATR,0,index,1,ATR)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(ATR[0]);
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iATR in the array                   |
//+------------------------------------------------------------------+
bool iATRGetArray(const int start_pos,const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      Print("This a no dynamic array!");
      return(false);
     }
   ArrayFree(arr_buffer);
   int       buffer_num=0;          // indicator buffer number 
//--- reset error code 
   ResetLastError();
//--- fill a part of the iATRBuffer array with values from the indicator buffer that has 0 index 
   int copied=CopyBuffer(handle_iATR,buffer_num,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iATR indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(false);
     }
//---
   return(result);
  }
 
Vladimir Karputov:

Wenn Sie einen Indikatorwert von mehr als einem Balken auf einmal erhalten möchten, müssen Sie die Werte in ein Array kopieren. Am Beispiel von iATR:

Ja, es scheint ein Fehler gewesen zu sein, die Arrays, in die ich kopiert habe, als dynamisch zu belassen. :(

Wird geprüft.

 
Aleksey Panfilov:

Ja, es scheint ein Fehler gewesen zu sein, die Arrays, die ich hineinkopiert habe, als dynamisch zu belassen. :(

Ich werde nachsehen.

Ich kopiere nur in dynamische Arrays! Und vor dem Kopieren, mache ich zwangsweiseArrayFree. Ich hatte Probleme mit statischen Arrays. Seitdem nur noch dynamische.

 
Vladimir Karputov:

Ich kopiere nur in dynamische Arrays! Und vor dem Kopieren zwinge ichArrayFree. Es gab Probleme mit statischen Arrays. Seitdem nur noch dynamische.

Ich hab's. Der Fehler liegt nicht hier.

Hier ist der Expert Advisor, der nicht funktioniert hat.

Dateien:
 
Aleksey Panfilov:

Ich hab's. Der Fehler liegt nicht hier.

Hier ist der Experte, der nicht gegangen ist.

ERROR: Kopieren Sie EINEN Wert oder ZWEI?

   //---  Используя функцию CopyBuffer, мы копируем по 1 последних новых значения индикаторов в динамические массивы

   if(CopyBuffer(Handle_4P72_L0_1,0,0,200,line1_L0)<0  // || CopyBuffer(Handle_4P72_L0_2,0,0,1,line2_L0)<0   || CopyBuffer(SMA_Handle_00,0,0,1,SMA_L0)<0
   || CopyBuffer(Handle_4P72_L1_1,0,0,200,line1_L1)<0  // || CopyBuffer(Handle_4P72_L1_2,0,0,1,line2_L1)<0   || CopyBuffer(SMA_Handle_01,0,0,1,SMA_L1)<0
   || CopyBuffer(Handle_4P72_L2_1,0,0,200,line1_L2)<0  // || CopyBuffer(Handle_4P72_L2_2,0,0,1,line2_L2)<0   || CopyBuffer(SMA_Handle_02,0,0,1,SMA_L2)<0
   ||  CopyTime(_Symbol,_Period,0,1,New_Time)<0)
 
Vladimir Karputov:

ERROR: Kopieren Sie EINEN Wert oder ZWEI?

In diesem EA (es ist ein anderes Datum) habe ich drei Handles und zweihundert Werte ausprobiert.

 

Wenn Sie bereit sind, Roboter für MT5 zu erstellen, kann ich Ihnen erste Ideen geben. Ich simuliere die Bedingungen in TS-Lab, aber ich möchte sie auf dem MT5 im Auto-Modus handeln.

Wenn es keine Probleme mit dem Test gibt, werde ich die Handelslogik beschreiben. Die erste wird wahrscheinlich diese sein.

 
Vladimir Karputov:

Ich werde mit kleinen Portionen beginnen.

Sobald es"Sekunden vor Schließung der Signalkerze" Sekunden vor Schließung der aktuellen Kerze gibt, berechnen wir die durchschnittliche Größe der"Anzahl der Kerzen für die Berechnung der durchschnittlichen Kerzengröße" Kerzen. Wenn die aktuelle Kerze die durchschnittliche Größe um"Aktuelle Kerze: Überschüssige Körpergröße, Prozente" überschreitet, eröffnen wir eine Position mit dem Volumen"Lots" und platzieren eine Pending Limit Order mit dem Volumen"Lots" *"Multiplikationsfaktor" vom Eröffnungskurs im Abstand von"Pending Limit Level: Prozent der Höhe der aktuellen Kerze" in Prozent der Höhe der Signalkerze.

Ist dies richtig?


Ich brauche Zeit, um mich daran zu erinnern, was ich dort gemacht habe :) Ich bekomme eine Erkältung wegen der Zugluft. Es ist ärgerlich und lustig zugleich: im Sommer Fieber zu bekommen und sich zu erkälten :)

 
Vladimir Karputov:

Es dauert, bis ich mich daran erinnere, was ich gemacht habe :) Und dann zieht es wie absichtlich, und die Folge ist eine Erkältung. Es ist lustig und ärgerlich zugleich: im Sommer Fieber zu bekommen und sich zu erkälten :)

Fühlen Sie sich besser.

 
Vladimir Karputov:

Ich kopiere nur in dynamische Arrays! Und vor dem Kopieren zwinge ichArrayFree. Es gab Probleme mit statischen Arrays. Seitdem nur noch dynamische.

Ach, komm schon... Ich habe auch kein Problem mit statischen Bildern. Es kommt allerdings darauf an, worüber wir reden. Bei den Indizes sind dynamische Indizes besser, wenn man keine Lust hat, den Puffer zu verwalten und Fehler abzufangen. Aber bei Eulen gibt es eigentlich keinen Unterschied.

Grund der Beschwerde: