Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1383

 

Che ne dite di questo?

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
   if(tc>50 && res*3<_sp) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<50) return(false);
   return(res>_sp?true:false);
}

Ancora una volta, se si esegue il codice durante il rollover e non prima di esso, scriverà un enorme spread di 50 tick e questa linea non ha senso.

Come risolvere il codice?

 
Vitaly Muzichenko:

Che ne dite di questo?

Ancora una volta, se si esegue il codice durante il rollover e non prima di esso, scriverà un enorme spread di 50 tick e questa linea non ha senso.

Come risolvere il codice?

La logica non è buona. Perché esattamente media da 50 tick con un contatore a longmax, che può durare a lungo.

C'è una diffusione dichiarata nelle proprietà del simbolo. Dovrebbe essere inserito inizialmente da un intput. E se non viene inserito, viene ricevuto. E se otteniamo un aumento dello spread, lo consideriamo erroneamente come medio. Abbiamo bisogno del valore medio in un intervallo piuttosto breve per rilevare il cambiamento.

Se c'è uno spread intraday, lo confrontiamo su ogni tick e otteniamo il valore medio a quello necessario. La questione è che non dovremmo calcolare la media senza aver salvato i valori intermedi. Uso così, memorizzo tutti i valori, e quando ottengo l'ultimo valore più uno, lo aggiungo alla somma e sottraggo il primo, e cambio la numerazione (nell'array A(n) = A(n+1)). È meno costoso che digitare il contatore a valori enormi. E fino a 10-20 valori uso le variabili.

Non so cosa sia più costosoSymbolInfoInteger o la differenza tra Bid e Ask).

 
Valeriy Yastremskiy:

La logica non è buona. Perché esattamente media da 50 tick con un contatore a longmax, che può durare a lungo.

C'è una diffusione dichiarata nelle proprietà del simbolo. Dovrebbe essere inserito inizialmente da un intput. E se non viene inserito, viene ricevuto. E se otteniamo uno spread aumentato, lo consideriamo erroneamente come medio. Abbiamo bisogno del valore medio in un intervallo piuttosto breve per rilevare il cambiamento.

Se c'è uno spread intraday, lo confrontiamo su ogni tick e otteniamo il valore medio a quello necessario. La questione è che non possiamo calcolare la media senza ricordare i valori intermedi. Uso così, memorizzo tutti i valori, e quando ottengo l'ultimo valore più uno, lo aggiungo alla somma e sottraggo il primo, e cambio la numerazione (nell'array A(n)=A(n+1)). È meno costoso che digitare il contatore a valori enormi. E fino a 10-20 valori uso le variabili.

Non so cosa sia più costosoSymbolInfoInteger o la differenza tra Bid e Ask).

Solo la parola "Floating", questo è il problema.


 
Vitaly Muzichenko:

Solo la parola 'Floating', questa è la sfida.


si è un po' eccitato). Poi la logica di credere che i primi valori siano corretti. Oppure aspettate 10 minuti, raccogliete le statistiche della scorrevolezza dei cambiamenti di spread durante questo tempo, trovate la media della trama minima di 50 o 100 tick, e prendetela come media. Controllate l'ora di inizio, in modo che non cada nel periodo in cui gli scambi non funzionano. Se volete una protezione completa anche da un pazzo)

 
Valeriy Yastremskiy:

(Mi sono un po' eccitato). Poi la logica di credere che i primi valori siano corretti. Oppure aspettate per 10 minuti, raccogliete le statistiche sulla fluidità del cambiamento dello spread durante questo tempo, trovate la media della trama minima di 50 o 100 tick, e prendetela come media. Controllate l'ora di inizio, in modo che non cada nel periodo in cui gli scambi non funzionano. Se su protezione completa da un pazzo anche).

Questo dovrebbe essere evitato in qualche modo.

L'algoritmo funziona, se solo non si esegue l'Expert Advisor durante il rollover, e funzionerà dopo il fine settimana.

 
Vitaly Muzichenko:

Questo dovrebbe essere evitato in qualche modo.

L'algoritmo funziona, a condizione di non eseguire l'Expert Advisor su un rollover, cosa che accadrà sempre dopo il fine settimana.

Un controllo, che dovrebbe essere comunque evitato, dovrebbe essere sostituito da qualcosa. Il tempo tra i ticchettii. Non troppo costoso. e se il tempo tra i tick è più di 10 secondi, qualcosa non va.

 
Vitaly Muzichenko:

Questo dovrebbe essere evitato in qualche modo.

L'algoritmo funziona, a condizione di non eseguire l'Expert Advisor su un rollover, cosa che accadrà sempre dopo il fine settimana.

Dobbiamo fare parametri temporali separati per il rollover: inizio/fine.
E non fare nulla in quel momento (tranne il commento "rollover, aspetta").

 
Taras Slobodyanik:

Devi fare dei parametri temporali separati per il rollover: inizio/fine.
E non fare nulla in quel momento (tranne il commento "rollover, aspetta").

C'era un parametro "lavora in base al tempo", ho cambiato dealing e ho iniziato i gufi - l'affare è stato aperto sul rollover.

Il tempo di negoziazione è risultato essere -1 gmt, invece del solito +2gmt.

Ecco perché c'era un gran desiderio di allontanarsi dalla prescrizione del tempo.

 
Vitaly Muzichenko:

C'era un parametro "Work by time", ho cambiato dealing e ho iniziato i gufi - il trade è stato aperto al rollover.

Il tempo di negoziazione è risultato essere -1 gmt, invece del solito +2gmt.

Ecco perché ho un gran desiderio di allontanarmi dalla prescrizione del tempo.

Sostituire il "valore temporale" con la differenza tra il tempo in entrata (nuovo) e l'ultimo tempo calcolato funzionerebbe?

Cioè, sapremo che il nuovo tempo è arrivato:

-dal nuovo giorno

-da una nuova settimana

-o con una differenza superiore al valore specificato

 
Vitaly Muzichenko:

C'era un parametro "Work by time", ho cambiato dealing e ho iniziato i gufi - il trade è stato aperto al rollover.

Il tempo di negoziazione è risultato essere -1 gmt, invece del solito +2gmt.

Ecco perché c'era un gran desiderio di allontanarsi dalla prescrizione del tempo.

Fare se l'inizio della settimana "rollover, in attesa" e non importa il tempo del server