Errori, bug, domande - pagina 3027
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
Gli indicatori sono il mio punto debole ))))
Ma!
O io non capisco proprio niente, o lei si sbaglia di poco.
Per quanto ne so, prev_calculated è un contatore di dati non calcolati. E una volta contati i dati in arrivo, quel contatore viene azzerato... Tipo, questo è tutto, amico, niente più nuovi dati da calcolare.... )))
E per quale motivo l'indicatore dovrebbe ricalcolare completamente in un caso simile - non lo so!
---------------
Ha mentito un po' ))))
Non sono gli indicatori che vengono ricalcolati, ma gli "indici" vengono ricalcolati per farli "sembrare belli" sulla storia ;)
Il contatore viene azzerato per ragioni al di fuori del controllo del programmatore, come se l'indicatore funzionasse per la prima volta!
È così per ogni nuovo bar? Vengono rassicurati, vero?
Se non ogni barra, ci sono diverse ragioni per resettare il pre_calc.
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
Andrey Dik, 2021.05.27 13:53
cioè, il contatore pre_calcolato viene azzerato non appena appare la nuova barra del timeframe. significa che l'indicatore viene ricalcolato di nuovo come se fosse stato lanciato la prima volta.
Le è familiare una tale costruzione?
il problema non è nella logica EA (ridisegnare, non ridisegnare, sottodisegnare o altro) ma nel fatto che prev_calculated viene resettato mentre nessuno gli ha chiesto di farlo!
Credo che il problema sia:
Non lasciate che l'indicatore chiamato su un altro TF calcoli ogni tick, e poi lo chiamate e c'è una sincronizzazione della storia e del calcolo da zero di quell'indicatore
Ho creato un test. l'indicatore chiamato conta tutto e non si resetta a prev_calculated == 0
Ho disegnato la chiusura nell'indicatore e riavvolgo l'evento con una nuova barra e prev_calculated == 0 :
chiamate questo indicatore (ottenete gli ultimi 2 valori del buffer) e disegnate anche la chiusura sul vostro TF:
ha eseguito l'ultimo indicatore su M1 , log:
2021.05.27 21:48:34.196 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:48:00
2021.05.27 21:48:34.197 tst_tf (EURUSD,M1) tst_tf prev_calculated == 0
2021.05.27 21:48:34.197 tst_tf (EURUSD,M1) Errore CopyBuffer # 4806
2021.05.27 21:48:34.197 tst (EURUSD,M5) tst Nuova barra 2021.05.27 21:45:00
2021.05.27 21:48:34.197 tst (EURUSD,M5) tst prev_calculated == 0
2021.05.27 21:49:01.636 tst_tf (EURUSD,M1) tst_tf new bar 2021.05.27 21:49:00
2021.05.27 21:50:00.149 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:50:00
2021.05.27 21:50:00.149 tst_tf (EURUSD,M5) tst Nuova barra 2021.05.27 21:50:00
2021.05.27 21:51:01.789 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:51:00
2021.05.27 21:52:02.832 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:52:00
2021.05.27 21:53:00.920 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:53:00
2021.05.27 21:54:02.778 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:54:00
2021.05.27 21:55:00.308 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:55:00
2021.05.27 21:55:00.308 tst_tf (EURUSD,M5) tst Nuova barra 2021.05.27 21:55:00
2021.05.27 21:56:00.118 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:56:00
2021.05.27 21:57:00.419 tst_tf (EURUSD,M1) tst_tf Nuova barra 2021.05.27 21:57:00
È così in ogni nuovo bar? Sono sovra-assicurati o qualcosa del genere...
Se non su ogni barra, ci sono diverse ragioni per resettare il pre_calc.
esattamente su ogni nuova barra del TF maggiore.
Per esempio, se l'indicatore lavora su M1 e accede all'indicatore su M5, allora ogni 5 minuti l'indicatore sarà completamente ricalcolato.
Credo che il problema sia:
Non lasciate che l'indicatore chiamato su un altro TF calcoli ogni tick e poi lo chiamate e c'è una sincronizzazione storica e un calcolo da zero di quell'indicatore
Ho creato un test. l'indicatore chiamato conta tutto e non si resetta a prev_calculated == 0
Ho disegnato la chiusura nell'indicatore e riavvolgo l'evento con una nuova barra e prev_calculated == 0 :
chiamate questo indicatore (ottenete gli ultimi 2 valori del buffer) e disegnate anche la chiusura sul vostro TF:
Controllo la sincronizzazione dei dati sul TF superiore richiesto (M5) e la prontezza dell'indicatore su di esso, se non è pronto, allora esco.
Di conseguenza, l'indicatore funziona solo una volta all'apertura della barra M1, e non ad ogni tick:
Spero che gli sviluppatori ascoltino le mie suppliche.
Controllo la sincronizzazione dei dati sul TF superiore richiesto (M5) e la prontezza dell'indicatore su di esso, se non è pronto, allora esco.
Di conseguenza, l'indicatore funziona solo una volta all'apertura della barra M1, e non ad ogni tick:
Spero che gli sviluppatori ascoltino le mie suppliche.
questo non dovrebbe funzionare correttamente negli indicatori:
se non mi sbaglio, nell'aiuto c'è un walkthrough dello script per la paginazione dei dati per tutti i TF e ci dovrebbe essere un avviso che i dati storici non possono essere richiesti dall'indicatore a causa del fatto che l'indicatore lavora in modo asincrono
e si raccomanda di usare BarsCalculated() una volta dopo aver legato l'handle
UPD: script per la paginazione della storia e spiegazione del perché non funziona negli indicatori:https://www.mql5.com/ru/docs/series/timeseries_access
Controllo la sincronizzazione dei dati sul TF superiore richiesto (M5) e la prontezza dell'indicatore su di esso, se non è pronto, allora esco.
Di conseguenza, l'indicatore funziona solo una volta all'apertura della barra M1, e non ad ogni tick:
Devo davvero usare il mio pre-calcolo personalizzato? Spero che gli sviluppatori ascoltino le mie suppliche.
A cosa serve un tale assegno?
Sarebbe molto più semplice scrivere return 0; senza condizione e basta.
Ad ogni nuova barra, la condizione sarà soddisfatta e tutte le barre saranno ricalcolate indipendentemente dalla sincronizzazione. Avete scritto un codice sconsiderato e fate finta che sia un bug terminale...
Che senso ha un tale controllo?
Sarebbe più facile scrivere return 0; senza condizione e basta...
La condizione sarà soddisfatta ad ogni nuova barra e tutte le barre saranno ricalcolate indipendentemente dalla sincronizzazione. Avete scritto un codice avventato e l'avete spacciato per un bug terminale...
ripensaci.