Indicatore che si corrompe - pagina 3

 
AnkaSoftware:

JIC, si prega di notare che il problema non si verifica su piattaforme a 32 bit. Ho fornito del codice in uno dei post precedenti.

Hai due (o più) macchine separate che non stanno necessariamente ricevendo esattamente gli stessi dati. Per esempio, il sistema a 64 bit potrebbe essere su un nodo VPS occupato che occasionalmente perde traffico e/o connessioni, per esempio perché il nodo fisico sta operando agli estremi dell'uso del processore o della larghezza di banda. (Molte altre possibili spiegazioni; questa è solo una).

Finché non si capisce perché il disegno di qualsiasi cosa siano le linee viola si ferma quando c'è un vuoto nelle barre M1, allora tratterei tutto il resto come una coincidenza.

Chiudo tornando alla mia affermazione iniziale: non c'è motivo per cui Windows a 64 bit dovrebbe causare problemi come quelli che stai descrivendo. Molte persone hanno segnalato su questo forum che MT4 non funziona correttamente sulle piattaforme x, y e z, solo per scoprire alla fine che il problema era nel loro codice. O hai scoperto il primo vero bug di MQL4 in diversi anni in un software maturo usato da milioni di persone, o il problema è nel tuo codice. Dalle prove finora raccolte - ad esempio, rapporti separati da te che il problema si verifica o dopo 16 ore o dopo 3-4 ore - è molto probabile che il problema sia causato da fluttuazioni occasionali nei dati che tu non stai gestendo correttamente.
 

AnkaSoftware:

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

d) L'uso del codice è il seguente

Dichiarazioni

<code>

#proprietà indicator_chart_window



  1. Non installare in \File di programma* su Vista/Win7
  2. void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
    double a = (endlevel - startlevel) / (start - end);
    double y;
    int bar;
    for(int x = 0; x <= start - end; x++) {
    y = a * x;
    bar = start - x;
    serie[bar] = startlevel + y;
    }
    }
    Non sono sicuro di cosa stai cercando di fare qui. Per uno stai calcolando un sacco di valori (inizio..fine) ma memorizzando solo UNO (serie[bar]) lo codificherei:
    void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
       double a = (endlevel - startlevel) / (start - end);
       for(int x = start; x <= end; x++) serie[x] = a * x + startlevel;
    }

 
In allegato c'è un indicatore di esempio, che riprodurrà il problema. Su una piattaforma Windows a 64 bit, collegate l'indicatore a un grafico M1 e lasciatelo girare per più di 4 ore.
File:
 
AnkaSoftware:
In allegato c'è un indicatore di esempio, che riprodurrà il problema. Su una piattaforma Windows a 64 bit, collegate l'indicatore a un grafico M1 e lasciatelo girare per più di 4 ore.
Mi dispiace, non ho la pazienza di destinare una macchina pulita a 64 bit a questo e poi aspettare 4 o più ore.

Tuttavia, se questo indicatore riproduce davvero il problema, allora sono d'accordo che è interessante. Non riesco a vedere immediatamente dove potrebbe nascondersi un problema interno. (Supponendo, come prima, che tu abbia definitivamente escluso cose come una correlazione tra il problema che si verifica e un recente blip nella connessione tra MT4 e il broker. Hai menzionato la tua fiducia nel CNS; non hai effettivamente confermato che il diario di MT4 non contiene alcuna menzione di problemi di connessione, che a sua volta potrebbe causare il riempimento della cronologia delle barre).

Se vuoi seguire la strada di un problema di MT4, allora sembra più probabile che sia legato al passaggio degli array di indicatori per riferimento. Gli array in MQL4 hanno strane proprietà come l'essere sempre statici, e suppongo che sia possibile che ci sia uno strano problema latente con il passaggio degli speciali array indicatori-buffer per riferimento che scatena problemi solo su Win64. Anche se perché il sistema operativo dovrebbe fare la differenza in un contesto come questo rimane un completo mistero.

Proverei a modificare DrawMoveEx() in modo che non prenda più un riferimento all'array di indicatori, e invece ci sono funzioni separate come DrawMoveEx_Down1(), DrawMoveEx_Up1() ecc. che semplicemente indirizzano i buffer come variabili globali. Se questo fa la differenza, allora, congratulazioni, avete quasi certamente trovato un bug di MT4. Forse il secondo oggi.
 
AnkaSoftware:
In allegato c'è un indicatore di esempio, che riprodurrà il problema. Su piattaforma Windows 64 bit, collegare l'indicatore a un grafico M1 e lasciarlo funzionare per 4 ore e più.
Funziona da oltre 5 ore su Windows 7 Ultimate 64 bit, senza problemi.
 
RaptorUK:
Funziona da oltre 5 ore su Windows 7 Ultimate 64 bit, senza problemi.

JIC a) Come suggerito da voi modificato il codice rimuovere il passaggio del riferimento, non risolve il problema. Codice modificato allegato.

b) Le barre mancanti a cui ti riferisci, molto probabilmente sono dovute a una condizione di non negoziazione, quindi il broker non ha inviato barre. IMHO, in caso di perdita di connettività, le barre mancanti sono disponibili una volta ripristinata la connessione. Se vedi il mio codice di esempio, non c'è alcuna dipendenza dalla contiguità delle barre

Raptor, grazie per i test. Forse hai bisogno di fare jooming per vedere l'errore. Sono in grado di riprodurre il problema su Windows Server 2008 R2 Enterprise. Quindi potrebbe essere un problema di O/S. Qualche idea su dove trovare una lista di patch raccomandate per MT4, per una particolare piattaforma.

.

File:
 
AnkaSoftware:

Qualche idea su dove trovare una lista di patch raccomandate per MT4, per una particolare piattaforma.

Non esiste una cosa del genere. C'è semplicemente una versione di MT4 che funziona su tutte le versioni di Windows, e non c'è alcun motivo particolare per cui ci dovrebbe essere più di una. Non ci sono versioni o patch specifiche per il sistema operativo.
 
AnkaSoftware:
In allegato c'è un indicatore di esempio, che riprodurrà il problema. Su una piattaforma Windows a 64 bit, attaccare l'indicatore a un grafico M1 e lasciarlo girare per più di 4 ore.
Funziona ancora bene per quanto posso dire... come faccio a riprodurre l'errore?
 
RaptorUK:
Funziona ancora bene per quanto posso dire... come faccio a riprodurre l'errore?
Non devi fare nulla. A parte lo zoom sul grafico per vedere se l'errore si è verificato.
 
AnkaSoftware:
Non devi fare nulla. Oltre a zoomare il grafico per vedere se l'errore si è verificato.

Se sto cercando delle linee che sembrano essere scollegate dalle barre del grafico (come per il tuo primo post) allora non sto ottenendo alcun problema.