2016.09.12 17:21:54.851 Test (RTS-9.16,H1) array out of range in 'Test.mq5' (56,13)
2016.09.12 17:21:54.851 Test (RTS-9.16,H1) ArraySize(Buf.Buffer) = 0
2016.09.12 17:21:54.828 Test (RTS-9.16,H1) ArraySize(Buf.Buffer) = 2067
Il debugger si ostina a dire che Buf.Buffer è SEMPRE array dinamico[0],I. Cioè è un buffer indicatore. Ma di dimensioni zero, come si è scoperto.
Si scopre che il debugger scrive di più nel log di quanto faccia il rilascio. Il comunicato non riporta queste cose
2016.09.1217:25:08.706 Test (RTS-9.16,M1) Indicator buffer #0 detached
È possibile impostare il buffer dell'indicatore solo una volta in MT5?
Perché queste complicazioni, se non è un segreto? Beh, a parte l'interesse della ricerca, naturalmente.
Invece di questo (che, a proposito, è sbagliato in linea di principio, perché la reinizializzazione può essere richiesta durante il funzionamento, non solo all'avvio):
staticbool Flag = false;
if (Flag)
Restart();
Flag = true;
Perché queste complicazioni, se non è un segreto? Beh, a parte l'interesse della ricerca, naturalmente.
Ho dei casi in cui un array dinamico, fissato come buffer di indicatori, viene cancellato. Poi dovete creare di nuovo una matrice dinamica e assegnarla come buffer dell'indicatore. Il debugger mostra che è assegnato. Ma solo la sua dimensione è zero. Questo è un errore.
Nel mio indicatore memorizzo array-buffer in istanze dell'oggetto. Quando si cancella un oggetto in OnDeinit(), viene visualizzato un messaggio per tutti gli array collegati ai buffer (SetIndexBuffer()):
Ho bisogno di definire una singola interfaccia per tutte le classi ereditate. Dovrebbe sempre avere il metodo Init. Ma Init è come un duplicato del costruttore, quindi le varianti dei parametri di input non possono essere definite in anticipo. Come specificare tale interfaccia?
MK, perché non rendere accettabile la seguente sintassi per le funzioni importate:
#import ...
int send(SOCKET s, void &buf[], int len, int flags);
int send(SOCKET s, void &buf, int len, int flags);
#import
Ora dobbiamo fare cose brutte:
#import ...
int send(SOCKET s, char &buf[], int len, int flags);
int send(SOCKET s, int &buf, int len, int flags);
int send(SOCKET s, char &buf, int len, int flags);
int send(SOCKET s, Cpoint &buf[], int len, int flags);
...
#import
Non lo suggerisco per le funzioni interne in linea, ma per le funzioni importate dovrebbe essere sicuro.
Sarebbe bene renderlo privato anche nei discendenti. Per una migliore comprensione. Non è il punto, insomma.
Deve essere evocata nei discendenti. )
Il punto è proprio che non è necessario. Vedi il mio esempio.
Errore nei buffer degli indicatori
Risultato nel registro
Il debugger si ostina a dire che Buf.Buffer è SEMPRE array dinamico[0],I. Cioè è un buffer indicatore. Ma di dimensioni zero, come si è scoperto.
Si scopre che il debugger scrive di più nel log di quanto faccia il rilascio. Il comunicato non riporta queste cose
È possibile impostare il buffer dell'indicatore solo una volta in MT5?Perché queste complicazioni, se non è un segreto? Beh, a parte l'interesse della ricerca, naturalmente.
Invece di questo (che, a proposito, è sbagliato in linea di principio, perché la reinizializzazione può essere richiesta durante il funzionamento, non solo all'avvio):
Proprio come questo:
Perché queste complicazioni, se non è un segreto? Beh, a parte l'interesse della ricerca, naturalmente.
Ho dei casi in cui un array dinamico, fissato come buffer di indicatori, viene cancellato. Poi dovete creare di nuovo una matrice dinamica e assegnarla come buffer dell'indicatore. Il debugger mostra che è assegnato. Ma solo la sua dimensione è zero. Questo è un errore.
Il problema è vecchio, a quanto pare.
Forum sul trading, sistemi di trading automatico e test di strategia
Come nascondere il messaggio "Buffer indicatore #x staccato
Konstantin Ivanov, 2015.02.17 21:18
Nel mio indicatore memorizzo array-buffer in istanze dell'oggetto.
Quando si cancella un oggetto in OnDeinit(), viene visualizzato un messaggio per tutti gli array collegati ai buffer (SetIndexBuffer()):
"Buffer indicatore #x staccato"
Come staccare un array da un buffer senza questo messaggio?
O come nascondere questo messaggio?
Ho trovato il ramo http://forum.mql4.com/63975, ma l'opzione suggerita per salvare i buffer in un contesto globale non funziona per me.
Anche l'opzione di salvare i buffer in un contesto globale non funziona per me. È interessante notare che funziona in MT4.
articolo Una guida passo dopo passo per scrivere EAs in MQL5 per principianti C'è del codice:
Non è necessario dividere a tre cifre?
articolo Una guida passo dopo passo per scrivere EAs in MQL5 per principianti C'è del codice:
Non è necessario dividere a tre cifre?
Ora dobbiamo fare cose brutte:
Non lo suggerisco per le funzioni interne in linea, ma per le funzioni importate dovrebbe essere sicuro.