Errori, bug, domande - pagina 650

 
Rosh:
Scrivete al Service Desk con tutti i dettagli (allegate un esperto se necessario). Sarà più veloce.
Ok. Lo farò sicuramente oggi. Ma vi farò comunque un paio di domande per il bene dello sviluppo generale. :)
mql5:
È possibile che stiate usando una grande quantità di variabili di funzione locali, per esempio gli array.
Nella prossima build, per il terminale a 32 bit, puoi controllare la dimensione dello stack con la corrispondente proprietà del compilatore #property stacksize

È un problema solo dei terminali a 32 bit? Ho x64. Come faccio a capire "...grandi dimensioni delle variabili di funzione locali, ad esempio gli array..."? "Quanto dovrebbe essere grande per far sì che lo stack alla fine venga fatto traboccare?
 
tol64:
È un problema solo con i terminali a 32 bit? Ho x64. Come faccio a capire "...grandi dimensioni delle variabili di funzione locali, per esempio gli array... "Quanto deve essere grande perché la pila finisca per traboccare?
No, non è solo un problema del terminale a 32 bit. Ma la soluzione per il terminale a 32 bit è pronta per ora, mentre in quello a 64 bit è ancora limitata da un limite di stack di 256Kb.
Ma se il programmatore non specifica la dimensione necessaria dello stack manualmente usando una proprietà, l'EX5 nel terminale lavorerà con la dimensione predefinita dello stack (256Kb).

Riguardo alle grandi dimensioni.
Ogni dichiarazione di variabile all'interno di una funzione (ad eccezione delle variabili statiche) alloca spazio sullo stack, e l'allocazione di spazio sullo stack per le variabili locali avviene ad ogni chiamata.

Quindi, se una funzione ha 64Kb di variabili locali, lo spazio dello stack è sufficiente per 3 chiamate, e l'overflow dello stack si verifica a 4 chiamate (poiché una parte dello stack viene utilizzata per le esigenze interne del terminale). Quindi, se c'è bisogno di grandi dati locali, è meglio usare la memoria dinamica - quando si entra nella funzione, la memoria per le necessità locali viene allocata nel sistema (new, ArrayResize) e quando si esce dalla funzione, la memoria viene cancellata (delete, ArrayFree).
 

Ciao!

Non riesco a capire questo problema.

filehandle=FileOpen("My\\Symbols.txt",FILE_READ|FILE_TXT|FILE_ANSI);

Funziona bene nel debug, il file è leggibile in MT5\MQL5\File\.

Quando viene eseguito nel tester, dice "Symbols.txt file could not be opened, error 5004" e Handel -1

L'ho anche infilato nella cartella MT5\tester\agent000\MQL5\File, ma non lo vede più e uccide il file proprio lì).

Allo stesso tempo, la descrizione dice:

"Il file viene aperto nella cartella del terminale client nella sottocartella MQL5\files (o folder_agent_testing\MQL5\files in caso di test)".

"La funzione cerca un file nella cartella locale (MQL5\Files o MQL5\Tester\Files in caso di test)."

Non ho la cartella "MQL5\Tester\Files" come dice nella Guida?

Cosa sto sbagliando e come posso superare questo problema?

Grazie per la vostra risposta.

 

Prova a usare #property tester_file:

#property tester_file "My\\Symbols.txt"
 
Rosh:

Prova a usare #property tester_file:

Ugh-uh-x Sembrava aiutare nel MT5\tester\agent000\MQL5\File messo di nuovo, poi funziona con la proprietà.

Grazie!

 
Fia:

Ho provato di nuovo il tester con Handle -1 e l'errore 5004.

Non so cos'altro potrebbe essere, ovviamente non riesce a trovare il file, ma può vedere tutto quando fa il debug.

Copia il file in MQL5\Tester\Files ( crea una cartella prima).
Документация по MQL5: Файловые операции / FolderCreate
Документация по MQL5: Файловые операции / FolderCreate
  • www.mql5.com
Файловые операции / FolderCreate - Документация по MQL5
 
uncleVic:
Copia il file in MQL5\Tester\Files ( crea una cartella prima).

Ho provato, creato tali cartelle manualmente, messo il mio file (con sottocartella, disabilitato #proprietà tester_file), non lo trova nel tester in nessun modo.

E se si collega #property tester_file, funziona stranamente.

Tuttavia, di tanto in tanto si blocca una cartella e un file in MT5\tester\agent000\MQL5\File, probabilmente a causa del fatto che se si disabilita #property tester_file si blocca tutto lì.

Sì, ora ho scoperto che se cambio il codice (ovunque) nel file mq5 (da cui è chiamato txt), poi lo compilo e vado al tester, si rompe tutto in MT5\tester\agent000\MQL5\File

È un miracolo, ma almeno funziona - e questo è un bene.

 
Fia:

Ho provato, creato tali cartelle manualmente, messo il mio file (con sottocartella, disabilitato #proprietà tester_file), non lo trova nel tester in nessun modo.

E se si collega #property tester_file allora stranamente funziona.

Tuttavia, di tanto in tanto si blocca una cartella e un file in MT5\tester\agent000\MQL5\File, probabilmente a causa del fatto che se si disabilita #property tester_file si blocca tutto lì.

Sì, ora ho scoperto che se cambio il codice (ovunque) nel file mq5 (da cui è chiamato txt), poi lo compilo e vado al tester, si rompe tutto in MT5\tester\agent000\MQL5\File

È un miracolo, ma almeno funziona, e questo è un bene.

Se W7, metti il file nella directory Document and Setting/.../MetaQuotes/Common/Files, o disabilita UAC

PS di nuovo controllare la correttezza dell'ortografia del nome, su quali layout il nome è scritto (meglio certamente copia), disponibilità di spazio alla fine del nome e così via.

 
Urain:

Se W7, mettere il file in Document and Setting/.../MetaQuotes/Common/Files, o disabilitare UAC

PS controlla di nuovo la correttezza dell'ortografia del nome, su quali layout il nome è scritto (è meglio copiare), la presenza di uno spazio alla fine del nome e così via.

In realtà ho Win7 64bit, ma UAC è zero.

C:\Documents and Settings\All Users\MetaQuotes\Terminal\Common\Files\ Ho messo la mia cartella e il mio file lì, non ha aiutato, non trova il file nel tester.

Sì, penso che tutto sia corretto con il nome, a #property tester_file nel test funziona (e sul debug funziona su qualsiasi ), ma nel tester nessun modo, tranne come solo attraverso #property tester_file.

E poi con il problema sopra menzionato di uccidere il file dopo aver cambiato e compilato mq5 (ho un tale layout).

 

Lei ha una palese bugia scritta nel suo aiuto:

CLBufferWrite

Scrive un array nel buffer OpenCL.

CLBufferWrite(
intbuffer//handle al buffer OpenCL
const void&data[]// array di valori
uintoffset=0// da quale elemento, il default è dal primo
voidsize=WHOLE_ARRAY// numero di valori, l'intero array per default
);

Parametri

......

offset

.....

dimensione

[Il numero di valori da scrivere. Per impostazione predefinita, tutti i valori dell'array sono scritti nel buffer OpenCL.

......

In realtà scrive il numero di byte (!!!), non i valori.

Ho passato due notti a fare il debugging dell'indicatore, finché non l'ho capito! E perché? - Perché ho creduto nella sua scrittura...

RISOLVETELO ORA!!! :))

// Non l'ho capito in tempo, perché il default ( size=WHOLE_ARRAY) funziona correttamente.

Motivazione: