Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 175

 
-Aleks-:

Avete una voce corrispondente a una barra o no?

Sì, sarà una barra dell'istogramma su PERIOD_D1 sulla barra del ventinove marzo.

29.03.2017. 574391

 

Il grafico a barre è impostato correttamente se la data è scritta così

int shift=iBarShift(Symbol(),PERIOD_D1,"29.03.2017");
Range_Buffer[shift]= str_b1;

ma non è impostato se lo scrivo così

str_dat1= StringSubstr(str,0,10);//

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]= str_b1;

La data(str_dat1) viene stampata correttamente.

Qual è laragione?



 
mila.com:

Rimosso il ciclo while, ottengo la prima linea come questa

Per favore, ditemi cosa c'è che non va.

Dobbiamo controllare cosa otteniamo nella variabile str_dat1

In realtà, iBarShift dovrebbe passare una data di tipo datetime, non una stringa. Forse accetta una stringa pulita come data, mentre non accetta una variabile.

È meglio convertire la stringa ricevuta nel tipo datetime.


ps E un'idea completamente folle di controllarlo scrivendo

int shift=iBarShift(Symbol(),PERIOD_D1, (string)str_dat1);

Ma questo è puramente basato sull'opzionalità di mql4.

 
mila.com:

Il grafico a barre è impostato correttamente se la data è scritta così

ma non è impostato se lo scrivo così

La data(str_dat1) viene stampata correttamente.

Qual è laragione?




La ragione è che la funzione iBarShift() deve passare il tipo di variabile datetime, mentre voi passate un tipo String.

datetime  str_dat1=StringToTime(StringSubstr(str,0,10));// это дата
double str_b1=StringToDouble(StringSubstr(str,12,6)); // это значение

int shift=iBarShift(Symbol(),PERIOD_D1,str_dat1);

Range_Buffer[shift]=str_b1;

...

 
Alexey Viktorov:
È meglio convertire la linea ricevuta nel tipo datetime.

Grazie, mette un grafico a barre.

Ho una domanda su come costruire un istogramma su tutte le linee del file.

Ho trovato nell'aiuto che il salto alla linea successiva è FileSeek()

Ma non so come passare alla riga successiva.

 
mila.com:

Grazie, mette un grafico a barre.

Ho una domanda su come costruire un istogramma su tutte le linee del file.

Ho trovato nell'aiuto che il salto alla linea successiva è FileSeek()

Ma non so come passare alla riga successiva.

Finora mette solo una colonna


Aiuto )

Se aprite il file prima del ciclo e non lo chiudete fino alla fine, ad ogni iterazione del ciclo verrà letta la riga successiva. E potete chiudere il file dopo la fine del ciclo.

FileSeek() sposta un puntatore non alla riga successiva ma del numero specificato di byte dall'inizio, dalla fine del file o dalla posizione corrente del puntatore.

Per spostarla correttamente, bisogna sapere quanti byte occupa una linea nel file scritto.

 
mila.com:

Grazie, mette un grafico a barre.

Ho una domanda su come costruire un istogramma su tutte le linee del file.

Ho trovato nell'aiuto che il salto alla linea successiva è FileSeek()

Ma non so come passare alla riga successiva.

Finora mette solo una colonna


Aiuto )

Ti ho dato un link a un articolo che descrive il tutto, con esempi. Non mi sembra di averlo letto...
 
Sergey Gritsay:


La ragione è che la funzione iBarShift() ha bisogno di passare il tipo di variabile datetime, mentre voi passate il tipo stringa, provate questo

...

Grazie, lo farò.

 
Alexey Viktorov:

Se aprite il file prima del ciclo e non lo chiudete, la linea successiva sarà letta ad ogni iterazione del ciclo. E potete chiudere il file dopo la fine del ciclo.


Funziona, grazie.

 
Artyom Trishkin:
Ti ho dato un link a un articolo che descrive il tutto con esempi. Non mi sembra di averlo letto...

L'ho letto, ma non avrei mai immaginato di aprire il file prima del ciclo )

Probabilmente non l'ho letto con attenzione )
Motivazione: