Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 175

 
-Aleks-:

¿Tiene una entrada correspondiente a un bar o no?

Sí, será una barra del histograma en PERIOD_D1 en la barra del veintinueve de marzo.

29.03.2017. 574391

 

El gráfico de barras se configura correctamente si la fecha se escribe así

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

pero no se fija si lo escribo así

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

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

Range_Buffer[shift]= str_b1;

La fecha(str_dat1) se imprime correctamente.

¿Cuál esla razón?



 
mila.com:

Eliminado el bucle while, me sale la primera línea así

Por favor, dígame qué es lo que está mal.

Tenemos que comprobar lo que obtenemos en la variable str_dat1

En realidad, el iBarShift debería pasar una fecha de tipo datetime, no una cadena. ¿Quizás acepta una cadena limpia como fecha, mientras que no acepta una variable?

Es mejor convertir la cadena recibida en tipo datetime.


ps Y una idea completamente loca para probarlo escribiendo

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

Pero esto es puramente contando con la opcionalidad de mql4.

 
mila.com:

El gráfico de barras se configura correctamente si la fecha se escribe así

pero no se fija si lo escribo así

La fecha(str_dat1) se imprime correctamente.

¿Cuál esla razón?




La razón es que la función iBarShift( ) debe pasar el tipo de variable datetime, mientras que usted pasa 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:
Es mejor convertir la línea recibida a tipo datetime.

Gracias, pone un gráfico de barras.

Tengo una pregunta sobre cómo construir un histograma en todas las líneas del archivo.

He encontrado en la ayuda, que el salto a la siguiente línea es FileSeek()

Pero no sé cómo pasar a la siguiente línea.

 
mila.com:

Gracias, pone un gráfico de barras.

Tengo una pregunta sobre cómo construir un histograma en todas las líneas del archivo.

He encontrado en la ayuda, que el salto a la siguiente línea es FileSeek()

Pero no sé cómo pasar a la siguiente línea.

Hasta ahora sólo pone una columna


Ayuda )

Si abre el archivo antes del bucle y no lo cierra hasta el final, con cada iteración del bucle se leerá la siguiente línea. Y se puede cerrar el archivo después del final del bucle.

FileSeek() mueve un puntero no a la siguiente línea, sino al número especificado de bytes desde el principio, desde el final del archivo o desde la posición actual del puntero.

Para moverlo correctamente, es necesario saber cuántos bytes ocupa una línea en el archivo escrito.

 
mila.com:

Gracias, pone un gráfico de barras.

Tengo una pregunta sobre cómo construir un histograma en todas las líneas del archivo.

He encontrado en la ayuda, que el salto a la siguiente línea es FileSeek()

Pero no sé cómo pasar a la siguiente línea.

Hasta ahora sólo pone una columna


Ayuda )

Te he dado un enlace a un artículo que lo describe todo, con ejemplos. Parece que no lo leyó...
 
Sergey Gritsay:


La razón es que la función iBarShift() necesita pasar el tipo de variable datetime, mientras que tú pasas el tipo string, prueba esto

...

Gracias, lo haré.

 
Alexey Viktorov:

Si abre el archivo antes del bucle y no lo cierra, se leerá la siguiente línea con cada iteración del bucle. Y se puede cerrar el archivo después del final del bucle.


Funciona, gracias.

 
Artyom Trishkin:
Te he dado un enlace a un artículo que lo describe todo con ejemplos. Parece que no lo leyó...

Lo leí, pero nunca hubiera adivinado que había que abrir el archivo antes del bucle )

Probablemente no lo haya leído con atención.)
Razón de la queja: