Sostituzione delle funzioni dei file MT4. - pagina 10

 

Sostituzione del file

Voglio testare un EA che fa uso di segnali esterni nello Strategy Tester e il thread afferma che il filehandling nativo non funziona nello strategy tester. Così ho provato ad usare la dll fornita in questo thread. L'input che voglio elaborare è in un file che assomiglia a questo:

2007-01-02;EURUSD;2.InstPipDown;;Yes

2007-01-02;USDJPY;1.InstPipUp;;Yes

2007-01-02;USDCHF;1.InstPipUp;;Yes

2007-01-03;EURUSD;2.InstPipDown;;Yes

2007-01-03;EURUSD;4.PipMax1Down;;Yes

2007-01-03;GBPUSD;4.PipMax1Down;;Yes

2007-01-04;USDJPY;8.PipRevBear;;Yes

2007-01-05;EURUSD;5.PipMax2Up;;Yes

2007-01-05;USDJPY;1.InstPipUp;;Yes

Creo il file da solo, quindi posso usare altri tipi di delimitatori.

Come posso usare la dll per ottenere un "record" alla volta? Posso fare il parsing per i singoli campi.

Come faccio a sapere quando ho raggiunto EOF?

Ho provato alcune variazioni ma ottengo risultati incoerenti e a volte spazzatura. Scrivere i dati come nell'esempio funziona bene, ma voglio leggere i dati.

 

Beh, la perseveranza regna!

Dopo diverse ore ho scoperto questo:

Il gestore di file si rifiuta di aprire un file che ho creato con un altro programma. Open restituisce -1. Se uso il file che è stato creato dalla demo (mt4.log) e ci copio il mio contenuto, open funziona. Non riesco a capire perché. Strano

Ho fatto i miei "record" a lunghezza fissa e ho letto la lunghezza del "record" più 2 per accomodare il "CRLF" alla fine di ogni record. Ho ottenuto la lunghezza del file, diviso per la lunghezza del record e ho fatto un loop per ottenere tutti i miei record in un array:

Ecco il codice:

int init()

{

stringa inArr[500];

int file;

int filesize;

int records;

int i;

file = gFileOpen("c:\mt4.log",READ);

// Print(file);

filesize = gFileSize(file);

// Print(filesize);

records = filesize/25;

// Print(records);

for(i=1;i<=record; i++)

{

inArr = gFileRead(file,25);

}

gFileClose(file);

Print(inArr[filesize-1]); //Controlla l'ultimo

return(0);

}

 

indicatore con fileoutput

ciao trader e programmatori.

ho bisogno di aiuto con un codesegemnt per un nuovo indicatore.

l'indicatore dovrebbe essere in grado di scrivere un file con le informazioni rilevanti, ma dovrebbe scrivere solo dopo aver aperto una nuova candela. non ogni tick.

Come potrebbe essere fatto? quello che cerco di fare è, su ogni nuova candela scrivere OHCL delle ultime 1000 barre per addestrare un PNN. questo dovrebbe essere fatto fuori con RAPID-I.

e con alcune altre informazioni per imparare quale sia la probabilità che la chiusura di una candela possa essere.

per favore aiutatemi. sarebbe un grande progetto, ma cose così semplici che sono troppo stupido (o pigro) per fare :-)

PriNova

 

datetime timeprev=0; prima di init()

e

if(timeprev==Time[0])

return(0);

timeprev=Time[0]; proprio sotto start()

e questo è tutto.

 

bello questo è stato molto veloce risposta.

grazie elitecamper

 

Perché la funzione move è stata rimossa dalla libreria

CodersGuru,

Non posso dirvi quanto siete preziosi per me, meritate gran parte delle lodi che ricevo dai miei clienti, poiché senza di voi non sarei in grado di fare il mio lavoro a loro sostegno.

C'è una ragione per cui la funzione Move non è stata implementata come indicato nel tuo tutorial.

Grazie mille ancora per il vostro servizio

John McGlaughlin

 

gFileRead

Salve,

Guardando il codice sorgente di mtguru1.dll ho trovato che la funzione gFileRead() non dovrebbe funzionare. Mi sbaglio?

gFileRead() utilizza una variabile locale per memorizzare la stringa letta dal file. Quando la funzione ritorna, restituisce un puntatore a quella variabile, ma questo puntatore può essere valido perché la variabile locale pbuffer va fuori portata.

Quindi, da un MQL4 EA, un'istruzione come questa dovrebbe andare in crash:

string buffer = gFileRead( handle, 50 );

e se funziona è strano ...

P.S.: Ho postato questo nel thread sbagliato, prima. https://www.mql5.com/en/forum/172885.

 

Errata Corrige:

.... ma questo puntatore può essere valido ....

ma questo puntatore NON può essere valido

 

Eseguire un file exe

Ciao,

Voglio fare una cosa semplice (così pensavo). Voglio semplicemente aprire (lanciare) un programma esterno da un EA. (non nell'EA)

Così, solo per scopi di esame. Diciamo che voglio aprire Microsoft Word quando succede una certa cosa nell'EA.

L'ho già fatto prima ma non riesco a trovare lo script, ho passato 2 ore a cercare sul web. La prossima volta salverò il codice in un posto sicuro!

 

qualche domanda?

Ho questo errore "2008.10.21 01:54:34 Fundamental Trader DailyFX_MQL4 v0.02: handle 2 does not exist in FileClose"

Come posso fare?