Подгрузить данные из файла и выбрать коэффициент для текущей даты.

 

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

Пример данных хранящихся в файле:

Дата; Коэффициент

2.01.2017;0.25

12.02.2017;0.35

03.03.2017;0.15

16.04.2017:0.40

 

Индикатор должен будет взять коэффициент для текущей даты.

Пример: допустим, что текущая дата 3.01.2017 для этой даты коэффициент будет равен 0,25. Т.е до 12.02.2017 для всех дней коэффициент будет 0,25.

 Я хотел сделать так:

Открываю файл в переменную записываю

datetime date1=2.01.2017;

double coefficient1=0,25;

datetime date2=12.02.2017;

double coefficient2=0.35;

datetime datelocal=TimeCurrent();

If(datelocal>date1 & datelocal<date2)

{

Comment(coefficient1);

}

Но получается так что в mql4 нет возможности сравнивать даты.

Может быть кто то сталкивался с такими задачами или есть альтернативные ращения ?

 

попробуйте сравнивать даты таким образом:

string date1="2017.12.02";

string date2="2017.12.03";

if(StringToTime(date2)>StringToTime(date1))

{

....

}


про чтение из файла много тем на форуме

к примеру https://www.mql5.com/ru/forum/13394

Чтение из файла
Чтение из файла
  • 2013.08.12
  • www.mql5.com
Прошу помощи: можно ли прочитать из файла значения (числа) и присвоить эти значения переменным?
 
Renat Akhtyamov:

попробуйте сравнивать даты таким образом:

string date1="2017.12.02";

string date2="2017.12.03";

if(StringToTime(date2)>StringToTime(date1))

{

....

}


про чтение из файла много тем на форуме

к примеру https://www.mql5.com/ru/forum/13394

Не знаю, грамотно ли я сделал с точки зрения программирования, но это работает ))

   datetime date1=D'2008.03.01';
   datetime date2=D'2009.03.01';

   MqlDateTime str1,str2;
   TimeToStruct(date1,str1);
   TimeToStruct(date2,str2);

   int r=str1.year*1000+str1.mon*100+str1.day;
   int v=str2.year*1000+str2.mon*100+str2.day;

   if(r>v)
     {
      Comment("Data1 больше Date2");
     }
   else
     {
      Comment("Data1 меньше Date2");
     }
 
glich:

Но получается так что в mql4 нет возможности сравнивать даты.

Как это нет? Берете Дату1 и сравниваете с Датой2 напрямую без всяких преобразований. Ведь это числовые значения, к тому же целые.

 
glich:

Не знаю, грамотно ли я сделал с точки зрения программирования, но это работает ))

С точки зрения программирования все верно, раз компилятор пропустил. А вот с точки зрения математики - нет. По крайней мере, я не могу вспомнить календарь, в котором год состоит из 1000 дней, а месяц - из 100 дней.

Да и зачем date1 и date2 во что-то преобразовывать? Почему нельзя сравнить их между собой?

 
Ihor Herasko:

С точки зрения программирования все верно, раз компилятор пропустил. А вот с точки зрения математики - нет. По крайней мере, я не могу вспомнить календарь, в котором год состоит из 1000 дней, а месяц - из 100 дней.

Да и зачем date1 и date2 во что-то преобразовывать? Почему нельзя сравнить их между собой?

По какой-то мне не ведомой причине, с первого раза у меня не получилось сравнить две даты. Сейчас я перепроверил, и да действительно без преобразования можно сравнивать, спасибо Вам.

 
glich:

По какой-то мне не ведомой причине, с первого раза у меня не получилось сравнить две даты. Сейчас я перепроверил, и да действительно без преобразования можно сравнивать, спасибо Вам.

Наверное там строки были. Их тоже можно сравнивать между собой. Правда правила сравнения и результат немного другие.

Причина обращения: