Errori, bug, domande - pagina 2180
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Chiaramente, zero.
Va bene impiegare 22 secondi per decidere che ci sono zero barre in un dato lasso di tempo?
Chiaramente un bug algoritmico nell'implementazione interna di Bars.
E non capisco come si fa a distinguere tra zero barre in un determinato lasso di tempo e questo zero:
Dalla documentazione: Se i dati per una serie temporale con i parametri specificati quando si chiama la funzione Bars() non sono ancora generati nel terminale, o i dati della serie temporale non sono sincronizzati con il server commerciale al momento della chiamata della funzione, la funzione restituirà un valore zero.
In altre parole, come posso distinguere tra un risultato nullo e un errore nullo?E non capisco come fai a distinguere tra zero barre in un dato timeframe e questo zero:
Dalla documentazione: Se i dati per una serie temporale con i parametri specificati quando viene chiamata la funzione Bars() non sono ancora stati generati nel terminale, o i dati della serie temporale non sono sincronizzati con il server commerciale nel momento in cui viene chiamata la funzione, la funzione restituirà zero.
L'origine dello zero non è importante in questa questione, ciò che è importante è che questo zero è nato dalla funzione Bars per sempre sotto forma di una coppia di decine di secondi.
Quello che non capisco è come si fa a distinguere tra zero barre in un determinato lasso di tempo e questo zero:
Dalla documentazione: Se i dati per una serie temporale con i parametri specificati quando si chiama la funzione Bars() non sono ancora stati generati nel terminale, o i dati della serie temporale al momento della chiamata della funzione non sono sincronizzati con il server commerciale, la funzione restituirà zero.
In altre parole, come posso distinguere tra un risultato nullo e un errore nullo?Pensateci. Se aveste il compito di creare un analogo della funzione Bars e vi fosse dato un array datetime, i valori dei cui elementi diminuiscono con un numero crescente, in altre parole, l'array è ordinato.
Pensi che sarebbe difficile implementare un algoritmo che cerchi il numero di elementi di un tale array ordinato in un dato intervallo di tempo? E se non c'è una sola barra nell'intervallo dato o l'array non è stato ancora inizializzato, dovremmo restituire zero.
No - l'algoritmo è abbastanza semplice. Cosa può funzionare per 22 secondi?
In questa domanda, l'origine dello zero non è importante, ciò che è importante è che questo zero è nato dalla funzione Bars per secoli, sotto forma di un paio di decine di secondi.
Proprio l'origine è importante, perché se ::Bars() restituisse -1 invece di 0 (come ora) in caso di errore della storia, non ci sarebbe alcun ritardo. Ma ora 0 è interpretato come un errore e il ritardo è dovuto alle ripetizioni interne https://www.mql5.com/ru/forum/1111/page2200#comment_6955559
Inoltre, supponiamo di introdurre un controllo aggiuntivo e il ritardo scompare. Poi cosa è successo? Hai zero. È un risultato o un errore?
Questo è molto probabilmente dovuto al caricamento della storia
La cosa divertente è che la prima stampa viene elaborata senza ritardo, cioè la storia da H4 è già caricata.
E se cambiate CopyTime H4 in W1, non ci sarà alcun ritardo. Significa che anche la storia per W1 è già caricata.
È solo che Bars viene inibito dall'intervallo di tempo tra CurrentTime() e il tempo di apertura della barra zero.
È l'origine che conta, perché se ::Bars() restituisse -1 invece di 0 (come fa ora) in caso di errore della storia, non ci sarebbe alcun ritardo. Ma ora 0 viene interpretato come un errore e il ritardo si verifica a causa delle ripetizioni interne https://www.mql5.com/ru/forum/1111/page2200#comment_6955559.
Inoltre, supponiamo che venga introdotto un controllo aggiuntivo e che il ritardo sia sparito. Poi cosa è successo? Tu hai zero. È un risultato o un errore?
Non importa in tutti i miei algoritmi se il risultato di zero è una barra che non colpisce nell'intervallo dato o l'assenza di array come tale.
Lei sta conducendo lontano dal problema.
Stai allontanando il problema.
Io sto esponendo l'essenza del problema, voi siete fissati sul vostro caso particolare. A giudicare dal tuo post precedente, non hai ancora capito quando si verifica un ritardo (oltre alla causa), anche se la pagina precedente spiega tutto in dettaglio.
Forse questo script può aiutarti a capire
Io sto esponendo l'essenza del problema, mentre voi vi concentrate sul vostro caso particolare. A giudicare dal tuo messaggio precedente, non hai ancora capito quando si verifica un ritardo (questo è oltre alla ragione), anche se la pagina precedente lo spiega in dettaglio.
Ho già formulato sopra la mia opinione su quando si verifica il ritardo.
Ancora una volta:
Bars si blocca se start_time è nell'intervallo dal tempo di apertura della barra zero del TF richiesto a TimeCurrent(). (Solo un'ipotesi, ma verificata con la pratica)
Sì, l'errore si verifica in un caso speciale. Ma i casi privati non dovrebbero essere nelle funzioni standard incorporate del linguaggio di programmazione.
E il tuo "punto" non è il punto, perché stai semplicemente citando il riferimento al comando Bars, che conosco perfettamente. Non c'è un codice di errore nella funzione Bars perché non è necessario.
Tanto più che in questo caso abbiamo a che fare con array di serie temporali completamente formati.
Questo può essere visto chiaramente nel codice leggermente modificato del mio script:
Risultato:
Forse questo script aiuterà a capire
Il tuo script dimostra questo problema: l'impiccagione.
perché l'intervallo di tempo start_time - stop_time è all'interno della barra settimanale.
Se si va al di fuori della barra settimanale, allora non c'è nessun blocco:
Grazie per l'esempio più chiaro
In MT4 le funzioni CopyHigh, CopyLow (non ho guardato le altre) hanno causato un errore critico quando non c'era storia nel tester. EA è stato testato su H1 e la richiesta era da M1
1 15:14:35.410 2017.01.04 19:54:24 Access violation read to 0x0A971FE8 in 'C:\Users\Halyna\AppData\Roaming\MetaQuotes\Terminal\287469DEA9630EA94D0715D755974F1B\MQL4\Experts\____________.ex4'
3 15:14:35.465 2017.01.04 19:54:24 Il passaggio dei test si è fermato a causa di un errore critico nell'EA