Simboli personalizzati. Errori, bug, domande, suggerimenti. - pagina 28

 

Solo pochi giorni fa ho riscontrato questo errore durante la creazione di un simbolo personalizzato. Ho ricontrollato molte cose a mano. Ho anche notato un bug molto strano, che dopo ArrayCopy alcuni tick hanno valori casuali. Poiché è stato piuttosto doloroso ripeterlo su macchina pulita, ho generato dai calchi un altro sintetico personalizzato, e l'atteggiamento verso i rapporti qui ultimamente è particolare, cioè ignorare completamente, non ho iniziato a fare un rapporto. Ma ha risolto il problema con una singola chiamata aCustomTicksAdd. Cioè tutti i tic all'inizio riempiti in un array, a quello copiati manualmente e poi da una chiamata al simbolo personalizzato. In questo modo, non vengono lanciati errori. Provate.

P.S. Devo aggiungere che mi sono imbattuto in ogni sorta di strani bug con CopyTicks, sono passato a CopyTicksRange.

 
fxsaber:

Ho guardato il codice più da vicino. Ti mancano dei tic quando ricevi delle porzioni. La situazione è possibile quando Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0.

Corrispondentemente, quando si aggiunge un salto, le bandiere potrebbero non corrispondere.


Lo sto omettendo intenzionalmente in questo test per garantire l'assenza di sovrapposizione, perché l'eziologia del problema non è ancora chiara, e potrebbe essere causato da zecche duplicate (per analogia con Andrey, ho deciso di escludere proprio questa possibilità con un metodo "rapido e sporco").

Per quanto riguarda le bandiere, si prega di elaborare. I contenuti delle zecche (comprese le bandiere) non cambiano mai, e non ho letto nulla su una qualche influenza delle bandiere sulla sequenza delle zecche. Almeno, la descrizione del codice di errore non dice nulla sulle bandiere.

 
Stanislav Korotky:

Riguardo alle bandiere, per favore approfondisci. Nessuno cambia il contenuto dei tick (comprese le bandiere), e non ho letto nulla riguardo a un'influenza delle bandiere sulla sequenza dei tick. Almeno la descrizione del codice di errore non dice nulla sulle bandiere.

Per quanto riguarda le bandiere, è un'ipotesi. Qualche tempo fa ho avuto un problema con loro, quindi ho generato io stesso delle bandiere per le zecche esterne prima di inviarle.


Per esempio, dopo il primo tick ha un prezzo d'offerta diverso, ma non c'è nessun flag su questo.

 

Non è chiaro perché questa linea, se la variabile _start con ms incrementato di uno non è usata altrove.
E quando la funzione esce, viene distrutta.
Per come la vedo io, lo spostamento temporale non è usato o ricordato da nessuna parte.
E perché si assegna qualcosa a questa variabile _start, che serve come variabile di ingresso.
Restituirà questo valore alla funzione while e c'è un deadlock nel suo utilizzo.
Quindi, il codice è piuttosto confuso e poco chiaro. O non capisco questo costrutto ))

_start = array[size - 1].time_msc + 1;
 
Roman:

Non è chiaro perché questa linea, se la variabile _start con ms incrementato di uno non è usata altrove.
E quando la funzione esce, viene distrutta.
Per come la vedo io, lo spostamento temporale non è usato o ricordato da nessuna parte.
E perché si assegna qualcosa a questa variabile _start, che serve come variabile di ingresso.
Restituirà questo valore alla funzione while e c'è un deadlock nel suo utilizzo.
Quindi, il codice è piuttosto confuso e poco chiaro. O forse non capisco questa costruzione))

Questo riferimento variabile è gettato in un parametro di funzione "sul posto" dal codice chiamante, cambia costantemente e viene utilizzato nelle iterazioni.

 
fxsaber:

Sulle bandiere - un'ipotesi. Una volta c'è stato un problema con loro, quindi per le zecche di terzi ho generato io stesso le bandiere prima di inviare.


Per esempio, dopo aver passato il primo tick ha un prezzo d'offerta diverso, ma non c'è nessun flag su questo.

L'idea è chiara. Ma senza la spiegazione di MQ rimarrà tutto al livello delle nostre speculazioni (in termini di possibile influenza sulla comparsa di questo o quell'errore).

 
Stanislav Korotky:

Questo riferimento variabile - gettato in un parametro di funzione "sul posto" dal codice chiamante, cambia costantemente e viene utilizzato nelle iterazioni.

Sì, non ho prestato attenzione al riferimento, e volevo offrire per questo, ma è lì.
Provate ad allocare esplicitamente una variabile per risparmiare tempo.

 

Nuovo mistero. Problema con CopyTicks sulla build 2507, funzionava bene sulle build precedenti (in particolare 2374).

Ridotto a un semplice script di test nell'applicazione. Chiede nuove zecche dal sondaggio precedente.

Subito dopo il primo passaggio riuscito del ciclo, lo script inizia a copiare i tick nell'array con l'ora nota per essere precedente a quella specificata nel parametro from, cioè dall'inizio del giorno corrente.

Qual è il problema?

File:
CopyTicks.mq5  1 kb
 
Stanislav Korotky:

Nuovo mistero. Problema con CopyTicks sulla build 2507, funzionava bene sulle build precedenti (in particolare 2374).

Ridotto a un semplice script di test nell'applicazione. Chiede nuove zecche dal sondaggio precedente.

Subito dopo il primo passaggio riuscito del ciclo, lo script inizia a copiare i tick nell'array con l'ora nota per essere precedente a quella specificata nel parametro from, cioè dall'inizio del giorno corrente.

Qual è il problema?

Confermo il bug nel 2509.

Questa variante non sembra fallire.

int size = CopyTicksRange(_Symbol, array, COPY_TICKS_ALL, cursor);
 
Ambiguità con i simboli personalizzati. È possibile creare due simboli che differiscono solo per le lettere maiuscole e minuscole (per esempio, "xEURUSD" e "XEURUSD"), ma aggiungere le virgolette a "duplicate" non funziona - CustomRatesUpdate restituisce 0, senza errore. Dobbiamo permettere nomi sensibili alle maiuscole e alle minuscole (per far funzionare pienamente tali caratteri), o non permettere di creare tali nomi "simili".
Motivazione: