Colleghi, c'è una piccola domanda. Come devo dire correttamente - è possibile espandere dinamicamente il numero di elementi in un array. Per esempio, sto cercando dei canali stabili in una certa area a partire dalla barra zero. Non conosco il loro numero dall'inizio della ricerca ed è possibile che non ne trovi nessuno. Dalla documentazione che ho letto, credo di aver capito che non si può. È vero o c'è un modo più intelligente?
PS: Finora ho trovato diverse varianti in MT (MathCAD non ha questo problema):
(1). Creo un parametro (int count=0;) faccio un ciclo attraverso l'intervallo e controllo i criteri; se li soddisfa, count=count+1. Poi, creo un array con il conteggio ottenuto, e ripeto tutto da capo: scrivo i parametri calcolati nell'array e seleziono il canale ottimale.
(2) Creare una matrice per i parametri del canale secondo la lunghezza originale dell'intervallo.
grasn ... Come posso dirlo correttamente - è possibile espandere dinamicamente il numero di elementi nell'array. Per esempio, sto cercando dei canali stabili in una certa zona dalla barra zero. Non conosco il loro numero all'inizio della ricerca e potrei non trovarne nessuno.
Francamente, la questione non è molto chiara. Il numero di elementi in una matrice (dimensione) viene cambiato dinamicamente con ArrayResize. Se volete effettivamente creare delle strutture, queste sono promesse solo in MT5. Per pura consonanza di parole - stavo risolvendo il problema delle proprietà aggiuntive degli ordini e non conoscevo esattamente il numero di proprietà (quei 40 indicatori) anche prima. Sono state utilizzate tre funzioni, ma è stato necessario aggiungere manualmente nuove proprietà a ciascuna di esse, con successiva ricompilazione. Non so se sia giusto o sbagliato, ma per sicurezza, ecco il codice dell'ultima versione
Hm, non lo controllo io stesso da molto tempo, ma in primo luogo sembra funzionare bene, e in secondo luogo Renat ha esplicitamente assicurato che questa proprietà può essere considerata documentata, cioè essere supportata in tutte le nuove versioni.
Confermato. Se si aumenta la dimensione dell'array di 1, un nuovo elemento nullo viene aggiunto alla fine dell'array. Gli altri elementi rimangono invariati. Quando la matrice viene ridimensionata, viene aggiunta una riga nulla alla matrice.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Avete provato a manipolare ulteriormente i coefficienti della trasformazione wavelet.
Finisci con qualcosa del genere:
PS: Finora ho trovato diverse varianti in MT (MathCAD non ha questo problema):
(1). Creo un parametro (int count=0;) faccio un ciclo attraverso l'intervallo e controllo i criteri; se li soddisfa, count=count+1. Poi, creo un array con il conteggio ottenuto, e ripeto tutto da capo: scrivo i parametri calcolati nell'array e seleziono il canale ottimale.
(2) Creare una matrice per i parametri del canale secondo la lunghezza originale dell'intervallo.
... Come posso dirlo correttamente - è possibile espandere dinamicamente il numero di elementi nell'array. Per esempio, sto cercando dei canali stabili in una certa zona dalla barra zero. Non conosco il loro numero all'inizio della ricerca e potrei non trovarne nessuno.
Francamente, la questione non è molto chiara. Il numero di elementi in una matrice (dimensione) viene cambiato dinamicamente con ArrayResize. Se volete effettivamente creare delle strutture, queste sono promesse solo in MT5.
Per pura consonanza di parole - stavo risolvendo il problema delle proprietà aggiuntive degli ordini e non conoscevo esattamente il numero di proprietà (quei 40 indicatori) anche prima. Sono state utilizzate tre funzioni, ma è stato necessario aggiungere manualmente nuove proprietà a ciascuna di esse, con successiva ricompilazione. Non so se sia giusto o sbagliato, ma per sicurezza, ecco il codice dell'ultima versione
//+------------------------------------------------------------------+ //| Изменение размеров массивов свойств ордера | //+------------------------------------------------------------------+ int ResizeOrdArrays() { ArrayResize(OrdID,OrdArrSize); ArrayResize(OrdTicket,OrdArrSize); // ArrayResize(OrdData1,OrdArrSize); // ArrayResize(OrdData2,OrdArrSize); // ArrayResize(OrdData3,OrdArrSize); // ArrayResize(OrdData4,OrdArrSize); return(0); } //+------------------------------------------------------------------+ //| Добавление ордера в список ордеров | //+------------------------------------------------------------------+ int AddOrder(int ID) { OrdInd=OrdNum; OrdNum++; if (OrdNum > OrdArrSize) { OrdArrSize = OrdNum; ResizeOrdArrays(); } OrdID[OrdInd] = ID; OrdTicket[OrdInd] = ticket; // OrdData1[OrdInd] = 123.45; // OrdData2[OrdInd] = 123.45; // OrdData3[OrdInd] = 123.45; // OrdData4[OrdInd] = 123.45; return(0); } //+------------------------------------------------------------------+ //| Исключение ордера из списка ордеров | //+------------------------------------------------------------------+ int CutOrder() { OrdNum--; if (OrdInd < OrdNum) { OrdID[OrdInd] = OrdID[OrdNum]; OrdTicket[OrdInd] = OrdTicket[OrdNum]; // OrdData1[OrdInd] = OrdData1[OrdNum]; // OrdData2[OrdInd] = OrdData2[OrdNum]; // OrdData3[OrdInd] = OrdData3[OrdNum]; // OrdData4[OrdInd] = OrdData4[OrdNum]; } return(0); }P.S. A proposito, ho usato la stessa "struttura" per i miei canali.
Cambiare la dimensione di un array già creato non lo ridimensiona a zero?
Grazie. Devo aver scritto male la stampa in qualche modo. :о)
Quando la matrice viene ridimensionata, viene aggiunta una riga nulla alla matrice.