Non è ottimizzato per le query multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate di massa.
In realtà mostra solo il contrario, la mia versione è l'unica corretta. (Anche l'iBarShift1 originale di questo codice è corretto).
Non è ottimizzato per le richieste multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate in blocco.
Многие ищут функцию iBarShift, которая была в языке MQL4 (например, 1,2,3). В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки. В качестве альтернативы многие программисты предложили свои варианты реализации этой функции на MQL5. Обнаружилось, что все 4 версии содержат ошибки (не воспроизводят в точности работу...
Non è ottimizzato per le query multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate di massa.
In realtà mostra solo il contrario, la mia versione è l'unica corretta. (Anche l'iBarShift1 originale di questo codice è corretto).
Non è ottimizzato per le richieste multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate in blocco.
Non sto parlando del tempo di elaborazione, ma del numero di barre.
Nell'immagine potete vedere che alle 8:37 il codice pensa che la barra più vicina sia quella del giorno precedente 23:00, ma in realtà la barra più vicina è quella delle 10:00. È più vicino sia matematicamente che logicamente.
Non sto parlando del tempo di elaborazione, sto parlando del numero di barra.
L'immagine mostra che alle 8:37 il codice considera che la barra più vicina sia quella del giorno precedente alle 23:00, ma in realtà la barra più vicina è quella delle 10:00. È più vicino sia in matematica che in logica.
L'ho scritto molto tempo fa. Non ricordo più, ma qualcosa mi ha confuso. Comunque, ora ho trovato solo una situazione anomala. Quando i dati dei simboli non ancora caricati possono restituire -1 e dovrebbero restituire 0.
Questo può essere controllato usando lo script per MQL4 che sto allegando.
Questo script prende un tempo casuale e un lasso di tempo casuale. Se il valore di iBarShiftX non corrisponde alla regolare funzione iBarShift, allora il messaggio via Print.
Se eseguite questo script su un simbolo appena aperto, vedrete degli errori. La ripetizione dello script sullo stesso simbolo non darà errori.
Ma è un'inezia. Nella mia versione è lo stesso problema.
Ho solo una lamentela sulla vostra versione: è molto complicata e lenta.
Ed ecco la mia funzione, che fa la stessa cosa, ma con un algoritmo semplice e molto più veloce:
int iBarShift1(conststring Symb,constENUM_TIMEFRAMES TimeFrame,datetime time)
{
return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
}
Puoi usarne uno ancora più corto senza la funzione:
Bars(Symb,TimeFrame,time+1,UINT_MAX);
Cerca di dimostrare il contrario. Trova una singola combinazione di parametri quando la tua funzione e la mia mostrano valori diversi.
Solo che non ho implementato l'ultimo parametro esatto, perché non capisco perché sia necessario. Personalmente non ne ho mai avuto bisogno.
Ma se qualcuno ne ha davvero bisogno, può essere implementato.
Ho lasciato la variante iBarShift3, perché gestisce erroneamente i buchi della storia. Si può aggiustare, ma non ne vedo il motivo, dato che l'opzione di cui sopra è sufficiente.
Ho lasciato l'opzione iBarShift3 perché non gestisce correttamente i buchi della storia. Si può aggiustare, ma non ne vedo il motivo, perché l'opzione di cui sopra è sufficiente.
I buchi sono dovuti alla mancanza di pro-trading sul bar, o ad altri? E come si manifesta l'imprecisione?
I buchi sono dovuti a una mancanza di pro-trading sul bar, o altro? E qual è l'imprecisione?
Prendiamo una domenica qualsiasi in cui non c'è commercio:
Print("iBarShift = "+IntegerToString(iBarShift (_Symbol,PERIOD_H1,D'01.04.2018 10:00:00')));
Print("iBarShift3 = "+IntegerToString(iBarShift3(_Symbol,PERIOD_H1,D'01.04.2018 10:00:00'))); // показывает на единицу меньше
Perché non provi la mia funzione? C'è una soluzione che neutralizza l'inizio e la fine delle barre nel tempo. Sembra calcolare tutto correttamente. Ed è più veloce nel tempo della vostra versione 3 più veloce. O il ramo è più importante?). O c'è un errore anche lì?) Lo uso da molto tempo....
Quale problema ha trovato?
Ecco un esempio della vostra funzione che funziona falsamente con il nome "BarShift1".
Ecco un esempio della vostra funzione che funziona falsamente - funziona con il nome "BarShift1"
In realtà mostra solo il contrario, la mia versione è l'unica corretta. (E l'iBarShift1 originale di questo codice è corretto).
La mia versione è stata progettata come una funzione indipendente, proprio come mql4 iBarShift.
Non è ottimizzato per le query multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate di massa.
In realtà mostra solo il contrario, la mia versione è l'unica corretta. (Anche l'iBarShift1 originale di questo codice è corretto).
Lamia versione è stata concepita per essere usata come funzione standalone, esattamente come mql4 iBarShift.
Non è ottimizzato per le richieste multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate in blocco.
Infatti mostra solo il contrario, la mia versione è l'unica corretta. (E l'iBarShift1 originale di questo codice è corretto).
La mia versione è stata progettata come una funzione indipendente, proprio come mql4 iBarShift.
Non è ottimizzato per le query multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate di massa.
In realtà mostra solo il contrario, la mia versione è l'unica corretta. (Anche l'iBarShift1 originale di questo codice è corretto).
Lamia versione è stata concepita per essere usata come funzione standalone, esattamente come mql4 iBarShift.
Non è ottimizzato per le richieste multiple, quindi il confronto dei tempi è irrilevante. @nicholishen ha pubblicato una buona libreria ottimizzata per le chiamate in blocco.
Non sto parlando del tempo di elaborazione, ma del numero di barre.
Nell'immagine potete vedere che alle 8:37 il codice pensa che la barra più vicina sia quella del giorno precedente 23:00, ma in realtà la barra più vicina è quella delle 10:00. È più vicino sia matematicamente che logicamente.
Non sto parlando del tempo di elaborazione, sto parlando del numero di barra.
L'immagine mostra che alle 8:37 il codice considera che la barra più vicina sia quella del giorno precedente alle 23:00, ma in realtà la barra più vicina è quella delle 10:00. È più vicino sia in matematica che in logica.
Forum sul trading, sistemi di trading automatico e test di strategia
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 indipendente, proprio come mql4 iBarShift.
Semplifichiamo.
Capisco la sua argomentazione. Non lo controllerò. A quanto pare, è il mio compito che differisce dalla logica accettata.
Quale problema ha scoperto?
L'ho scritto molto tempo fa. Non ricordo più, ma qualcosa mi ha confuso.
Comunque, ora ho trovato solo una situazione anomala.
Quando i dati dei simboli non ancora caricati possono restituire -1 e dovrebbero restituire 0.
Questo può essere controllato usando lo script per MQL4 che sto allegando.
Questo script prende un tempo casuale e un lasso di tempo casuale. Se il valore di iBarShiftX non corrisponde alla regolare funzione iBarShift, allora il messaggio via Print.
Se eseguite questo script su un simbolo appena aperto, vedrete degli errori. La ripetizione dello script sullo stesso simbolo non darà errori.
Ma è un'inezia. Nella mia versione è lo stesso problema.
Ho solo una lamentela sulla vostra versione: è molto complicata e lenta.
Ecco la vostra variante:
Ed ecco la mia funzione, che fa la stessa cosa, ma con un algoritmo semplice e molto più veloce:
Puoi usarne uno ancora più corto senza la funzione:
Cerca di dimostrare il contrario. Trova una singola combinazione di parametri quando la tua funzione e la mia mostrano valori diversi.
Solo che non ho implementato l'ultimo parametro esatto, perché non capisco perché sia necessario. Personalmente non ne ho mai avuto bisogno.
Ma se qualcuno ne ha davvero bisogno, può essere implementato.
Ho lasciato la variante iBarShift3, perché gestisce erroneamente i buchi della storia. Si può aggiustare, ma non ne vedo il motivo, dato che l'opzione di cui sopra è sufficiente.
Ho lasciato l'opzione iBarShift3 perché non gestisce correttamente i buchi della storia. Si può aggiustare, ma non ne vedo il motivo, perché l'opzione di cui sopra è sufficiente.
I buchi sono dovuti alla mancanza di pro-trading sul bar, o ad altri? E come si manifesta l'imprecisione?
I buchi sono dovuti a una mancanza di pro-trading sul bar, o altro? E qual è l'imprecisione?
Prendiamo una domenica qualsiasi in cui non c'è commercio:
Supponiamo di prendere la domenica in qualsiasi momento in cui non c'è commercio:
Quindi si vede lunedì? Questo è quello che voglio... :)