Errori, bug, domande - pagina 2574

 
Aleksei Beliakov:
Banalmente se stampate i risultati di queste funzioni in ontick allora è per il tempo 1970.01.01 per il prezzo 0
Una volta era l'ora del bar o del prezzo.
Quindi ora è così.

Forse hai un bug nel tuo computer? Ho questo codice nella build 1220.

 Print("iHigh ", iHigh(NULL, PERIOD_W1, 0));
 Print("iTime ", iTime(NULL, PERIOD_W1, 0));

stampa

2019.09.23 09:41:27.560 00 EURUSD,M5: iTime 2019.09.22 00:00:00
2019.09.23 09:41:27.560 00 EURUSD,M5: iHigh 1.10245
 
Aleksei Beliakov:
Se stampate i risultati di queste funzioni in ontick, è per il tempo 1970.01.01 per il prezzo 0.
Una volta era l'ora del bar o del prezzo.
Quindi ora è così

Qual è ilcodice di errore?

Quali sono i parametri del test?

I dati delle settimane e dei mesi sono caricati? Quanti sono in totale?

 
Slava:

Qual è ilcodice di errore?

Quali sono i parametri del test?

Vengono caricati i dati per settimane e mesi? Quanti sono in totale?

Ho ricontrollato e tutto funziona ora.

Ho scaricato la storia.

Grazie.

 
Sono sicuro che questo argomento è già stato sollevato: dovrebbe essere possibile far coesistere due diverse versioni di MT5 su un desktop (disabilitare l'auto-update e il rollback). O almeno la beta e il rilascio. Oppure è possibile (senza virtualizzazione).
 

Osservazione della memoria.

Ho CopyRates eseguito circa mille volte nel mio codice.

Poi l'array di citazioni viene in qualche modo elaborato, e alla fine di questo chiamo:

ArrayRemove(ArrayQuotes,0,ArraySize);

ArrayFree(ArrayQuotes);

ArrayResize(ArrayQuotes,0);

ArrayFree(ArrayQuotes);

ZeroMemoria(ArrayQuotes);

(solo sperimentato in modo diverso)

Risultato - la memoria cresce ancora geometricamente e si intasa, insieme ad essa il carico sui processori - il processore i7 si intasa dell'80% in totale su tutti i core logici, la memoria è più di Giga.

Finora sono riuscito a limitare il consumo di risorse con un programma di terze parti - CPU non più del 15% e memoria non più di Giga.

Domanda - è un bug o una caratteristica della piattaforma?

 
È possibile selezionare rigidamente la codifica della fonte? So che quando i caratteri sono solo ascii, è single byte, altrimenti utf-16. Può utf-8?
 

A proposito, strano comportamento del meta-editor, dovrebbe essere corretto:

fn_call();/////////////////////

facendo doppio clic sulle slash si evidenziano le slash con il carattere precedente (se non si tratta di un numero/lettera).

Perché scomodo? Fatto una modifica temporanea nel codice, evidenziato lo spazio in questo modo, poi bisogno di evidenziare rapidamente e cancellare le singole barre.

 

Ancora indietro alla questione del passaggio di stringhe da dll, wchar_t* come puntatore.
Dall'articolo di Renat sul lavoro con le stringhe in dll, è chiaro che mql tipo stringa prende un puntatore alla stringa wchar_t* dalla dll esterna.
In altre parole, inviamowchar_t* alla dll e lo riceviamo come stringa & in mql.
Ma la funzione C

wcscpy_s(wchar_t *dest, rsize_t  dest_size, const wchar_t *src);

non funziona correttamente, cioè un puntatore alla stringawchar_t* dest viene ricevuto in mql, ma fallisce ed entra ed esce.
A volte il terminale si blocca e il programma viene terminato.

Con la funzione

wcscpy(wchar_t *dest,  const wchar_t *src);

Il terminale non si blocca, ma anche le stringhe arrivano a intermittenza.
Si prega di correggere nella prossima build.

ZS. Ho dimenticato di specificare che il puntatorewchar_t* viene passato da un altro thread.
Cioè la funzione wcscpy_s o wcscpy è chiamata in un thread separato.

 
Roman:

Ancora indietro alla questione del passaggio delle stringhe dalla dll, wichar_t* come puntatore.
Dall'articolo di Renat sul lavoro con le stringhe in dll, è chiaro che mql tipo stringa prende un puntatore alla stringa wichar_t* dalla dll esterna.
In altre parole, inviamo wichar_t* alla dll e lo riceviamo come stringa & in mql.
Ma per qualche ragione, la funzione C

non funziona correttamente, cioè un puntatore alla stringawichar_t* dest viene ricevuto in mql ma fallisce ed entra ed esce.
A volte il terminale si blocca e il programma viene terminato.

Con la funzione

Il terminale non si blocca, ma anche le stringhe arrivano a intermittenza.
Si prega di correggere nella prossima build.

ZS. Ho dimenticato di dire che il puntatore wichar_t* è passato da un altro thread.
Cioè la funzione wcscpy_s o wcscpy è chiamata in un thread separato.

E chi alloca la memoria per le stringhe dest?
 
Vladimir Simakov:
E chi alloca la memoria per le stringhe dest?

La memoria è allocata nel codice mql come

#import "Dll.dll"
   void Func(string task, string & out);
#import 

string оut;
StringInit(out, 165, 32);

fuori e passato come puntatore alla memoria allocata, poiché la stringa in mql è wchar_t* in dll

Func("Task", out);