[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 603

 
41ckm39fi:
Ho rimosso tutto ciò che riguarda PrevSignal ma il messaggio non appare.

Non ho visto l'elefante nella stanza...

fare un'inizializzazione del buffer dato che è un indicatore...

#proprietà indicator_chart_window

int init(){

IndicatorBuffers(2);

SetIndexBuffer(0,DeMarker_buffer0);

SetIndexBuffer(1,MA_buffer1);

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_NONE);

}

rimuovere la chiamata ArraySetAsSeries... e in

DeMarker_buffer0[i]=iDeMarker(NULL,0,14,1);

mettere l'ultimo parametro al posto di 1 i

 
keekkenen:

Non ho visto l'elefante nella stanza...

fare un'inizializzazione del buffer dato che è un indicatore...

#proprietà indicator_chart_window

int init(){

IndicatorBuffers(2);

SetIndexBuffer(0,DeMarker_buffer0);

SetIndexBuffer(1,MA_buffer1);

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_NONE);

}

rimuovere la chiamata ArraySetAsSeries... e in

mettere l'ultimo parametro al posto di 1 i


Ecco cosa si ottiene:

#property  indicator_level1 0.3
#property  indicator_level2 0.7
#property indicator_chart_window
//---- 
extern int        period_MA            = 5,
                  period_DeMarker      = 14;
//---- 
double            DeMarker_buffer0[],
                  MA_buffer1[],
                  Signal_Buffer2[];       
#define SIGNAL_BAR 1
 //+------------------------------------------------------------------+
int init()
{

IndicatorBuffers(2);

SetIndexBuffer(0,DeMarker_buffer0);

SetIndexBuffer(1,MA_buffer1);

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_NONE);

return(0);
  }
  //+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|   
//+------------------------------------------------------------------+
int start()
  {
  int    i,limit=ArraySize(DeMarker_buffer0);
        
  int    counted_bars=IndicatorCounted();
//----
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//----
  for(i=limit; i>=0; i--)
  DeMarker_buffer0[i]=iDeMarker(NULL,0,14,i);
//---- 
  for(i=limit; i>=0; i--)
  
  MA_buffer1[i]=iMAOnArray(DeMarker_buffer0,limit,5,0,MODE_LWMA,i);
//----  
                if(MA_buffer1[SIGNAL_BAR] - 0.3 > 0 && 0.3 - MA_buffer1[SIGNAL_BAR+1] >= 0)  
//---- 
                                Alert( "sMA(", Symbol(), ", ", Period(), ")  -  BUY!!!" );
//----
                if(0.7 - MA_buffer1[SIGNAL_BAR] > 0 && MA_buffer1[SIGNAL_BAR+1] - 0.7 >= 0)
//----               
                                Alert("sMA(", Symbol(), ", ", Period(), ")  -  SELL!!!");
                        
   return(0);
  }

Ma sono confuso da questa linea

MA_buffer1[i]=iMAOnArray(DeMarker_buffer0,limit,5,0,MODE_LWMA,i);

Altri indicatori composti scrivono Bars invece di limite.

 
41ckm39fi:


Questo è quello che è venuto fuori:

Ma sono confuso da questa linea

Altri indicatori composti scrivono Bars invece di limite.




Anch'io sono confuso... questa funzione iMAOnArray(), non sono sicuro che possa calcolare correttamente la media se il secondo parametro è diverso da 0, cioè il calcolo sull'intero array DeMarker_buffer0, meglio mettere 0...
 
keekkenen:
Anch'io sono confuso... questa funzione iMAOnArray(), non sono sicuro che possa calcolare correttamente la media se il secondo parametro è diverso da 0, cioè il calcolo sull'intero array DeMarker_buffer0, meglio mettere 0...
Ho messo Bars invece di limite e il programma ha iniziato a dare messaggi!!! Sembra funzionare come volevo. Solo i messaggi vanno molte volte fino a quando la barra del segnale si chiude.
 
Buon pomeriggio. Ho scaricato l'EA, l'ho salvato, l'ho compilato e ho ricaricato il terminale. Potete dirmi perché l'EA aggiunto a MT4 non è attaccato al grafico. Ho fatto qualcosa di sbagliato?
 
41ckm39fi:

Ho prescritto Bars invece di ...

Solo i messaggi vanno molte volte fino a quando la barra del segnale si chiude.

0 è ancora corretto...

e riportare il controllo del tempo...

static int  PrevTime = Time[0];
//---- 
if(PrevTime >= Time[0] ) return(0);
//---- 
PrevTime = Time[0];

// а здесь проверяйте условия на алерт
 

Ho dimenticato di dire che la linea

int    i,limit=ArraySize(DeMarker_buffer0);

Ho sostituito con

int    i,limit;

e sostituito il limite con Bars nella linea

MA_buffer1[i]=iMAOnArray(DeMarker_buffer0,Bars,5,0,MODE_LWMA,i);

Ora proverò a fare come dici tu return PrevTime e sostituire il secondo parametro Bars con 0.

 

Per esempio, ho un Expert Advisor che gira su mql4.

Quando lo eseguo attraverso le variabili esterne, imposto alcuni valori.

Domanda: Posso cambiare in qualsiasi momento

alcune variabili dell'Expert Advisor durante il suo funzionamento (per esempio, dalla tastiera) e in tal caso non causerebbe un riavvio dell'Expert Advisor?

 
Jazzz:

Per esempio, ho un Expert Advisor che gira su mql4.

Quando lo eseguo attraverso le variabili esterne, imposto alcuni valori.

Domanda: Posso cambiare in qualsiasi momento

alcune variabili dell'Expert Advisor durante il suo funzionamento (per esempio, dalla tastiera) e in tal caso non causerebbe un riavvio dell'Expert Advisor?


È possibile se si usano variabili di livello globale. Per cambiare i loro valori dalla tastiera senza spegnere l'EA, premete F3 nel terminale.
 
Grazie!
Motivazione: