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

 

Per favore, aiutatemi!

Vengono visualizzate solo due linee MAH, anche se il codice è equivalente per tutte e quattro le linee.Qual è il problema?

#property indicator_separate_window // L'indicatore è disegnato in una finestra separata
#property indicator_buffers 4 // Numero di buffer
#property indicator_color1 Blue // Colore della prima linea
#property indicator_color2 Red // Colore della seconda linea
#property indicator_color3 Olive
#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // dichiarazione di array (per buffer di indicatori)
//--------------------------------------------------------------------
int init() // Funzione speciale init()
{
SetIndexBuffer(0,Buf_MA40); // Assegnazione di un array al buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Stile linea
SetIndexBuffer(1,Buf_MA20); // Assegnare un array al buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Stile linea
SetIndexBuffer(3,Buf_ROC_MA40); // Assegnare un array al buffer
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);//Stile linea
SetIndexBuffer(4,Buf_ROC_MA40); // Assegnare un array al buffer
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,2);// Stile linea
return; // Esci dalla funzione speciale init()
}
//--------------------------------------------------------------------
int start() // Funzione speciale start()
{
int i, // indice della barra
Storia=3000,
counted_bars; // numero di barre calcolate
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Numero di barre contate
i=Bars;//Counted_bars-1; // Indice del primo non contato
while(i>=0) //Ciclo attraverso le barre non contate
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
Alert("ma20=",ma20, " ma20_s=",ma20_s, " ma40_s=",ma40_s, " ma40=",ma40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// Calcolo dell'indice della prossima barra
}
//--------------------------------------------------------------------
return; // Esci dalla funzione speciale start()
}

 

1.consigliare, per favore, un debugger (preferibilmente con debugger passo dopo passo in modo da poter vedere i valori intermedi delle variabili).

2.Come posso visualizzare i dati di debug e dove (in quale finestra), perché è scomodo usare gli avvisi.

3) Come posso aggiornare la versione MQL?

 

Per favore, consigliatemi!

Come posso fare in modo che il mio Expert Advisor operi solo nella sessione europea?

 
VNG писал(а) >>

Per favore, aiutatemi!

Vengono emesse solo due linee di MAs, anche se il codice è equivalente per tutte e quattro le linee.Qual è il problema?

int init() // Специальная функция init()
{
SetIndexBuffer(0, Buf_MA40); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1, Buf_MA20); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(2, Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (2,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(3, Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
return; // Выход из спец. ф-ии init()
}

Ho trovato un errore. Dopo il buffer 1 è andato immediatamente il buffer 3. Il buffer 2 è stato saltato.

Semplicemente non dovresti avere l'output delle maschere e la differenza in una sola finestra. Hanno più di un ordine di grandezza di differenza.

 
KoDi писал(а) >>

Per favore, consigliatemi!

Come posso fare in modo che il mio EA faccia trading solo nella sessione europea?

Basta mettere inizio all'inizio del modulo

if(Hour()<7 || Hour()>15)return(0);

 

Ho rimosso le MA perché i nuovi valori ricevuti hanno una scala completamente diversa.

Ancora non viene visualizzato nulla.

#property indicator_separate_window // L'indicatore è disegnato in una finestra separata
#property indicator_buffers 2 // Numero di buffer
#property indicator_color1 Blue // Colore della prima linea
#property indicator_color2 Red //colore della seconda linea
//#proprietà indicator_color3 Olive
//#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Dichiarazione degli array (per i buffer indicatori)
//--------------------------------------------------------------------
int init() // Funzione speciale init()
{
//SetIndexBuffer(0,Buf_MA40); // Assegnazione di un array al buffer
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Stile linea
//SetIndexBuffer(1,Buf_MA20); // Assegna l'array al buffer
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Stile della linea
SetIndexBuffer(0,Buf_ROC_MA40); // Assegnare un array al buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//Stile linea
SetIndexBuffer(1,Buf_ROC_MA20); // Assegnare un array al buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Stile linea
return; // Esci dalla funzione speciale init()
}
//--------------------------------------------------------------------
int start() // Funzione speciale start()
{
int i, // indice della barra
Storia=3000,
counted_bars; // numero di barre calcolate
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Numero di barre contate
i=Bars;//Counted_bars-1; // Indice del primo non contato
while(i>=0) //Ciclo attraverso le barre non contate
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// Calcolo dell'indice della prossima barra
}
//--------------------------------------------------------------------
return; // Esci dalla funzione speciale start()
}

 
VNG писал(а) >>

Ho rimosso le MA perché i nuovi valori ricevuti hanno una scala completamente diversa.

Ancora non viene visualizzato nulla.

#property indicator_separate_window // L'indicatore è disegnato in una finestra separata
#property indicator_buffers 2 // Numero di buffer
#property indicator_color1 Blue // Colore della prima linea
#property indicator_color2 Red //colore della seconda linea
//#proprietà indicator_color3 Olive
//#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Dichiarazione degli array (per i buffer indicatori)
//--------------------------------------------------------------------
int init() // Funzione speciale init()
{
//SetIndexBuffer(0,Buf_MA40); // Assegnazione di un array al buffer
//SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);// Stile linea
//SetIndexBuffer(1,Buf_MA20); // Assegna l'array al buffer
//SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Stile linea
SetIndexBuffer(0,Buf_ROC_MA40); // Assegnare un array al buffer
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//Stile linea
SetIndexBuffer(1,Buf_ROC_MA20); // Assegnare un array al buffer
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//Stile linea
return; // Esci dalla funzione speciale init()
}
//--------------------------------------------------------------------
int start() // Funzione speciale start()
{
int i, // indice della barra
Storia=3000,
counted_bars; // numero di barre calcolate
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Numero di barre contate
i=Bars;//Counted_bars-1; // Indice del primo non contato
while(i>=0) //Ciclo attraverso le barre non contate
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// Calcolo dell'indice della prossima barra
}
//--------------------------------------------------------------------
return; // Esci dalla funzione speciale start()
}

Ci sono troppi errori.

Principalmente errore nel lavoro con gli array.

File:
proba.mq4  2 kb
 

Aiutatemi a risolvere questo problema - c'è un segnale di acquisto/vendita, l'EA apre un'operazione, imposta un profitto e uno stop. E se l'affare viene chiuso su stop sulla stessa candela, allora l'advisor apre di nuovo l'affare, e ho bisogno che non si apra, cioè su un segnale un affare è stato aperto.

Come fare?

 
KoDi >> :

Come fare?

Il tempo di chiusura dell'ultimo ordine deve essere inferiore al tempo di apertura della barra corrente.

Se questo non è il caso, non aprire il trade.

 
TheXpert >> :

Il tempo di chiusura dell'ultimo ordine deve essere inferiore al tempo di apertura della barra corrente.

Se non lo fa, non apriamo un accordo.

>> Sono confuso.

Bene, come farà ad aprire il PRIMO trade se la condizione è scrivere che non entra finché non c'è almeno un trade?

Motivazione: