voracità della memoria RAM di MT5, problemi con la lettura/scrittura di file di grandi dimensioni - pagina 3

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
oop
Posso vedere che oop... perché scrivere gli array in stringhe quando puoi scriverli in binario in una volta sola
Vedo che oop... perché scrivere gli array in stringhe quando puoi scriverli in binario in una volta sola?
È scritto, l'uomo li elabora in excel.
Dice che l'uomo li elabora in Excel.
non dice che
Non c'è scritto questo.
Il primissimo post. Se leggete attentamente, questo file potrebbe non avere nulla a che fare con MT5. O gestito in un modo specifico.
Il primissimo post. Se leggete attentamente, questo file potrebbe non essere collegato a MT5. O gestito in un modo specifico.
Quindi lasciate che sia lui a determinare da dove lo prende
Può essere letto anche come un array, credo.Grazie per l'analisi del codice.
Faccio fatica a capire l'OOP, quindi fare delle modifiche è una tortura per me. Come ho capito si tratta della classe, che è responsabile della lettura, che lì l'intero file è diviso in array di stringhe, e solo allora, se voglio, converto questi valori di stringa in un altro tipo e li metto in array di tipo int nel mio script. Se ho capito bene, allora per accelerare il processo, dovrei leggere l'intero file e capire quante righe e colonne ci sono e quanti simboli ci sono in ogni cella, e poi selezionare immediatamente la dimensione dell'array? Allora come fare?
Vorrei capire da dove vengono presi 400 megabyte in una volta sola? Ho capito bene che la memoria viene allocata, ma non viene cancellata/regalata quella allocata in precedenza?
400 Mb sono 36 milioni di celle con righe vuote, 12 byte ciascuna, 12*36=432.
Per sapere come farlo meglio, parlaci del problema che stai risolvendo. Quanto spesso e quanto cambia il file, se tutti devono leggere da esso ogni volta, se il numero di celle non vuote è costante da riga a riga, se tutte le celle contengono solo numeri interi. Forse 9 minuti dovrebbero essere spesi una volta alla settimana e non è affatto molto - allora non c'è bisogno di cambiare nulla.
In generale, in termini di "dove andare per essere più veloci", la direzione principale è dichiarare una struttura con 57 campi corrispondenti a valori interi, e usarla sia per la scrittura che per la lettura (il file è binario). Allora 78 Mb saranno letti più velocemente di un secondo dal disco direttamente in memoria, senza delimitatori o rappresentazioni di stringhe. Per scopi di debug, salvate anche l'output in .csv. La dimensione del file determina immediatamente il numero di elementi nell'array di queste strutture.
400 MB sono 36 milioni di celle con righe vuote, ciascuna di 12 byte, 12*36=432.
La matematica è chiara.
Per sapere come farlo meglio, parlaci del problema che stai risolvendo. Quanto spesso e quanto cambia il file, se tutto deve essere letto da esso ogni volta, se il numero di celle non vuote è costante da riga a riga, se tutte le celle contengono solo numeri interi. Forse 9 minuti dovrebbero essere spesi una volta alla settimana e non è affatto molto - allora non c'è bisogno di cambiare nulla.
Il compito è universale, è leggere i file in formato CSV, perché questo formato è universale per diversi programmi, che attualmente mi forniscono i dati. Se ti riferisci specificamente a questo script, allora sì, devi solo leggere e calcolare tutto, perché Excel si blocca a causa delle formule. Le celle possono contenere numeri non interi (non specificamente in questo esempio). 9 minuti non è molto se è una volta alla settimana... Tuttavia, tra le altre cose, ho bisogno di lavorare con tale quantità di dati attraverso l'ottimizzatore, passando il file al lato e lì conducendo la sua elaborazione con l'aiuto di agenti, quindi ottenere il risultato in formato csv (qui posso, naturalmente, utilizzare un altro formato) e condurre l'elaborazione di nuovo. Ecco perché ho deciso di discutere questo problema pubblicamente, perché voglio elaborare grandi matrici di dati usando MT5.
In generale, in termini di "dove andare per essere più veloci" - la direzione principale: dichiarare la struttura, 57 campi di cui corrispondono a valori interi, e usarla sia per la scrittura che per la lettura (il file è binario). Allora 78 Mb saranno letti più velocemente di un secondo dal disco direttamente in memoria, senza delimitatori o rappresentazioni di stringhe. Per scopi di debug, salvate anche l'output in .csv. La dimensione del file determina immediatamente il numero di elementi nell'array di queste strutture.
Non riesco nemmeno a immaginare come si possa fare? O è che il file iniziale deve essere generato in condizioni speciali? Allora forse puoi fare un convertitore da CSV al formato binario?
Puoi guardare anche la seconda classe, come insegnargli a scrivere un numero illimitato di colonne?
WriteArray / Read sono veloci, dimensione massima fino a 300 mb, tutto è molto veloce, non consuma RAM
Perché c'è così tanto codice per la lettura/scrittura, è tutto fatto in 4 righe.
Puoi dimostrare come fare questo?
quindi lasciamo che sia lui a determinare da dove lo prende
può anche essere letto come un array, credoCSV è un formato di file universale, che è supportato in vari software, compreso quello associato al MO.
Inoltre, è un file conveniente per trasferire dati tra diversi programmi (script/advisori) MT5, e non richiede molto spazio.
Puoi dimostrare come fare questo?
prova a leggere il tuo file in questo modo
https://www.mql5.com/ru/docs/files/filereadarray
Non ho tempo di aprire il terminale ora, forse domani)