Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 174

 
mila.com:

Здравствуйте.

Помогите, пожалуйста, отобразить в виде гистограммы, данные из файла.

В файле "file.txt" дате, соответствует некое число, вот так:

29.03.2017. 574391

30.03.2017. 741308

31.03.2017. 614367

Данные из файла получаю и вывожу на принт, вот так:


Гистограмму по размеру бара поставила, чтобы похоже было на индикатор )

 

Так Вы данные в графический буфер кладите, а не на принт выводите. Определите дату с которой надо строить гистограмму и с выкладывайте туда данные.
 
-Aleks-:

 

Так Вы данные в графический буфер кладите, а не на принт выводите. Определите дату с которой надо строить гистограмму и с выкладывайте туда данные.

В этом и сложность.

На принт вывела, чтобы мне было понятно, что я вообще получаю данные из файла.

Как распределить их по соответствующим  датам, ума не приложу.

 
mila.com:

В этом и сложность.

На принт вывела, чтобы мне было понятно, что я вообще получаю данные из файла.

Как распределить их по соответствующим  датам, ума не приложу.

Взять дату из файла, найти по дате номер бара и в него рисовать...
 
Alexey Viktorov:
Взять дату из файла, найти по дате номер бара и в него рисовать...

Как именно это сделать?

Покажите, пожалуйста.

 
mila.com:

Как именно это сделать?

Покажите, пожалуйста.

Используйте строковые функции. В частности

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

вытаскиваем с нулевой позиции 10 символов и преобразуем строку в дату.

Но если в строке нет времени открытия бара, то гистограммы будут не на каждом баре если запустить его на графике отличном от D1.

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

Друзья! Помогите, пожалуйста, написать функцию подсчета количества баров начиная от бара на котором был открыт ордер.

Например: Если имеем открытый ордер на баре №5, то и функция должна вернуть значение 5.

 
Bek001:

Друзья! Помогите, пожалуйста, написать функцию подсчета количества баров начиная от бара на котором был открыт ордер.

Например: Если имеем открытый ордер на баре №5, то и функция должна вернуть значение 5.

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

Используйте строковые функции. В частности

вытаскиваем с нулевой позиции 10 символов и преобразуем строку в дату.

Но если в строке нет времени открытия бара, то гистограммы будут не на каждом баре если запустить его на графике отличном от D1.

Спасибо, отдельно вытаскиваю дату и отдельно значение.

Теперь как этим заполнить буфер?

 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:

Спасибо, отдельно вытаскиваю дату и отдельно значение.

Теперь как этим заполнить буфер?

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

Это должно быть в цикле. Зря сделан цикл while в цикле for. Надо прочесть одну строку, вытащить дату и значение и с ними работать: Найти номер бара по времени и засунуть туда полученное значение. И только после этого переходить к следующей записи.

 
mila.com:

В этом и сложность.

На принт вывела, чтобы мне было понятно, что я вообще получаю данные из файла.

Как распределить их по соответствующим  датам, ума не приложу.

 

У Вас одна запись соотвествует одному бару или нет?
Причина обращения: