Fine settimana sera - pagina 9

 
Aleksey Panfilov:

Ci sono sei maniglie di un indicatore su tre timeframe.

E la compensazione del valore da prendere è già stabilita. Ho copiato da loro un valore alla volta.

Mi sono confuso usando tre maniglie di un indicatore su tre timeframe e copiando il possibile intervallo di spostamento da esse.

Se avete bisogno di ottenere il valore di un indicatore da più di una barra alla volta, dovreste copiare i valori in un array. Usando iATR come esempio:

//+------------------------------------------------------------------+
//| 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:

Se volete ricevere il valore di un indicatore da più di una barra alla volta, dovete copiare i valori in un array. Usando iATR come esempio:

Sì, sembra che sia stato un errore lasciare gli array che ho copiato come dinamici. :(

Controlleremo.

 
Aleksey Panfilov:

Sì, sembra che sia stato un errore lasciare gli array che ho copiato come dinamici. :(

Controllerò.

Copio solo su array dinamici! E, prima di copiare, forzoArrayFree. Ho avuto problemi con gli array statici. Da allora, solo quelli dinamici.

 
Vladimir Karputov:

Copio solo su array dinamici! E prima di copiare, forzoArrayFree. C'erano problemi con gli array statici. Da allora, solo quelli dinamici.

Capito. L'errore non è qui.

Ecco l'Expert Advisor che non è andato.

File:
 
Aleksey Panfilov:

Capito. L'errore non è qui.

Ecco l'esperto che non è andato.

ERRORE: stai copiando UN valore o DUE?

   //---  Используя функцию 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: stai copiando UN valore o DUE valori?

In questo EA (è diverso nella data) ho provato tre handel e duecento valori.

 

Se siete pronti a fare robot per MT5, posso cominciare a darvi delle idee. Simulo le condizioni in TS-Lab, ma vorrei fare trading su MT5 in modalità automatica.

Se non ci sono problemi con il test, descriverò la logica di trading. Il primo sarà probabilmente questo.

 
Vladimir Karputov:

Inizierò con piccole porzioni.

Non appena ci sono"Secondi prima della chiusura della candela del segnale" secondi prima della chiusura della candela attuale, calcoliamo la dimensione media delle candele"Numero di candele per il calcolo della dimensione media della candela". Se la candela attuale supera la dimensione media di"Candela attuale: dimensione del corpo in eccesso, percentuali" - apriamo una posizione con il volume"Lotti" e piazziamo un ordine limite pendente con il volume"Lotti" *"Fattore di moltiplicazione" dal prezzo di apertura alla distanza di"Livello limite pendente: percentuale dell'altezza della candela attuale" in percentuale dell'altezza della candela del segnale.

È corretto?


Ho bisogno di tempo per ricordare cosa ho fatto lì :) Mi sta venendo il raffreddore a causa delle correnti d'aria. È allo stesso tempo arrabbiato e divertente: prendere la febbre in estate e prendere il raffreddore :)

 
Vladimir Karputov:

Ci vuole tempo per ricordare cosa ho fatto :) E poi, come di proposito, ci sono degli spifferi e il risultato è un raffreddore. È divertente e arrabbiato allo stesso tempo: prendere la febbre e il raffreddore in estate :)

Sentirsi meglio.

 
Vladimir Karputov:

Copio solo su array dinamici! E prima di copiare, forzoArrayFree. C'erano problemi con gli array statici. Da allora, solo quelli dinamici.

Oh, andiamo... Non ho problemi nemmeno con quelli statici. Dipende da cosa stiamo parlando, però. Negli indici, sì, quelli dinamici sono meglio, se non c'è il desiderio di gestire il buffer e catturare gli errori. Ma nei gufi non c'è differenza, infatti.