Errori, bug, domande - pagina 1221

 
Fry:

Errore

Sfida:


Porta a un messaggio nel registro:

HistoryBase 'RTS-12.14' 1 barre non valide rimosse


Sono stufo di questo errore. Tra le altre cose, sta anche caricando il canale di comunicazione.

Lo stesso errore appare per altri motivi non identificati.

Ma, curiosamente, non appare su molti altri strumenti. Appare il più sui futures RTS.


Ho scritto a servicedesk qualche mese fa - nessuna risposta(Richiesta iniziata: 2014.07.28 13:41, #1046215).


Allego il codice dell'induke che causa questo errore su ogni tick dell'attuale (e passato) RTS futures (conto demo con broker "O..."):

È un bug del terminale? O al broker? O io?

Cosa devo fare? Come conoscere altrimenti il numero di barre sul timeframe D1?

Buona sera. L'avete provato?

SeriesInfoInteger( _Symbol, PERIOD_D1, SERIES_BARS_COUNT );
 
Tapochun:

Buona sera. Avete provato questo?

Buona sera anche a lei. L'ho provato, è tutto uguale.

Il risultato è lo stesso. L'errore è nel log per ogni tick.

Grazie per l'idea. Se SeriesInfoInteger() non sta chiamando Bars internamente, allora è tutto più probabile che si tratti di un errore di dati "stretto" sul server del broker.

E questa è anche una risposta soddisfacente alla mia domanda.

Dopotutto, non è che non sappia dove l'errore salterà fuori, se posso evitarlo, ecc.

 
Fry:

Buona sera anche a voi. Provato - stessa cosa.

Il risultato è lo stesso. L'errore è nel log per ogni tick.

Grazie per l'idea. Se SeriesInfoInteger() non sta accedendo a Bars internamente, allora è sempre più probabile che si tratti di un giunto di dati "stretto" sul server del broker.

E anche questa è una risposta soddisfacente alla mia domanda.

Dopo tutto, non so dove salterà fuori l'errore, se posso evitarlo, ecc.

Forse c'è davvero un errore al broker, poiché il messaggio cancella alcune barre "rotte"... o i dati vengono "uccisi" lungo la strada. Ma questa è solo un'ipotesi da parte mia. A proposito, GetLastError() mi dà qualcosa? Sì, e cosa restituisce Bars()?
 
Tapochun:
Probabilmente, è davvero un errore del broker, perché il messaggio cancella alcune barre "rotte"... o i dati vengono "uccisi" lungo la strada. Ma questa è solo un'ipotesi da parte mia. A proposito, GetLastError() mi dà qualcosa? Sì, e cosa restituisce Bars()?

Se Bars() restituisce 0, allora errore 4001 (ERR_INTERNAL_ERROR 4001 Unexpected internal error).

Ma a volte Bars() restituisce ancora il numero di barre e allora non c'è errore (Bars() non cambia lo stato di errore).

 

MT4 build 722, ME4 build 989

Cercando di copiare i dati attuali della barra zero:

      MqlRates rates[1];
      int n=CopyRates(_Symbol,PERIOD_CURRENT,time[0],1,rates); 
      Print("n=",n);

Stampa n=0, cioè i dati non vengono copiati.

Sesi scrive_Period invece diPERIOD_CURRENT , funziona.

Se si copiano dati di barre non nulle (tempo[1], ecc.), funzionerà, indipendentemente dal fatto che si scrivaPERIOD_CURRENT o_Period.

P.S. Lo vuoi in un cd?

 
Fry:

Se Bars() restituisce 0, allora errore 4001 (ERR_INTERNAL_ERROR 4001 Unexpected internal error).

Ma a volte Bars() restituisce ancora il numero di barre e allora non c'è errore (Bars() non cambia lo stato di errore).

L'"imprevisto" dell'errore suggerisce ancora una volta che qualcosa non ha il tempo di arrivare e viene cancellato, in conseguenza del quale si verifica l'errore. Per quanto ho capito, dovete trovare il numero di barre su D1... Dovete farlo su ogni tick? In alternativa, scrivete una funzione che richiederà i dati una volta al minuto o meno. E vedere se si verifica un errore.

 
kPVT:

MT4 build 722, ME4 build 989

Cercando di copiare i dati attuali della barra zero:

Stampa n=0, cioè i dati non vengono copiati.

Sesi scrive_Period invece diPERIOD_CURRENT , funziona.

Se si copiano dati di barre non nulle (tempo[1], ecc.), funzionerà, indipendentemente dal fatto che si scrivaPERIOD_CURRENT o_Period.

P.S. Lo vuoi in un cd?

Sera. Prova... anche se se c'è un'alternativa, è improbabile che si affrettino a cercare questo difetto. Ho due domande in sospeso da una settimana ormai... nessuna risposta, nessuna parola.
 
Fry:

Cosa fare? Come altro posso sapere il numero di barre sul timeframe D1?

L'indicatore funziona su D1?
 
MigVRN:
L'indicatore funziona su D1?

No, certo che no. Questo è il punto. Per quando l'indicatore stesso è in esecuzione su D1, abbiamo banalmente"constint rates_total, // size of input timeseries".

Ecco un esempio concreto del suo utilizzo.

Abbiamo inizializzato un paio di indicatori e ottenuto le loro maniglie (qui è tutto a posto). Poi, nella funzione ontik dobbiamo assicurarci che al momento della chiamata tutti i dati siano stati calcolati sugli handle richiesti (indici esterni). E questo è quello che faccio:

   //not all data may be calculated
   if (BarsCalculated(hCCI)<rates_total) {Print("Not all data of trend CCI is calculated. Error#",GetLastError()); return(0);}
   if (Period()!=PERIOD_D1 && BarsCalculated(hDayTrand)<Bars(Symbol(),PERIOD_D1)) return(0);

E in questo caso hDayTrand è un handle ricorsivo (lo stesso indicatore, solo D1 è caricato).

Mi sembra di fare tutto secondo la documentazione e gli esempi del terminale e le raccomandazioni. Il risultato è che tutta questa roba è rimescolata nel registro e mangia megabyte al minuto.

 
Fry:

No, certo che no. Questo è il punto. Per quando l'indicatore stesso è in esecuzione su D1, abbiamo banalmente"constint rates_total, // size of input timeseries".

Ecco un esempio concreto del suo utilizzo.

Abbiamo inizializzato un paio di indicatori e ottenuto le loro maniglie (qui è tutto a posto). Poi, nella funzione ontik dobbiamo assicurarci che al momento della chiamata tutti i dati sugli handle richiesti (indici esterni) siano già stati calcolati. E questo è quello che faccio:

E in questo caso hDayTrand è un handle ricorsivo (lo stesso indicatore, solo D1 è caricato).

Mi sembra di fare tutto secondo la documentazione e gli esempi del terminale e le raccomandazioni. Il risultato - tutta questa roba è scarabocchiata nel registro e mangia megabyte al minuto.

IMHO, devi contattare il broker (Otkrytie, così ho capito). Gli account reali non ce l'hanno, quindi è nelle impostazioni del server, molto probabilmente.