Errori, bug, domande - pagina 512

 
Neofit:
Impostala dimensione dell'array. ArrayResize
 
Neofit:

Per favore, ditemi come lavorare correttamente con un array i cui elementi sono strutture Mqlrates.

Questo è esattamente quello che voglio sapere:

MqlRates AdaptedRates[];

ArraySetAsSeries(AdaptedRates,true); 

AdaptedRates[300].open=1;

Il debugger dà un errore - Invalid array access.

Capisco che usando questa forma di registrazione, possiamo solo leggere elementi di una struttura che è un elemento di un array.

La questione è come scrivere correttamente gli elementi della struttura. Non mi interessano tutti, l'importante è il prezzo di .open .high .low .close.

Mi scuso in anticipo per questa domanda probabilmente molto banale (non sono il programmatore), ma in aiuto non ho trovato la risposta. Sarò grato per qualsiasi aiuto.

State usando un array dinamico AdaptedRates[]. Per quanto ricordo, quando si lavora con gli array dinamici, la loro dimensione dovrebbe essere impostata usando la funzione ArrayResize(). Ma finora il compilatore si è lamentato dell'indice 300 specificato nella terza linea.
 
Swan:
Imposta la dimensione dell'array. ArrayResize
Per quanto ho capito, se imposto la dimensione, per esempio
MqlRates AdaptedRates[302];  
non posso impostare il tipo di indicizzazione come serie.
 
Neofit:
Per quanto ho capito, se definisco la dimensione, per esempio
MqlRates AdaptedRates[302];  
non potrò impostare il tipo di indicizzazione come serie.

:) Non si imposta l'array statico, ma si imposta la dimensione dell'array dinamico con ArrayResize().

Beh, tipo: ArrayResize(AdaptedRates,302); ecc.

 
Yedelkin:
State usando un array dinamico AdaptedRates[]. Per quanto mi ricordo, quando si lavora con gli array dinamici si dovrebbe impostare la loro dimensione usando la funzione ArrayResize(). E finora il compilatore va in crash sull'indice 300 specificato nella terza linea.
Gli array statici non possono essere rappresentati come serie temporali, cioè la funzione ArraySetAsSeries(), che imposta l'accesso agli elementi dell'array dalla fine dell'array al suo inizio, non è applicabile ad essi. Se volete fornire l'accesso a un array come nelle serie temporali, usate un oggetto array dinamico.

Questa è una citazione della guida.

Swan, Yedelkin grazie per una risposta così rapida.

 
Neofit:
Per quanto ho capito, se definisco una dimensione, per esempio
MqlRates AdaptedRates[302];  
non posso impostare il tipo di indicizzazione come serie.

Sì.

MqlRates AdaptedRates[];//perciò lascia l'array dinamico

ArrayResize(AdaptedRates,302);//e imposta la giusta dimensione

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
Yedelkin:

:) Non si imposta un array statico, ma se ne imposta uno dinamico usando ArrayResize().

Beh, come ArrayResize(AdaptedRates,302); ecc.

Grazie per la spiegazione popolare, per quanto ho capito è consigliabileArrayResize ai limiti richiesti prima di qualsiasi riferimento a una cella dell'array dinamico, lo proverò.
 
pusheax:

Un'anomalia nel tester di strategia.

Si ferma improvvisamente e tutti gli agenti locali e remoti hanno finito e così si blocca.

Puoi dirmi come ricominciare, è un peccato ricominciare tutto da capo?
Lo faccio regolarmente :-) Non riesco a farlo ripartire, disabilito le nuvole e poi le lancio di nuovo. È peggio, quando succede di notte, rimane acceso finché non mi sveglio :-)
 
Neofit:
Grazie per la spiegazione popolare, per quanto ho capito è auspicabile ArrayResize ai limiti richiesti prima di qualsiasi riferimento a una cella dell'array dinamico , lo proverò.

Nota. Solo per i buffer indicatori questo non sarà necessario. Il sottosistema esecutivo del terminale gestisce questo da solo.

Nota 2:ArrayResize() dovrebbe essere preferibilmente applicato solo quando è necessario cambiare la dimensione di un array dinamico, e non prima di qualsiasi accesso ai suoi elementi. Può darsi che ad un array dinamico venga data una dimensione una volta, e poi il programma acceda semplicemente ai suoi elementi.

 
Yedelkin:

Nota. Solo per i buffer indicatori questo non sarà necessario. Il sottosistema esecutivo del terminale gestisce questo da solo.

Nota 2:ArrayResize() dovrebbe preferibilmente essere applicato solo quando è necessario cambiare la dimensione di un array dinamico, e non prima di qualsiasi accesso ai suoi elementi. È possibile che un array dinamico venga dimensionato una volta e poi il programma acceda semplicemente ai suoi elementi.

Beh, sono sciocco a dirlo, in realtà capisco che se ho già espanso un array dinamico a 302, posso accedere a qualsiasi elemento da 0 a 301 senza ArrayResize.