Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1201
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
Scrivo tutto in un file. Scrivere, e poi leggere, diverse strutture nello stesso file va bene.
Ma legge l'array dall'inizio alla fine. Come si fa a dividerlo in 3 parti? Come avete scritto una struttura e siete riusciti a scrivere un array nello stesso file? Sono un autodidatta, non so molto, ma il fatto che siano formati di dati diversi, in qualche modo lo sospetto.
Ammetto che si può riuscire ad aprire il file per la scrittura una volta e stiparci tre array, ma non si può leggerlo in parti così.
Ma legge l'array dall'inizio alla fine. Come si fa a dividerlo in 3 parti? Come si fa a scrivere una struttura e a scrivere un array nello stesso file? Sono un autodidatta, non so molto, ma il fatto che siano formati di dati diversi è in qualche modo sospetto.
Ammetto che posso cavarmela aprendo un file per la scrittura una volta e stiparci tre array, ma non posso leggerlo così facilmente in parti.
Dico, se scrivi nello stesso file solo 1 struttura e 3 array, allora puoi leggerli da lì (supponendo che per leggere gli array devi specificare la dimensione di ciascuno). Ma il trucco di scrivere e poi leggere diverse sequenze di questo tipo non ha funzionato per me. Forse devo spostare il puntatore, ma è già teso...
Te l'ho detto, se scrivi solo 1 struttura e 3 array in un file, allora puoi leggerli da lì in seguito (a condizione che tu debba specificare la dimensione di ciascuno di essi per leggere gli array). Ma il trucco di scrivere e poi leggere diverse sequenze di questo tipo non ha funzionato per me. Forse devo spostare il puntatore, ma è un po' ingombrante...
Com'è la tensione? Non ci sono abbastanza cavalli? E come si può essere sicuri che la scrittura ha avuto successo e come si può supporre che sia successo se la lettura è fallita? Per quanto ne so, non si può guardare un file .bin con gli occhi.
Artyom, puoi farmi un esempio? Tenendo conto che la dimensione degli array è dinamica.
No, non ci saranno ancora esempi - non l'ho fatto io stesso, e quando lo farò, lo descriverò nei miei articoli. E non sarà presto. Il fatto è che potete scrivere solo strutture POD in un file usando FileWriteStruct(). Cioè strutture semplici che non contengono stringhe, array dinamici,funzioni virtuali, così come puntatori a oggetti e funzioni.
E questo significa che bisogna inventarli e testarli. Ma ho scritto la direzione. Bisogna pensare all'implementazione.
No, non ci saranno ancora esempi - non l'ho ancora fatto io, e quando lo farò, lo descriverò negli articoli. E non sarà presto. Il fatto è che solo le strutture POD possono essere scritte su file usando FileWriteStruct(). Cioè, strutture semplici che non contengono stringhe, array dinamici, funzioni virtuali, così come puntatori a oggetti e funzioni.
E questo significa che dobbiamo inventarlo e testarlo. Ma ho scritto la direzione. L'implementazione dovrebbe essere pensata.
Si scopre che non importa come lo si guardi, il compito non può essere risolto. Dopo tutto, l'esempio di Sergei ha tre array dinamici all'interno. Non importa come la struttura sia disposta nella struttura, rimarrà un array dinamico.
Ma se si crea un array di strutture, il problema si risolve scrivendo l'array. FileWriteArray(). Questo è già stato testato e la documentazione dice chiaramente di scrivere un array di strutture.
Ma legge l'array dall'inizio alla fine. Come si fa a dividerlo in 3 parti? Come si fa a scrivere una struttura e a scrivere un array nello stesso file? Sono un autodidatta, non conosco molte cose, ma il fatto che siano formati di dati diversi, in qualche modo lo sospetto.
Lo ammetto, potete cavarvela, aprendo un file per la scrittura una volta e stiparci tre array, ma non sarete in grado di leggerlo in parti come questa.
In un file binario, potete scrivere qualsiasi struttura, array, anche singole variabili, tutto in un file.
MA, quando leggete, dovete leggere i dati nello stesso ordine.
tutto funzionerà.
non hanno visto il dump del file, quando si scrive con FileWriteArray() , molto probabilmente, la dimensione dell'array sarà scritta nei primi byte - ma è più facile fare uno script di prova, ci sono una dozzina di righe di codice ;)
Si scopre che non importa come lo si guardi, il problema è irrisolvibile. Dopo tutto, nell'esempio di Sergei ci sono tre array dinamici all'interno. Non importa come si costruisce la struttura nella struttura, rimarrà una matrice dinamica.
E se si crea un array di strutture, si risolve il problema scrivendo l'array. FileWriteArray(). Questo è già stato testato ed è chiaramente indicato nella documentazione sulla scrittura di un array di strutture.
Viene memorizzato un array di strutture, ma... se ci fossero delle stringhe, queste possono essere impacchettate in un array uchar all'interno della struttura, cosa che viene fatta con successo. Ma non c'è modo che un array double possa entrare in un array uchar. Inoltre, è dinamico. E salvare i tre array separatamente in file e poi spingerli nella struttura scompattata dal file... Non l'ho provato. Non ci ho pensato e non lo so.
è possibile scrivere qualsiasi struttura, array, anche variabili individuali in un file binario - tutto nello stesso file
MA quando si legge, bisogna leggere i dati nello stesso ordine.
tutto funzionerà
non hanno visto il dump del file quando si scrive con FileWriteArray(), molto probabilmente, la dimensione dell'array sarà scritta nei primi byte - ma è più facile fare uno script di prova, ci sono una dozzina di righe di codice ;)
Non so dove avete iniziato a leggere di questo problema, lasciate che ve lo ricordi per sicurezza: dovete scrivere una struttura contenente tre array dinamici in un file. Poi ho avuto una domanda sul fatto che il file non è stato letto correttamente.
Forum sul trading, sistemi di trading automatico e test di strategia
FAQ da principianti MQL5 MT5 MetaTrader 5
Sergey Tabolin, 2020.03.24 18:02
Sto chiedendo a ))))
Ho cercato di farlo "a modo mio".
La prima struttura e i 3 array leggono bene (a condizione che i ricevitori degli array non siano dinamici, altrimenti tutti i dati scritti dopo la struttura vengono letti nel primo array).
Tuttavia, se ci sono più voci, allora
dà un bel po' di problemi...
Quindi sto pensando: come è possibile leggere la struttura e tre array da un file, che non si sa come è stato scritto.
Per questo ho detto che sono autodidatta e non so molto, ma non si può leggere in parti.
E capisco che ci sono opzioni per aggiungere al file .bin tutto, ma per leggerlo bisogna sapere cosa è scritto in quale ordine. Ed è possibile che non per mezzo di mql.
Non capisco affatto questo...
Cosa c'è che non va?
Quindi sto pensando: come è possibile leggere una struttura e tre array da un file, che non si sa come è stato scritto.
è quello che sto scrivendo, è più facile da controllare, entro 10 minuti.... controllato, FileWriteArray() non scrive la dimensione dell'array nell'intestazione o nel primo byte, significa che dovreste scrivere voi stessi questi valori
2020.03.25 10:18:36.058 tst (EURUSD,H1) 1. d_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 3,14159 3,14159 3,14159 3,14159
2020.03.25 10:18:36.058 tst (EURUSD,H1) 2. i_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 1234567890 1234567890
2020.03.25 10:18:36.058 tst (EURUSD,H1) 2. c_arr
2020.03.25 10:18:36.058 tst (EURUSD,H1) 127 127 127 127 127
2020.03.25 10:18:36.058 tst (EURUSD,H1) mstruct.a = 666 , mstruct.b = 123.123000
cioè se le dimensioni degli array sono dinamiche, significa che scriviamo le dimensioni dell'array stesso quando scriviamo, e quando leggiamo, leggiamo il valore della dimensione dell'array dal file e impostiamo le dimensioni degli array della struttura
nel mio esempio 2 strutture - una è stata inizializzata e scritta, la seconda è stata letta, inizializzazione dai dati del file