Indicatore che si corrompe - pagina 5

 
Rosh:

Cosa intendi per corruzioni? Ho appena allegato il tuo indicatore a EURUSD M1 e non vedo alcun valore.


Il terminale client 32bit MetaTrader 4 mostra la stessa immagine. Sei sicuro che l'indicatore fornito funzioni?
 
Rosh:

Il 32bit client terminal MetaTrader 4 scarpe la stessa immagine. Sei sicuro che l'indicatore fornito funzioni?
Sembra che tu abbia scaricato la versione originale del codice di esempio (timestamped 2011.10.11 18:06). Questo non disegna nulla per 25 minuti. In init(), imposta drawTime su TimeCurrent(), e attiva qualsiasi codice in start() solo una volta (drawTime + 1500 < TimeCurrent()).

La seconda versione, timestampata 2011.10.12 06:37, sembra che dovrebbe iniziare a disegnare immediatamente.

Ma, comunque, i problemi apparentemente non iniziano a verificarsi per diverse ore.
 
jjc:
Sembra che tu abbia scaricato la versione originale del codice di esempio (timestamped 2011.10.11 18:06). Questo non disegna nulla per 25 minuti.
Ok, aspetterò
 

Il terminale client 32bit MetaTrader 4 mostra la stessa immagine. Sei sicuro che l'indicatore fornito funzioni?

- Sì. Sto eseguendo lo stesso indicatore anche su una macchina a 32 bit, da ieri sera, circa 18 ore. Il problema non si verifica.

Se vuoi un altro possibile bug di MT4 da perseguire, cosa succede se usi Low[i] e High[i] piuttosto che iLow() e iHigh()?

- Nel mio codice attuale vengono utilizzati iHighest / iHigh / iLowest / iLow ecc. Ho usato High/Low nel codice di esempio per ridurre la complessità

 
RaptorUK:
Ho un'idea . . . ma devo uscire ora, ho aggiunto l'indicatore a un nuovo grafico, testerò la mia idea quando torno e posterò i risultati.

OK, sono appena tornato, il grafico sembrava a posto da quando ho caricato l'indicatore... poi ho provato la mia idea... Ho fatto una pagina in alto per spostare il grafico a destra in modo che i nuovi dati venissero scaricati . . e hey presto . .

Questo è quello che ho suggerito in questo thread il 2011.10.07 19:08

 
RaptorUK:

Ok, sono appena tornato, il grafico sembrava a posto da quando ho caricato l'indicatore... poi ho provato la mia idea... Ho fatto una pagina in alto per spostare il grafico a destra in modo che i nuovi dati venissero scaricati . . e hey presto . .

Ok, quindi stai ipotizzando che la cronologia delle barre stia cambiando per qualche motivo, e che venga riempita di nuovo, e che l'indicatore ne sia influenzato perché disegna solo in avanti e non segue il solito comportamento degli indicatori che ricalcolano sulla base di cose come IndicatorCounted()?
 
jjc:
Ok, quindi stai ipotizzando che la cronologia delle barre stia cambiando per qualche motivo, e che venga riempita all'indietro, e che l'indicatore ne sia influenzato perché disegna solo in avanti e non segue il solito comportamento degli indicatori di ricalcolare sulla base di cose come IndicatorCounted()?
Non ho guardato il codice recente. . ma sì, qualcosa sulla falsariga di ciò che hai scritto.
 
RaptorUK:
Non ho guardato il codice recente. . ma sì, qualcosa sulla falsariga di ciò che hai scritto.

Ok, in sintesi, quello che sembra avere è il seguente:

* Un indicatore normale userà IndicatorCounted() per determinare quali valori delle barre sono "sporchi" e devono essere (ri)calcolati.

* Quando aggiungete altre barre alla storia scorrendo indietro, IndicatorCounted() viene azzerato. Pertanto, a questo punto, un normale indicatore ricalcolerà tutti i suoi valori storici.

* L'indicatore qui non lo fa. In effetti, ignora IndicatorCounted() e disegna solo in avanti.

* Per qualche ragione, la macchina Win64 di AnkaSoftware si riempie periodicamente di dati più vecchi, ma la macchina Win32 no. Il sistema operativo è probabilmente solo una coincidenza in questo contesto.

* È un po' cattivo che MT4 non aggiusti i buffer degli indicatori alla luce delle nuove barre che sono state aggiunte, e invece si affida al codice dell'indicatore che ricalcola tutti i vecchi valori perché IndicatorCounted() viene resettato. (Tuttavia, è ragionevolmente giustificabile, perché l'aggiunta di vecchi valori di barre a molti indicatori potenzialmente influenza i calcoli successivi. Per esempio, un EMA cambierà, anche se di un piccolo valore, se si aggiunge una barra in più all'inizio della storia).

 
jjc:

* È un po' cattivo che MT4 non aggiusta i buffer dell'indicatore alla luce delle nuove barre che sono state aggiunte, e invece si affida al codice dell'indicatore che ricalcola tutti i vecchi valori perché IndicatorCounted() viene resettato.

In realtà, pensandoci, questo è sbagliato. C'è una buona ragione per cui MT4 cerca di dire all'indicatore di ricalcolare tutto, e questo scenario potrebbe essere stato applicato qui.

Diciamo che l'indicatore ha funzionato per un po', ma poi c'è una disconnessione dal broker che dura per più barre. Alla riconnessione MT4 riceverà un tick e inizierà a disegnare i valori dell'indicatore per l'ultima barra. Separatamente, in modo asincrono e più lentamente, riceverà i dati storici per le barre mancanti che hanno avuto luogo durante la disconnessione. Questi vengono inseriti nel mezzo della storia delle barre, e quindi è necessario per qualsiasi indicatore normale ridisegnare i vecchi valori a partire almeno dall'inizio del periodo di disconnessione. In pratica, è comprensibile che MT4 adotti l'approccio "ridisegna tutto". L'unico cavillo è se MT4 debba automaticamente cambiare i valori del buffer in EMPTY_VALUE se sono potenzialmente non validi.
 

Questo problema riguarda SOLO gli indicatori?

come su altri, diciamo High[], low[], o iHigh, iLow, iLowest, iBarshift, etc, etc...., questo è quello che preferisco sapere ed essere chiaro.