Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 984
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
Ma il fatto è che. Il sonno non dovrebbe influenzare il ricalcolo dei dati nell'indicatore. C'è qualcosa che non va nel riempimento del buffer. Forse c'è un pezzo di codice riproducibile?L'indicatore è stato scritto su ordinazione - è un OOP selvaggio, non lo capisco :(
Ho passato tutta la notte con questo problema, mentre ho trovato la ragione della divergenza tra il tester e l'account reale, forse dopo aver dormito rimuoverò parte della logica segreta e la posterò per la revisione.
Ho affrontato un problema, l'EA basato sull'indicatore funziona correttamente sul conto reale, ma si trova nel tester, in modalità di generazione di tick sia per OHLC che per tutti i tick - il risultato è lo stesso. Il risultato dell'errore è il buffer vuoto dell'indicatore alla barra zero (solo quando c'è una nuova barra al TF superiore, che viene utilizzato per il calcolo dell'indicatore). Tuttavia, sono riuscito a far calcolare l'indicatore aggiungendo Sleep al mio Expert Advisor. Ma ho scoperto che a seconda del modo di generazione dei ticks questo Sleep dovrebbe essere diverso - per la generazione da tutti i ticks Sleep(15000) è sufficiente, mentre per OHLC Sleep(30000) è necessario.
Quindi la domanda sorge - la situazione con Sleep è normale, perché logicamente risulta che lì sono modellati diversi tempi di ritardo a seconda della modalità di generazione dei tick!
Cari sviluppatori, per favore spiegate la situazione con l'indicatore, perché io stesso non capisco quale sia la ragione - un errore nel codice o nel tester!
Sono pronto a darti l'indicatore e l'Expert Advisor in PM, ma dimmi a chi.
Se volete copiare il prezzo in un array, dovete controllare se la cronologia è disponibile e verificare che il prezzo non sia cambiato. A questo scopo, dobbiamo controllare se la cronologia per TF è disponibile, se non lo è, dovremmo provare a copiarla di nuovo e aspettare che sia stata caricata nel ciclo.
questa è una cattiva mano del programmatore se non lo sapeva
lo slittamento non è normalePer favore, spiega...
Premo il tasto = ottengo l'evento id = 0. Questo può essere ripetuto molte volte. Il risultato è lo stesso finché non si preme la barra spaziatrice.
Premuto la barra spaziatrice = ottengo l'evento id = 0. Dopo di che tutte le manipolazioni sulla tastiera non danno luogo ad alcun evento.
Per uscire dal torpore, premo il pulsante del mouse = ottengo l'evento id = 4. Dopo di che puoi cliccare di nuovo sulla tastiera = gli eventi arrivano per ogni clic. Finché non viene premuta la barra spaziatrice = con lo stesso risultato.
Domanda: sono un pazzo a non capire qualcosa o non dovrebbe essere così? Si prega di fornire un link.
Salve colleghi.
Domanda: In mql4, per calcolare il numero di posizioni, si può scrivere la funzione così
Come è implementato in mql5? Come posso calcolare le posizioni per numero magico o per tipo?
Aggiungere questa linea prima della funzione MQL4
e funzionerà in MT5.
Il problema degli indicatori è che le serie temporali potrebbero non essere ancora pronte, cioè non possono copiare subito il prezzo in un array. A questo scopo, dovremmo controllare se la storia per TF è disponibile, se non lo è, dovremmo provare a copiarla di nuovo e aspettare che sia stata caricata nel ciclo.
Questa è una brutta mano del programmatore se lui/lei non lo sa.
lo slittamento non va beneCome è possibile questo nel tester? Capisco che se il problema è sul reale o nel tester non c'è storia... Tuttavia, come dovrebbe essere questo test?
Gli sviluppatori stanno ignorando il mio messaggio, peccato.
Come è possibile questo nel tester? Capisco che se il problema è sul reale o nel tester non c'è storia... Tuttavia, come dovrebbe essere questo test?
Gli sviluppatori stanno ignorando il mio messaggio, peccato.
controlla se i prezzi sono copiati, se Copyclose o qualsiasi altra cosa restituisce -1 allora non sono copiati
controlla se i prezzi sono copiati, se Copyclose o qualsiasi altra cosa restituisce -1 allora non sono copiati
L'indicatore viene calcolato una volta all'apparizione di una nuova barra, il che è implementato, se ho capito bene, in questo modo:
è anche confermato da una semplice stampa.
Ecco perché la situazione non è chiara, se assumiamo che non c'è nessun prezzo da calcolare, l'indicatore sarà calcolato 1 volta e il buffer rimarrà non riempito, ma non è così - si riempirà se aggiungiamo sonno all'EA e aspettiamo. Forse, l'indicatore è lento nel calcolo e il tester semplicemente non lo aspetta? Ma come controllarlo?
L'indicatore viene calcolato 1 volta quando appare una nuova barra, il che è implementato, se ho capito bene, in questo modo:
Questo è confermato anche da una semplice stampa.
Ecco perché la situazione non è chiara, se assumiamo che non ci siano prezzi da calcolare, l'indicatore sarà calcolato una volta e il buffer rimarrà non riempito, ma non è questo il caso - si riempirà se aggiungiamo sonno all'EA e aspettiamo. Forse, l'indicatore è lento nel calcolo e il tester semplicemente non lo aspetta? Ma come controllarlo?
Forse dovrebbe essere cronometrato allora
Allora forse dovremmo usare un timer.
Sì, con il timer nell'EA il test va un po' più avanti che senza il timer, ma peggio che con Sleep, e il timer è essenzialmente lo stesso di Sleep.
Penso di aver capito qual è il problema, l'indicatore è calcolato utilizzando i dati di altri due indicatori e il codice chiede il numero di barre calcolate degli altri indicatori
e il numero previsto calcolato di barre
Se questi due valori non coincidono, il buffer non viene riempito.
Se ho capito bene, gli indicatori sono eseguiti in un thread e la loro priorità è distribuita dal momento della loro creazione, cioè risulta che l'indicatore che indirizzo dall'EA ha la priorità più alta ed esegue il suo calcolo per primo e dopo passa il thread a quegli indicatori che dovrebbero eseguire il calcolo (in base ai dati dei buffer).
Nella stampa vedo che se imposto Sleep di una dimensione sufficiente, il ricalcolo viene eseguito nell'indicatore (non capisco ancora come) e perché solo dopo 13 secondi?
Non c'è un timer nell'indicatore.
E cosa dovrei fare per ottenere un calcolo corretto, provare a usare while in EA prima di aspettare il valore nel buffer non aiuta - si blocca.