//+------------------------------------------------------------------+
//| Demo_FileIsLineEnding.mq4 |
//| Copyright 2014, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//--- параметры для чтения данных
input string InpFileName="RSI.csv"; // имя файла
input string InpDirectoryName="Data"; // имя директории
//--- переменные перекупленности
int ovb_size=0;
datetime ovb_time[];
//--- переменные перепроданности
int ovs_size=0;
datetime ovs_time[];
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- откроем файл
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV|FILE_ANSI,"\t");
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("Файл %s открыт для чтения",InpFileName);
PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
double value;
//--- читаем данные из файла
while(!FileIsEnding(file_handle))
{
//--- читаем первое значение в строке
value=FileReadNumber(file_handle);
//--- читаем в разные массивы в зависимости от результата функции
if(value>=70)
ReadData(file_handle,ovb_time,ovb_size);
else
ReadData(file_handle,ovs_time,ovs_size);
}
//--- закроем файл
FileClose(file_handle);
PrintFormat("Данные прочитаны, файл %s закрыт",InpFileName);
//--- выводим содержимое прочитанных массивов времени
PrintFormat("Overbought=%d",ovb_size);
for(int i=0; i<ovb_size; i++) Print(i," time=",TimeToString(ovb_time[i]));
PrintFormat("Oversold=%d",ovs_size);
for(int i=0; i<ovs_size; i++) Print(i," time=",TimeToString(ovs_time[i]));
}
else
{
PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
return;
}
//---
}
//+------------------------------------------------------------------+
//| Чтение данных строки файла |
//+------------------------------------------------------------------+
void ReadData(const int file_handle,datetime &arr[],int &size)
{
bool flag=false;
//--- читаем пока не дойдем до конца строки или файла
string str="";
while(!FileIsLineEnding(file_handle) && !FileIsEnding(file_handle))
{
//--- сдвинем каретку, прочитав число
if(flag)
FileReadNumber(file_handle);
size++;
//--- при необходимости увеличим размер массива
if(size>ArraySize(arr)) ArrayResize(arr,size,100);
//--- запоминаем текущую дату
arr[size-1]=FileReadDatetime(file_handle);
//--- добавляем в строку
str+=" "+TimeToString(arr[size-1]);
//--- проскочили первую итерацию
flag=true;
}
Print(str);
} |