[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 306

 
drknn:

Un array di lunghezza "infinita" può essere dichiarato in un indicatore. Dichiaratelo e poi nel ciclo scrivete immediatamente i valori trovati nell'array. L'unica domanda è come trasferire la selezione necessaria all'Expert Advisor/Script? Ci sono alcuni strumenti, ma dobbiamo valutare la complessità. Forse sarebbe davvero più facile fare 2 esecuzioni - nella prima calcoliamo il numero di valori filtrati, poi cambiamo la dimensione dell'array, e nella seconda inseriamo i valori nell'array?

Grazie, ma la variante con l'indicatore non è adatta - prima di trasferire il campione ottenuto all'Expert Advisor, c'è un problema con il trasferimento delle condizioni del campione dall'Expert Advisor all'indicatore.
 
PapaYozh:

Dichiarare un array più grande della dimensione massima richiesta.


Esattamente :) Funzionerà se aumentiamo le dimensioni molte volte. Per esempio, sappiamo in anticipo che il numero di valori filtrati non può superare i mille. Dichiariamo un array di diverse migliaia di celle e abbiamo finito :)

Ma ci vorrà un po' della memoria necessaria. :(

 
drknn:


Esattamente :) Funzionerà se aumentiamo le dimensioni molte volte. Per esempio, sappiamo in anticipo che il numero di valori filtrati non può superare i mille. Dichiariamo un array di diverse migliaia di celle e abbiamo finito :)

Ma ci vorrà un po' della memoria necessaria. :(


Se "sappiamo in anticipo che il numero di valori filtrati non può superare i mille", è sufficiente dichiarare un array con dimensione 1000.
 
splxgf:

https://docs.mql4.com/ru/math/MathPow no? Oppure le operazioni elementari sono una condizione del problema. Allora l'opzione http://bpascal.ru/download/desc/436.php se fai tutto a mano, allora implementa esponente e logaritmo con le tue funzioni.

Sì, esattamente secondo la condizione. Grazie per il link, è esattamente quello di cui ho bisogno!
 
Elenn:
Buon pomeriggio, qualche consiglio: il ciclo cerca i valori che soddisfano certe condizioni. I valori trovati sono scritti in un array. Non si sa in anticipo quanti valori si troveranno, quindi la dimensione dell'array da dichiarare è sconosciuta. Dal punto di vista del tempo e delle risorse, preferirei non fare due corse (in modo da poter contare il numero di valori trovati nella prima corsa, dichiarare l'array e scrivere i dati nell'array nella seconda). C'è un modo per ottenere il risultato richiesto in una sola esecuzione?
Potete aumentare la dimensione dell'array di una cella per ogni valore trovato. Ma questo non è molto veloce. Potete ottimizzare aumentando la dimensione di diverse celle, e poi saltare il ridimensionamento per diverse iterazioni.
 
PapaYozh:

Se "sapete in anticipo che il numero di valori filtrati non può superare i mille", potete semplicemente dichiarare un array di dimensione 1000.


Ma che dire di un piano di emergenza in caso di forza maggiore? Scriverebbe del codice che informa di un errore e blocca l'Expert Advisor? Beh, una persona potrebbe non vederlo - beh, era solo al lavoro in quel momento.

Sì, infatti, c'è più di una soluzione al problema. Penso che la soluzione migliore sia quella suggerita da Zhunko - aumentare dinamicamente la dimensionalità dell'array all'interno del ciclo di filtraggio. Francamente parlando, sono contento di questa risposta. Non mi è mai venuto in mente :)

 
drknn:


Penso che la migliore sarebbe ancora quella suggerita da Zhunko - aumentare dinamicamente la dimensionalità dell'array all'interno del ciclo di filtraggio. Onestamente, sono contento di questa risposta. Non mi è mai venuto in mente :)

La soluzione è davvero originale, dovrei provarla. Ma quando si ri-dichiara l'array, i dati non saranno persi a causa della reinizializzazione?
 
Elenn:
La soluzione è davvero originale, dovremmo provarla. Ma quando si ridichiara l'array, i dati non saranno persi a causa della reinizializzazione?

Lo faccio spesso. Creo alcuni array iniziali. Poi (se necessario) lo massimizzo per qualche valore (uno non può, ci vuole troppo tempo per eseguire operazioni di array) e controllo solo la dimensione dell'array effettivamente riempito nel mio lavoro. Finora non ci sono stati problemi
 
Vinin:

Le operazioni di matrice richiedono troppo tempo per essere completate
Tutte le operazioni dell'array sono lunghe o solo alcune?
 
Elenn:
Ci vuole molto tempo per eseguire tutte le operazioni dell'array o solo alcune?

Soprattutto il ridimensionamento di un array. Meglio farli il meno frequentemente possibile
Motivazione: