Indicatore che si corrompe - pagina 2

 
jjc:

Per esempio, se attualmente sono le 8 del mattino, qualsiasi cosa nel codice che presuppone che (a) la barra delle 7 del mattino sia di 60 barre fa, o anche (b) che esista una barra delle 07:00.

Buona osservazione, non avevo apprezzato il fatto che i grafici fossero M1 quando li ho guardati per la prima volta... è abbastanza comune che le barre M1 manchino nei momenti di calma, durante la notte per esempio.
 
RaptorUK:
Buon punto, non avevo apprezzato che i grafici fossero M1 quando li ho guardati per la prima volta... è abbastanza comune che le barre M1 manchino nei momenti di calma, durante la notte per esempio.
In questo caso penso che sia più probabile che si tratti di una perdita temporanea di connessione al broker, ma il principio e le implicazioni sono le stesse.
 
jjc:
In questo caso penso che sia più probabile che si tratti di una perdita temporanea di connessione al broker, ma il principio e le implicazioni sono le stesse.
...È anche notevole nella schermata "Move Error" che le linee viola smettono di essere disegnate nel punto in cui sembra che ci sia una barra M1 mancante.
 
AnkaSoftware:

Hmm, "i nuovi dati storici vengono aggiunti al grafico", come? L'indicatore viene avviato e lasciato indisturbato. Abbiamo un lookback fisso di 1000 barre.

L'

indicatore non sta caricando alcun dato storico.

Qualcuno del team di sviluppo può dare un'occhiata a questo?

Hai detto . . . "Ho sviluppato un indicatore che funziona bene per le prime 16 ore circa" . . . 16 ore x 60 minuti = 960 barre ... cosa succede se riduci il lookback a 500 barre, hai problemi dopo 8 ore?
 

Jic, grazie per le osservazioni.

I test vengono effettuati su un server CNS VPS con connessione affidabile e il conto demo utilizzato per i test sono con i broker IBFX e VantageFX

Faccio un RefreshRates() ad ogni tick e uso le normali funzioni timeseries per accedere ai dati delle barre. Il codice utilizzato per aggiornare gli indicatori è riportato nel mio post precedente, vedi funzione DrawMoveEx. Credo che la TimeSeries non abbia barre mancanti da 0 a 'Bars -1'. Fammi sapere se questa supposizione non è corretta.

Allego un'altra istantanea, con scala temporale corretta, e senza scorrimento a destra (con i dati attuali di IBFX).

Hai avuto modo di guardare il file excel allegato al post 2011.10.07 15:30

 

AnkaSoftware:
I believe the TimeSeries does not have missing bars from 0 to 'Bars -1'. Let me know if this assumption is incorrect.

Questa supposizione appare certamente errata perché il tuo screenshot originale "Move Error" ha 16 barre tra ogni marker dell'asse X - puoi contarle da solo - ma uno dei periodi copre 21 anziché 16 minuti. E, come dice RaptorUK, non è una supposizione che puoi tranquillamente fare nel tuo codice. Non ci sarà necessariamente uno scambio ogni singolo minuto del giorno - anche se sarei sorpreso se non ci fosse su GBPUSD al di fuori delle principali festività - e quindi non ci sarà necessariamente una barra M1 per ogni singolo minuto.

Se credi che non ci siano barre mancanti - quando è dimostrabile che ci sono barre mancanti in uno dei tuoi screenshot - allora probabilmente stai codificando sulla base di questa supposizione/convinzione. Non considererei il tuo ultimo screenshot come una controprova, perché potrebbero esserci (a) dati mancanti prima del periodo mostrato nello screenshot che (b) stanno in qualche modo influenzando i calcoli per le barre che sono mostrate nello screenshot.

La cosa più sospetta è che le linee viola si fermano nello screenshot originale durante il periodo in cui c'è chiaramente una barra mancante. Non potrei commentare ulteriormente, o fare analisi dei tuoi fogli di calcolo, senza vedere il codice completo.

 
AnkaSoftware:

Jic, grazie per le osservazioni.

I test vengono effettuati su un server CNS VPS con connessione affidabile e il conto demo utilizzato per i test sono con i broker IBFX e VantageFX

Faccio un RefreshRates() ad ogni tick e uso le normali funzioni timeseries per accedere ai dati delle barre.

Probabilmente non è una causa del tuo problema, ma . RefreshRates() non fa differenza se stai usando queste funzioni: https: //docs.mql4.com/series RefreshRates aggiorna solo queste variabili: https://docs.mql4.com/predefined/variables
 
jjc:

Questa supposizione appare certamente errata perché il tuo screenshot originale "Move Error" ha 16 barre tra ogni marker dell'asse X - puoi contarle da solo - ma uno dei periodi copre 21 anziché 16 minuti. E, come dice RaptorUK, non è una supposizione che puoi tranquillamente fare nel tuo codice. Non ci sarà necessariamente uno scambio ogni singolo minuto del giorno - anche se sarei sorpreso se non ci fosse su GBPUSD al di fuori delle principali festività - e quindi non ci sarà necessariamente una barra M1 per ogni singolo minuto.

Se credi che non ci siano barre mancanti - quando è dimostrabile che ci sono barre mancanti in uno dei tuoi screenshot - allora probabilmente stai codificando sulla base di questa supposizione/convinzione. Non considererei il tuo ultimo screenshot come una controprova, perché potrebbero esserci (a) dati mancanti prima del periodo mostrato nello screenshot che (b) stanno in qualche modo influenzando i calcoli per le barre che sono mostrate nello screenshot.

La cosa più sospetta è che le linee viola si fermano nello screenshot originale durante il periodo in cui c'è chiaramente una barra mancante. Non potrei commentare ulteriormente, o fare analisi dei tuoi fogli di calcolo, senza vedere il codice completo.

Raptor, verificherò "cosa succede se riduci il lookback a 500 barre, hai problemi dopo 8 ore?

JIC, si prega di notare che il problema non si verifica su piattaforme a 32 bit. Ho fornito del codice in uno dei post precedenti.

 
AnkaSoftware:
Credo che la TimeSeries non abbia barre mancanti da 0 a 'Bars -1'. Fatemi sapere se questa supposizione non è corretta.

Certo che no, ci sono candele di Bars numerate da 0 a Bars-1. ArraySize(Close) == Bars sempre.

Tuttavia ci sono sempre barre saltate. Da venerdì 21:59z la prossima barra è domenica 22:00z. Fine settimana e vacanze e minuti senza attività.

Non potete assumere che Time[x] == Time[x+1] + 60*Period() non sarà su una barra saltata.

Se vuoi aiuto con il TUO indicatore, posta il TUO codice - non ci sono lettori del pensiero qui.

 
AnkaSoftware:

Alcune ulteriori informazioni -

a) La corruzione degli indicatori avviene solo su piattaforma Windows 64 bit

b) Ho fatto un dump dell'array di indicatori prima della corruzione e dopo la corruzione - gli stessi sono disponibili nel file xls allegato con i commenti.

Dai un'occhiata ai valori temporali Unix nel tuo foglio di calcolo, gli spazi tra ogni valore adiacente dovrebbero essere 60, 60 secondi, ci sono alcuni spazi di 240 secondi e almeno uno di 120 secondi. Il tuo codice è progettato per gestire le barre M1 mancanti?