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

 

Il mio EA non funziona con la funzione Sleep() durante i test

Voglio che il mio Expert Advisor si blocchi per molto tempo dopo la chiusura dell'ordine, ma invece continua a fare false aperture.


bool cl() {if (OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
se (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
se (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
Sleep(300000000);
}

 

Ilsonno non funziona sul tester.

 

Vorrei sapere se è possibile per un EA reagire al cambiamento di colore di un indicatore, ad esempio verde-acquisto-rosso-vendita

e sull'aspetto delle diverse icone sullo schermo ... forse c'è una funzione in MT4 ?

 
unumi >> :

Vorrei sapere se è possibile che l'Expert Advisor reagisca a un cambiamento di colore dell'indicatore, ad esempio verde-acquisto-rosso-vendita

E la comparsa di diverse icone sullo schermo ... forse c'è una funzione in MT4?

Se l'indicatore cambia colore, allora o a) la sua linea è tracciata su diversi buffer, quindi è sufficiente interrogarli per capire lo stato (in MT4 dinamicamente il colore del buffer non può essere cambiato, a differenza di MT5), o b) la linea dell'indicatore è tracciata da oggetti griglia - allora è sufficiente leggere l'ObjectGet(....).

Lo stesso vale per le icone - possono essere emesse come codice attraverso un buffer o come oggetti.

 
Svinozavr >> :

Se l'indicatore cambia colore, allora o a) la sua linea è visualizzata da diversi buffer ed è sufficiente interrogarli per capire lo stato (in MT4 il colore del buffer non può essere cambiato dinamicamente, a differenza di MT5), o b) la linea dell'indicatore è visualizzata da gr.objects - allora è sufficiente leggere le proprietà ObjectGet(....).

Lo stesso per le icone - possono essere disegnate come codice usando il buffer, o come oggetti.

>> grazie, ho capito.

 

Buona notte.

Potete consigliarmi, ho due domande correlate.

1. Come azzerare gli elementi dell'array ad ogni tick (se necessario secondo l'esempio).

2. Come sommare correttamente i valori degli elementi della matrice.

Per esempio:

Ad ogni tick gli elementi dell'array sono riempiti, può riempire 1 o 2 o 3 o 4.... o 15 elementi,

ma ogni volta ho bisogno della somma aritmetica dei valori degli elementi dell'array.

 
gvi2504 писал(а) >>

Buona notte.

Potete consigliarmi, ho due domande correlate.

1. Come azzerare gli elementi dell'array ad ogni tick (se necessario secondo l'esempio).

2. Come sommare correttamente i valori degli elementi della matrice.

Per esempio:

Ad ogni tick gli elementi dell'array sono riempiti, può riempire 1 o 2 o 3 o 4.... o 15 elementi,

ma ogni volta ho bisogno della somma aritmetica dei valori degli elementi dell'array.

1. Funzione ArrayInitialize(ArrayName,0).

2. Nel corso del riempimento dell'array sommare immediatamente. Dichiarare una variabile, per esempio sum, assegnarle un valore di 0, poi nel corso del riempimento dell'array aggiungere un valore a questa variabile.

 
Integer >> :

1. Funzione ArrayInitialize(ArrayName,0).

2. Dichiarare una variabile, per esempio sum, assegnarle un valore di 0, poi aggiungere un valore a questa variabile mentre l'array viene riempito.

Fantastico.

Proprio quello di cui hai bisogno. >>Grazie mille.

 
Bion писал(а) >>

Dormire(300000000);

Un sonno così lungo non è un'opzione, anche se Sleep() funzionerebbe nel tester. Dopo l'apertura, l'ora può essere memorizzata:

LastTime=TimeCurrent();

All'inizio della funzione start() fare un controllo:

se(TimeCurrent()<LastTime+Pause)return(0);

Pausa - tempo di "sonno" dopo l'apertura (in secondi).

 
Integer писал(а) >>

Un tempo di sonno così lungo non è un'opzione, anche se Sleep() funzionerebbe nel tester. Dopo l'apertura, è possibile ricordare l'ora di apertura:

LastTime=TimeCurrent();

All'inizio della funzione start() fare un controllo:

se(TimeCurrent()<LastTime+Pause)return(0);

Pausa - tempo di "sonno" dopo l'apertura (in secondi).

Ho fatto come mi hai consigliato.

datetime LastTime;
datetime Pausa=3600;

int start()
{
se(TimeCurrent()<LastTime+Pause)return(0);

...

bool cl() {if(OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
se (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
se (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
LastTime=TimeCurrent();
}

Tuttavia, nel tester, l'ordine si apre secondo la condizione ma non reagisce al tempo.

Inoltre, il tester non mostra alcuna reazione al parametro "tempo di esistenza dell'ordine pendente", cioè l'ordine non viene cancellato quando è il momento di cancellarlo.

È normale che sia così?

Come possiamo fare in modo che il tester consideri il tempo passato da quando l'ordine è stato chiuso?