Indicatore che si corrompe

 

Tutto,

Ho sviluppato un indicatore che funziona bene per le prime 16 ore circa, dopo di che si corrompe e inizia a disegnare linee su tutto il grafico. Sto anche controllando il valore di IndicatorCounted() e il suo valore non diventa negativo quando ottengo le linee corrotte. Non voglio reinizializzare i buffer degli indicatori perché la storia delle 'mosse/linee valide' andrebbe persa. Qualche suggerimento su come risolvere il problema?

Immagini dell'indicatore normale e corrotto disponibili nel file zip allegato.

File:
images.zip  61 kb
 
Nessun lettore della mente qui - nessun codice = nessun aiuto
 
WHRoeder:
Nessun lettore della mente qui - nessun codice = nessun aiuto

Grazie mille.
 

cari,

qualcuno può mandarmi il link per scaricare il metaEditor 4?

Grazie.

 
tiger961:

cari,

qualcuno può mandarmi il link per scaricare il metaEditor 4?

Grazie.


Tiger hai bisogno di iniziare un nuovo thread invece di accumulare su altri thread.

L'editor è disponibile con il download gratuito del terminale MT4 da qualsiasi broker.

 

Alcune ulteriori informazioni -

a) La corruzione degli indicatori avviene solo su piattaforma Windows 64 bit

b) Ho fatto un dump dell'array di indicatori prima della corruzione e dopo la corruzione - gli stessi sono disponibili nel file xls allegato con commenti.

c) L'impostazione "Max Bars in Chart" è applicabile solo quando si apre il grafico? Il conteggio delle barre e dell'indicatore associato cresce ad ogni barra aggiunta.

d) L'uso del codice è il seguente

Dichiarazioni

<code>

#proprietà indicator_chart_window

#proprietà indicator_buffers 8

#proprietà indicatore_colore1 Rosso

#proprietà indicator_width1 2

</codice>

Per l'inizializzazione dell'indicatore -

<code>

SetIndexBuffer(0, Down1);

SetIndexStyle(0, DRAW_LINE);

SetIndexEmptyValue(0, EMPTY_VALUE);

</codice>

Per l'aggiunta di dati di linea

<code>

void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {

double a = (endlevel - startlevel) / (start - end);

doppio y;

int bar;


for(int x = 0; x <= inizio - fine; x++) {

y = a * x;

bar = inizio - x;

serie[bar] = startlevel + y;

}

}

</codice>

 
AnkaSoftware:
a) La corruzione degli indicatori avviene solo su piattaforma Windows 64 bit
Non installare i file di programma* su Vista/Win7
 
WHRoeder:
Non installare i file int \programma* su Vista/Win7
Giusto, l'installazione è in C:/metatrader4/<dir terminale>. Credo che questo problema non sia dovuto a problemi di percorso ma alla corruzione della memoria. L'indicatore funziona bene per le prime 3-4 ore, dopo di che inizia la corruzione.
 

Ho il sospetto che non sia niente del genere...

Ho visto accadere qualcosa di simile quando nuovi dati storici vengono aggiunti al grafico scorrendo il grafico verso destra.

 
RaptorUK:

Ho il sospetto che non sia niente del genere...

Ho visto accadere qualcosa di simile quando nuovi dati storici vengono aggiunti al grafico scorrendo il grafico verso destra.

Hmm, "si aggiungono nuovi dati storici al grafico", come? L'indicatore viene avviato e lasciato indisturbato. Abbiamo un lookback fisso di 1000 barre. L'indicatore non sta caricando nessun dato storico.

Qualcuno del team di sviluppo può dare un'occhiata a questo?

 
AnkaSoftware:

Hmm, "i nuovi dati storici vengono aggiunti al grafico", come? L'indicatore viene avviato e lasciato indisturbato. Abbiamo un lookback fisso di 1000 barre. L'indicatore non sta caricando alcun dato storico.

Qualcuno del team di sviluppo può dare un'occhiata a questo?

Sono d'accordo con RaptorUK su questo: è colossalmente improbabile che questo sia un bug in MT4 piuttosto che il tuo codice, o qualcosa a che fare con Windows a 64 bit. Ho visto rapporti di problemi di prestazioni e stabilità con MT4 che si sono rivelati fondati (ad esempio https://www.mql5.com/en/forum/135355), ma non ho mai visto un rapporto di un bug del linguaggio MT4 che si sia rivelato corretto.

Permettimi di sottolineare una differenza tra le tue schermate "Move Normal" e "Move Error". In "Move Normal", non ci sono evidenti barre mancanti. Mentre in "Sposta errore", sembra che ci siano dati mancanti nel grafico. La maggior parte dei marcatori sull'asse X sono distanti 16 minuti, ma il divario tra il secondo e il terzo marcatore è di 21 minuti (da 06:08 a 06:29). Questo può essere o non essere il problema, ma comincerei a cercare nel tuo codice i punti che assumono che ci sia una serie continua di barre. Per esempio, se attualmente sono le 8 del mattino, qualsiasi cosa nel codice che assume che (a) la barra per le 7 del mattino sia 60 barre fa, o anche (b) che esista una barra per le 07:00.