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

 
mila.com:

Salve.

Per favore, aiutatemi a visualizzare i dati di un file come istogramma.

Nel file "file.txt" una data corrisponde a un numero, come questo:

29.03.2017. 574391

30.03.2017. 741308

31.03.2017. 614367

Prendo i dati dal file e li stampo, così:


Istogramma per dimensione della barra per farlo sembrare un indicatore)

Quindi metti i dati nel buffer grafico, non nella stampa. Determinate la data da cui l'istogramma deve essere disegnato e metteteci i dati.
 
-Aleks-:

Quindi, metti i dati nel buffer grafico, non sulla stampa. Determinate la data a partire dalla quale volete che l'istogramma sia tracciato e mettete i dati lì.

Questa è la difficoltà.

L'ho stampato per chiarire che sto ottenendo i dati dal file in generale.

Non riesco a capire come assegnarli alle relative date.

 
mila.com:

Questa è la difficoltà.

L'ho stampato per chiarire che sto ottenendo i dati dal file in generale.

Non riesco a capire come assegnarli alle relative date.

Prendere la data dal file, trovare il numero di barra dalla data e disegnarci dentro...
 
Alexey Viktorov:
Prendere la data dal file, trovare il numero di barra dalla data e disegnarci dentro...

Come si fa esattamente?

Mostrami per favore.

 
mila.com:

Come si fa esattamente?

Per favore, mostratemi.

Usare le funzioni di stringa. In particolare

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

tira 10 caratteri dalla posizione zero e converte la stringa in una data.

Ma se non c'è il tempo di apertura della barra nella stringa, gli istogrammi non saranno su ogni barra se lo eseguiamo su un grafico diverso da D1.

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

Amici, vi prego di aiutarmi a scrivere una funzione per calcolare il numero di barre a partire dalla barra in cui l'ordine è stato aperto.

Per esempio: se abbiamo un ordine aperto sulla barra 5, la funzione dovrebbe restituire 5.

 
Bek001:

Amici, vi prego di aiutarmi a scrivere una funzione per calcolare il numero di barre a partire dalla barra in cui l'ordine è stato aperto.

Per esempio: se abbiamo un ordine aperto sulla barra 5, la funzione dovrebbe restituire 5.

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

Usare le funzioni di stringa. In particolare

tira 10 caratteri dalla posizione zero e converte la stringa in una data.

Ma se non c'è il tempo di apertura della barra nella stringa, l'istogramma non sarà su ogni barra se lo eseguo su un grafico diverso da D1.

Grazie, sto estraendo la data e il valore separatamente.

Ora come faccio a riempire il buffer con questo?

 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:

Grazie, sto estraendo la data e il valore separatamente.

Ora come faccio a riempire il buffer con questo?

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

Deve essere in un ciclo. Il ciclo while nel ciclo for è una perdita di tempo. Dobbiamo leggere una riga, estrarre la data e il valore e lavorare con loro. Trovare il numero di barre per tempo e mettere il valore lì. E solo dopo passare alla voce successiva.

 
mila.com:

Questa è la difficoltà.

L'ho stampato per chiarire che sto ottenendo i dati dal file in generale.

Non riesco a capire come assegnarli alle relative date.

Un record corrisponde a una barra o no?