Analogo a iBarShift - pagina 10

 
Aleksey Vyazmikin:

Vuoi dire che si vede lunedì? Questo è ciò di cui ho bisogno... :)

Sì, beh, in effetti è un comportamento strano per una funzione standard. Dopo tutto, stiamo adattando i valori al suo "riferimento".

La funzione standard iBarShift di MQL4 restituisce il numero della barra di sinistra (cioè sabato in questo caso), e iBarShift3 restituisce il numero della barra di destra (cioè lunedì) quando l'ora richiesta colpisce il buco, che è più logico.

 
Nikolai Semko:

Sì, beh, in effetti è un comportamento strano per una funzione standard. Dopo tutto, abbiamo a che fare esattamente con l'adattamento dei valori al suo "benchmark".

La funzione standard iBarShift di MQL4, quando l'ora richiesta colpisce il foro, restituisce il numero della barra sinistra (cioè sabato in questo caso), e iBarShift3 restituisce il numero della barra destra del foro (cioè lunedì), il che ha più senso.

E cosa succederà se ora siamo nel buco (tempo reale) e ci aspettiamo di ricevere informazioni sulla barra, quale indice ci verrà offerto? Presumo che sarà "1" in MQL4, mentre per il terzo algoritmo sarà "0", o no?

Penso che la funzione MQL4 abbia un messaggio di "non guardare avanti", che è vero in una certa misura - tutto dipende dal compito.

 

Nikolai Semko :

...

Ho solo una lamentela sulla vostra opzione: è molto complicata e lenta.

Quando l'ho postato (4 anni fa) l'obiettivo principale era la precisione (di nuovo), perché tutte le altre versioni che ho trovato erano sbagliate (rispetto alla versione mql4).

So che può essere più veloce.

Cerca di dimostrare il contrario. Trova una singola combinazione di parametri quando la tua funzione e la mia mostrano valori diversi.

Nella maggior parte dei casi la funzione restituisce il risultato sbagliato.

Ma non ho implementato l'ultimo parametro esatto in esso, perché non capisco perché sia necessario. Personalmente non ne ho mai avuto bisogno.

Il requisito è di avere SOLO la versione mql4.

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

Analogo a iBarShift

Alain Verleyen, 2018.04.05 00:18

In realtà mostra solo il contrario, la mia versione è l'unica corretta. (E l'iBarShift1 originale di questo codice è corretto).

La mia versione è stata concepita come una funzione standalone, proprio come mql4 iBarShift .


PS: è necessario postare la versione inglese o la traduzione russa è corretta?

 
vladevgeniy:
Perché non provi la mia funzione? C'è una soluzione che regola l'inizio e la fine delle barre nel tempo. Sembra calcolare tutto correttamente. Ed è più veloce in termini di tempo della versione 3 del vostro più veloce. O il ramo è più importante?). O c'è un errore anche lì?) Lo uso da molto tempo....

Dov'è, la tua funzione, per provarla?

 
Aleksey Vyazmikin:

E cosa succede se ora siamo in un buco (tempo reale) e ci aspettiamo di ottenere informazioni su una barra, quale indice ci verrà offerto? Presumo che sarà "1" in MQL4, mentre per il terzo algoritmo sarà "0", o no?

Penso che la funzione MQL4 abbia il messaggio "non guardare avanti", che è vero in una certa misura - tutto dipende dal problema.

No, il primo è zero. In tempo reale funziona allo stesso modo.

 
Aleksey Vyazmikin:

E dov'è, la sua funzione, per provarla?

È alla fine della pagina 7).

int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime time){
datetime t1 = TimeCurrent()+10000000;
int ps = PeriodSeconds(timeframe);
double div = time/(double)ps;
double mant = div - MathFloor(div);
int ret = Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1;
return(ret);
}

Questo potrebbe essere più conveniente.

 
vladevgeniy:
Perché non provi la mia funzione? Ho una soluzione che compensa l'inizio e la fine delle barre nel tempo. Sembra calcolare tutto correttamente. Ed è più veloce nel tempo della terza versione del vostro più veloce. O il ramo è più importante?). O c'è un errore anche lì?) Lo uso da molto tempo....

È divertente ))))

Ecco la vostra funzione:

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   datetime t1=TimeCurrent()+10000000;
   int ps=PeriodSeconds(timeframe);
   double div=time/(double)ps;
   double mant=div-MathFloor(div);
   int ret=Bars(symbol,timeframe,(datetime)(time-(ps*mant)),t1)-1;
   return(ret);
  }

Dato che non conosci alcuni operatori matematici, come % - il resto della divisione

Semplifichiamo un po' la vostra funzione.

Ha funzionato:

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   time-=time%PeriodSeconds(timeframe);
   return(Bars(symbol,timeframe,time,UINT_MAX)-1);
  }

Ed ecco la mia funzione:

int iBarShift1(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time)
  {
   return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
  }

Molto simile. Davvero?

Solo che il tuo fa tutto molto male ed è più lento.

Potete provare con questo script in MQL4.

File:
 
Nikolai Semko:

No, il primo è zero. Funziona lo stesso in tempo reale.

OK - solo un algoritmo che mi mostra "-1" sui dati futuri oggi....

 
Nikolai Semko:

È divertente ))))


Sì, beh, dà delle incongruenze). Lo tirerò fuori ok.

 
vladevgeniy:

Beh, sì, dà delle incongruenze). Lo tirerò fuori ok.

Anch'io ho girato in tondo. Solo ora ho trovato la soluzione più breve.