Errori, bug, domande - pagina 276

 
Yedelkin:
Controlla la Guida di riferimento MQL5 / Indicatori tecnici / iCustom

Grazie mille per la vostra prontezza)

 

In tema. Ci sono quasi riuscito, ma COUNTER non parte nel log del terminale dice


rimosso

caricato con successo


ha funzionato!!!
 

avete un errore qui.

   v161_handle=iCustom(NULL,0,"ErolМТ5");                            
   v162_handle=iCustom(NULL,0,"ErolМТ5");
   Sum_handle=iCustom(NULL,0,"ErolМТ5");
In questo caso, tutte e tre le variabili avranno lo stesso handle, dato che state chiamando lo stesso indicatore tre volte.
 
sergey1294:

hai un errore qui

In questo caso, tutte e tre le variabili avranno lo stesso handle, perché state chiamando lo stesso indicatore tre volte.

Sì, ma da quanto ho capito, i valori delle linee di indice dell'indicatore (i valori delle 3 linee)

ci passiamo attraverso:

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

qui 1, 2 e 4 sono i valori dell'indice delle linee dell'indicatore, che sono memorizzati nel buffer,

che poi confrontiamo tra loro.

Ma questo non è un problema, non calcola correttamente con questi indici di linea dell'indicatore

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

Qualche consiglio su dove andare o cosa fare qui?


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:

Sì, ma da quanto ho capito, i valori delle linee di indice dell'indicatore (valori delle 3 linee)

ci passiamo attraverso:

qui 1, 2 e 4 sono i valori dell'indice delle linee dell'indicatore, che sono memorizzati nel buffer,

che poi confrontiamo tra loro.

Ma non è un problema, non calcola correttamente secondo questi indici di linee di indicatori

È sufficiente caricare una copia dell'indicatore e indirizzare gli indici del buffer necessari attraverso il buffer di copia
 
sergey1294:
È sufficiente caricare una copia dell'indicatore e indirizzare l'indice del buffer desiderato tramite il copybuffer

no, non posso ottenere i valori della 2a linea

poiché vengono confrontati i valori di 2 indici di linea memorizzati in buffer diversi.


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

Sbagliato, non è possibile ottenere i valori della 2a linea

poiché vengono confrontati i valori di 2 indici di linea memorizzati in buffer diversi.


potrebbe esserci un errore nell'indicatore stesso
 
sergey1294:
ci possono essere errori nell'indicatore stesso

l'indicatore legge correttamente

 

Salvare l'annegato è il lavoro dell'annegato.

Può essere utile per il futuro:

Per chiamare 2 o più linee di indicatori in un EA per la barra corrente

scegliere 1 handle e chiamare l'indicatore, poi usare il copybuffer per salvare i valori dell'indice

e poi lavorare con questi buffer. sergey1294 grazie per l'aiuto!

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();
      }
}     
Motivazione: