In linea di principio lo era, l'errore era probabilmente nel fatto che il mio indicatore viene creato nella funzione OnTick e i dati vengono copiati immediatamente nello stesso tick. L'ho capito durante la notte, ora cercherò di trasferire le maniglie degli indicatori alla funzione OnInit.
sss20192: L'errore era nel manico dell'indicatore creato nella funzione OnTick e i dati vengono copiati nello stesso tick. L'ho capito durante la notte, ora cercherò di trasferire le maniglie degli indicatori alla funzione OnInit.
Ma finora non avete né un controllo per la creazione di maniglie, né un controllo per il calcolo degli indicatori e un controllo per la copia. L'idea di spostare l'inizializzazione degli handle a OnInit() è corretta.
Inoltre, aggiungi la linea Print(MacdArray[0]) all'inizio di OnTick() - per vedere quale valore spazzatura è contenuto nell'array prima di iniziare a copiare i buffer.
Da aggiungere. Naturalmente, usare GetLastError() dopo la funzione stessa può essere una peculiarità dello stile di programmazione. Se non mi sbaglio, un valore nullo di GetLastError() non significa sempre che la funzione ha funzionato con successo.
Yedelkin: Ma finora non avete né un controllo per la creazione di maniglie, né un controllo per il calcolo degli indicatori e un controllo per la copia. L'idea di spostare l'inizializzazione degli handle a OnInit() è corretta.
Ma solo per la prima volta. Se in qualsiasi altro punto del programma si scopre che qualche maniglia non è valida, dobbiamo cercare di ottenerla di nuovo. Pertanto, non possiamo dire che il codice scritto per ottenere gli handle in OnInit() risolverà completamente il problema e sarà corretto al 100%. ))
Yedelkin: L'idea di spostare l'inizializzazione degli handle a OnInit() è buona.
Ma solo per la prima volta. Se in qualsiasi altro punto del programma si scopre che qualche maniglia non è valida, si deve cercare di ottenerla di nuovo. Pertanto, non possiamo dire che il codice scritto per ottenere gli handle in OnInit() risolverà completamente il problema e sarà corretto al 100%. ))
Stai dicendo che l'idea di spostare l'inizializzazione delle maniglie a OnInit() da OnTick() è sbagliata in sé?
sss20192: Ho controllato quanti dati sono stati copiati con la funzione CopyBuffer, scrive sempre 1. E non c'è nessun errore, ma i dati sono ancora sbagliati.
Ho questo risultato di questo codice nel tester:
//---
L'unica cosa che ho fatto prima del test è stata solo la conversione dei valori dell'indicatore prima dell'output nel log:
Yedelkin: Stai dicendo che l'idea di spostare l'inizializzazione del gestore a OnInit() da OnTick() è sbagliata di per sé?
Se solo in OnInit() e da nessun'altra parte, allora sì - sbagliato. La prima volta che cerchiamo di ottenere un handle in OnInit(). Poi, prima di ogni tentativo di ottenere i dati dell'indicatore, controlliamo se la maniglia è valida. Se è valido, otteniamo i dati, se non lo è, cerchiamo di ottenere di nuovo l'handle.
Yedelkin: stai dicendo che l'idea di spostare l'inizializzazione delle maniglie a OnInit() da OnTick() è sbagliata di per sé?
Se solo in OnInit() e da nessun'altra parte, sì - sbagliato. La prima volta che cerchiamo di ottenere un handle in OnInit(). Poi, prima di ogni tentativo di ottenere i dati dell'indicatore, controlliamo se l'handle è valido. Se è valido, otteniamo i dati, se non lo è, cerchiamo di ottenere di nuovo l'handle.
E senza "se"? E in relazione a questa particolare situazione? La maniglia dell'indicatore è stata creata nella funzione OnTickdurante ogni tick, e i dati vengono copiati durante lo stesso tick. Significa che la stessa maniglia dell'indicatore è stata richiesta ogni volta, senza controllarne la validità/invalidità. In questo contesto, continuerete a sostenere che l'idea di trasferire l'inizializzazione degli handle a OnInit() da OnTick() è sbagliata di per sé?
PS. Sembra che lei abbia aiutato l'uomo, quindi la questione può essere considerata chiusa.
L'errore era nel manico dell'indicatore creato nella funzione OnTick e i dati vengono copiati nello stesso tick. L'ho capito durante la notte, ora cercherò di trasferire le maniglie degli indicatori alla funzione OnInit.
Non ha funzionato. Ecco il codice ora
I seguenti messaggi appaiono nel log
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:01 6.187448020344988e-005 0
Ed è sempre così. Non sembra esserci un errore di copiatura.
Ma finora non avete né un controllo per la creazione di maniglie, né un controllo per il calcolo degli indicatori e un controllo per la copia. L'idea di spostare l'inizializzazione degli handle a OnInit() è corretta.
Inoltre, aggiungi la linea Print(MacdArray[0]) all'inizio di OnTick() - per vedere quale valore spazzatura è contenuto nell'array prima di iniziare a copiare i buffer.
Da aggiungere. Naturalmente, usare GetLastError() dopo la funzione stessa può essere una peculiarità dello stile di programmazione. Se non mi sbaglio, un valore nullo di GetLastError() non significa sempre che la funzione ha funzionato con successo.
Ma finora non avete né un controllo per la creazione di maniglie, né un controllo per il calcolo degli indicatori e un controllo per la copia. L'idea di spostare l'inizializzazione degli handle a OnInit() è corretta.
tol64:
Ma solo per la prima volta. Se in qualsiasi altro punto del programma si scopre che qualche maniglia non è valida, si deve cercare di ottenerla di nuovo. Pertanto, non possiamo dire che il codice scritto per ottenere gli handle in OnInit() risolverà completamente il problema e sarà corretto al 100%. ))
Ho controllato quanti dati sono stati copiati con la funzione CopyBuffer, scrive sempre 1. E non c'è nessun errore, ma i dati sono ancora sbagliati.
Ho questo risultato di questo codice nel tester:
//---
L'unica cosa che ho fatto prima del test è stata solo la conversione dei valori dell'indicatore prima dell'output nel log:
Stai dicendo che l'idea di spostare l'inizializzazione del gestore a OnInit() da OnTick() è sbagliata di per sé?
Ho ottenuto questo risultato di questo codice nel tester:
//---
L'unica cosa che ho fatto prima del test è stata di convertire semplicemente i valori dell'indicatore prima di emetterli nel log:
E senza "se"? E in relazione a questa particolare situazione? La maniglia dell'indicatore è stata creata nella funzione OnTick durante ogni tick, e i dati vengono copiati durante lo stesso tick. Significa che la stessa maniglia dell'indicatore è stata richiesta ogni volta, senza controllarne la validità/invalidità. In questo contesto, continuerete a sostenere che l'idea di trasferire l'inizializzazione degli handle a OnInit() da OnTick() è sbagliata di per sé?
PS. Sembra che lei abbia aiutato l'uomo, quindi la questione può essere considerata chiusa.