![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ecco il codice per leggere da un file:
PerchéFileReadString() ?
Potete usareFileReadArray(), allora non avete bisogno di fare un ciclo.
PerchéFileReadString()?
Non sarebbe meglio usareFileReadArray(), allora non c'è bisogno di fare un ciclo.
Rosh:
Scrivere i valori di equità in un file. Poi costruisci l'indicatore in base a questi valori. Tuttavia, il file di dati deve essere spostato manualmente perché durante i test i file vengono scritti nella cartella Agent_name/MQL5/Files.
Solo ora mi sono reso conto di quanto sia complicato tutto.
Ma manualmente non è chiaramente la soluzione a questo problema, dato che stiamo parlando di centinaia di test.
E sembrerebbe: all'inizio ci sono dati disponibili, ma - oh, miracolo! - il programma è progettato in modo tale che non c'è la possibilità di salvarli in qualche modo e da qualche parte fino a quando non vengono estratti e usati programmaticamente!
Non sono un programmatore professionista, ma questa situazione è difficile da comprendere.
Enorme documentazione..., vaste possibilità di costruire, sembrerebbe, tutto e tutto..., gestione della memoria, OOP, e qui, in modo fondamentalmente semplice e criticamente necessario (che, spero, ho già spiegato) - uno stallo.
...eppure... Domanda!
Non c'è la possibilità di scrivere in modalità test in alcuni array di programmi forzati e quasi cancellabili, che successivamente potrebbero essere usati per costruire un indicatore?
Compresa la possibilità di passare attraverso una variabile globale un puntatore a tale array?
E qual è il problema della memorizzazione e del trasferimento dei dati tra la fase di test e il momento del lavoro principale, non in termini di implementazione attuale, ma in linea di principio?
Renat ha menzionato centinaia di megabyte di dati, ma, in primo luogo, perché dovremmo sempre ricaricare i dati quando possiamo prevedere tale possibilità solo su esplicito desiderio del programmatore e, in secondo luogo, la quantità di dati in termini del compito in questione è molto più piccola e ammonta a qualche migliaia di cifre.
Ancora una volta dichiaro che dal punto di vista dell'utente, l'opzione di trasferimento manuale dei file durante i test multipli (e il mercato, per la sua complessità, richiede test multipli) è assolutamente scomoda e poco promettente, mentre sono pronto a sostenere con chiunque che la dinamica degli indicatori di conto in diretta correlazione con la dinamica dei prezzi nella storia dei test è una delle più importanti in generale.
Qual è la questione di estendere la visibilità nella modalità principale delle operazioni di apertura dei file in lettura alla cartella dei file del tester? Quale sarebbe anche solo un'ipotetica minaccia in questo?
E qual è il problema di non poter forzare la memorizzazione dei dati richiesti tra la modalità principale e quella di test nella RAM?
Usate la dll per scrivere e leggere file da cartelle arbitrarie sul disco. Basta spostare le funzioni di scrittura e lettura dei file nella dll e il gioco è fatto.
...eppure... Domanda!
Non c'è la possibilità di scrivere in modalità test in alcuni array di programmi forzati, che successivamente potrebbero essere usati per costruire un indicatore?
Prova a impostare il flag FILE_COMMON all'apertura del file - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Identificatore
Valore
Descrizione
FILE_COMMON
4096
Posizione di un file nella cartella condivisa di tutti i terminali client. Questo flag è usato quando si aprono i file (FileOpen()), si copiano i file (FileCopy(), FileMove()) e si verifica l'esistenza dei file (FileIsExist())
Prova a specificare il flag FILE_COMMON quando apri un file - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Esegui questo script e vedi dove scrive
joo, Rash, grazie!
L'opzione della cartella condivisa sembra più... integrato.
L'unica cosa che sorprende è che quando si esegue questo codice, viene visualizzato un messaggio di scrittura non riuscita all'interno dell'indicatore, anche se la scrittura stessa viene ancora eseguita. Inoltre - ancora una questione aperta come e quando esattamente è meglio scrivere i dati (separatamente per ogni tick, ma è dispendioso in termini di risorse, o alla fine - l'intero array, ma con la scrittura dell'array qualcosa non è ancora del tutto chiaro e, inoltre, è difficile capire come OnCalculated funzionerà in questo caso per la sua estrazione - nel secondo, risulta il passaggio già dopo i test?)
E un'altra domanda, un po' fuori tema, ma sulla questione già toccata ieri.
Inserito in OnTick e in OnCalculated:
ma dopo il completamento del test, nonostante la presenza di oggetti relativi alle posizioni di apertura e chiusura (frecce e linee - visibili in Terminal: Charts>Objects>Objects List), il valore di ritorno è 0 per qualche motivo.È meglio scrivere sul file il più raramente possibile, quindi è meglio farlo come array di interi. I valori dovrebbero essere misurati non più spesso di una volta al minuto, altrimenti ci saranno problemi con la loro visualizzazione sul grafico (inoltre sarà irragionevolmente impegnativo in termini di risorse). Cioè, alla fine della corsa. Ma è anche possibile:
L'algoritmo emerge come segue:
1) Eseguire l'esperto nel tester.
2) Misurato il valore di interesse.
3) Registrato il valore nel file.
4) Scrivere true in un file separato, il che significa che abbiamo registrato un nuovo valore.
5) Inizia un ciclo infinito, la condizione di uscita è falsa nel file di flag.
6) In un grafico separato lo script legge il file con la bandiera, se c'è un nuovo valore, disegna un rischio sul grafico, scrive falso sul file.
Questo è all'incirca l'aspetto della modalità visiva dei test nel tester.
Aspettate un po', il concorso sarà finito, forse verranno presentate soluzioni più eleganti e belle.
joo, Rash, grazie!
L'opzione della cartella condivisa sembra più... integrato.
L'unica cosa sorprendente è che quando si esegue questo codice all'interno dell'indicatore viene visualizzato un messaggio di scrittura fallita, anche se la scrittura stessa viene eseguita.
Non ricevo nessuna di queste uscite. Fate una prova:
Non capisco niente di tutto ciò. Dovresti provarlo:
Rosh
Non riesco a capire quale sia la ragione, ma a differenza dei miei indicatori, quando lo avvio con il tuo, ricevo un messaggio:Ora ho fatto un semplice Expert Advisor simile, basato sul tuo codice, che dovrebbe scrivere tutti i valori di Equity nel file (ho cambiato solo l'output di tutti i valori, inclusi i byte zero scritti, reso le variabili globali, e diviso l'apertura e la scrittura del file in OnInit e OnTick), ma anche se nessun errore viene scritto e il file viene creato, i record e il file sono vuoti.