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

 
mila.com:

Hola.

Por favor, ayúdenme a mostrar los datos de un archivo como un histograma.

En el archivo "file.txt" una fecha corresponde a un número, así:

29.03.2017. 574391

30.03.2017. 741308

31.03.2017. 614367

Obtengo los datos del archivo y los imprimo, así:


Histograma por tamaño de barra para que parezca un indicador )

Así que se ponen los datos en el buffer gráfico, no en la impresión. Determina la fecha a partir de la cual se va a dibujar el histograma y coloca los datos allí.
 
-Aleks-:

Entonces, se ponen los datos en el buffer gráfico, no en la impresión. Determina la fecha a partir de la cual quieres que se trace el histograma y pon los datos ahí.

Esa es la dificultad.

Lo imprimí para que quede claro que estoy obteniendo los datos del archivo en general.

No sé cómo asignarlos a las fechas correspondientes.

 
mila.com:

Esa es la dificultad.

Lo imprimí para que quede claro que estoy obteniendo los datos del archivo en general.

No sé cómo asignarlos a las fechas correspondientes.

Toma la fecha del archivo, encuentra el número de barra de la fecha y dibuja en ella...
 
Alexey Viktorov:
Toma la fecha del archivo, encuentra el número de barra de la fecha y dibuja en ella...

¿Cómo se hace esto exactamente?

Muéstrame por favor.

 
mila.com:

¿Cómo se hace esto exactamente?

Por favor, muéstrame.

Utilice las funciones de cadena. En particular

string  StringSubstr(
   string  string_value,     // строка
   int     start_pos,        // с какой позиции начать
   int     length=0          // длина извлекаемой строки
   );

saca 10 caracteres de la posición cero y convierte la cadena en una fecha.

Pero si no hay tiempo de apertura de la barra en la cadena, los histogramas no estarán en cada barra si lo ejecutamos en un gráfico que no sea D1.

Строковые функции - Справочник MQL4
Строковые функции - Справочник MQL4
  • docs.mql4.com
Строковые функции - Справочник MQL4
 

Amigos, por favor ayúdenme a escribir una función para calcular el número de barras a partir de la barra en la que se abrió la orden.

Por ejemplo: Si tenemos una orden abierta en la barra 5, la función debería devolver 5.

 
Bek001:

Por favor, ayúdenme a escribir una función para calcular el número de barras a partir de la barra en la que se abrió la orden.

Por ejemplo: Si tenemos una orden abierta en la barra 5, la función debería devolver 5.

int shift=iBarShift(NULL,PERIOD_СURRENT,OrderOpenTime());
 
Alexey Viktorov:

Utilice las funciones de cadena. En particular

saca 10 caracteres de la posición cero y convierte la cadena en una fecha.

Pero si no hay tiempo de apertura de barra en la cadena, el histograma no estará en cada barra si lo ejecuto en un gráfico que no sea D1.

Gracias, saco la fecha y el valor por separado.

Ahora, ¿cómo lleno el buffer con esto?

 for(int i=0; i<limit;i++){

string InpFileName="file.txt";
 ResetLastError(); 
  int file_handle=FileOpen(InpFileName,FILE_TXT|FILE_READ);
   
   if(file_handle!=INVALID_HANDLE) 
     { 
      PrintFormat("Файл %s открыт для чтения",InpFileName); 
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
      //--- вспомогательные переменные 
      int    str_size; 
      string str,str_b1,str_dat1; 
      //--- прочитаем данные из файла 
      while(!FileIsEnding(file_handle)) 
        { 
         //--- узнаем сколько символов использовано для записи времени 
         str_size=FileReadInteger(file_handle,INT_VALUE); 
         //--- прочитаем строку 
         str=FileReadString(file_handle,str_size); 
         str_dat1= StringSubstr(str,0,10);
         str_b1= StringSubstr(str,12,6);
         //--- распечатаем строку 
         PrintFormat(str_dat1); 
         PrintFormat(str_b1);
        } 
      //--- закроем файл 
      FileClose(file_handle); 
      PrintFormat("Данные прочитаны, файл %s закрыт",InpFileName); 
     } 
   else 
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError()); 
    //}
   
      Range_Buffer[i]=//???
      }
 
mila.com:

Gracias, saco la fecha y el valor por separado.

Ahora, ¿cómo lleno el buffer con esto?

Range_Buffer[i]=значение//???

Tiene que estar en un bucle. El bucle while en el bucle for es una pérdida de tiempo. Tenemos que leer una línea, sacar la fecha y el valor y trabajar con ellos. Encontrar el número de barra por tiempo y poner el valor resultante. Y sólo después de eso pasar a la siguiente entrada.

 
mila.com:

Esa es la dificultad.

Lo imprimí para que quede claro que estoy obteniendo los datos del archivo en general.

No sé cómo asignarlos a las fechas correspondientes.

¿Corresponde un registro a un bar o no?
Razón de la queja: