Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 116
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
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.