Скачать MetaTrader 5

Время первого бара дня

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поделись своими разработками. Это увеличит твой рейтинг.
Forex Trader
114257
Forex Trader 2006.09.13 11:45 
Знатоки, подскажите, как проще узнать время открытия первого бара дня?
Вопрос актуален для торговли CFD. Бывают дни, когда сессия начинается в нестандартное время (месяц при переходе на летнее/зимнее время, праздники и т.п.).

Я придумал следующий способ:
iTime(Symbol(),PERIOD_M1,
  iBarShift(Symbol(),PERIOD_M1,
    StrToTime(TimeToStr(TimeIn_,TIME_DATE)),false));


Но, по-моему, это либо слишком круто, либо слишком криво. Все-таки ЧЕТЫРЕ (!) преобразования... :-)


Forex Trader
114257
Forex Trader 2006.09.13 12:02  
Пардон посмотрел на время открытия и понял.
Forex Trader
114257
Forex Trader 2006.09.13 12:33  

Пардон посмотрел на время открытия и понял.


Юмор оценил... :-)
Forex Trader
114257
Forex Trader 2006.09.13 13:07  
Я обычно так делаю:
for (cnt=0;cnt<1440/Period();cnt++)	 
{
   if (TimeHour(Time[cnt+1])==StartHour-1 && TimeHour(Time[cnt])==StartHour) break;
} 
OurHourTime=Time[cnt];


Forex Trader
114257
Forex Trader 2006.09.13 16:53  
Можно сделать по-другому, если знать дату :

ТекущаяДата=StrToTime(TimeToStr(CurTime(),TIME_DATE));
НачБар = iBarShift( NULL , 0, ТекущаяДата, true);
if (НачБар = -1) НачБар =iBarShift( NULL , 0, ТекущаяДата)-1;

Меня больше волнует вопрос как отнимать от даты по одному дню ?
Да так, чтобы идти только по рабочим дням - биржевым.
Тоесть, чтобы после воскресенья (у меня воскресенье есть сессия) шла пятница.
Вот как это сделать лучше всего ?
Forex Trader
114257
Forex Trader 2006.09.13 17:24  
И еще - а как вы находите последний бар дня ?
Допустим, что его время тоже неизвестно : чужая история, дыры в истории и т.д.
Вопрос, конечно риторический - можно вышепоказанным способом, только надо от даты отнять один день, найти первый бар и сместиться на один бар.
Вот здесь все и упирается в дату - как от даты отнять один день.
Учтите, что после 15 числа не всегда идет 16 - может идти 18.
Forex Trader
114257
Forex Trader 2006.09.13 17:29  
Можно сделать по-другому, если знать дату :

ТекущаяДата=StrToTime(TimeToStr(CurTime(),TIME_DATE));
НачБар = iBarShift( NULL , 0, ТекущаяДата, true);
if (НачБар = -1) НачБар =iBarShift( NULL , 0, ТекущаяДата)-1;



Да, это симпатично... Над остальным надо подумать...
Forex Trader
114257
Forex Trader 2006.09.13 17:38  
Можно сделать по-другому, если знать дату :
...
НачБар = iBarShift( NULL , 0, ТекущаяДата, true);
...


Вот только есть вопрос... Как известно, если iBarShift( NULL , 0, Дата, false) не находит бара с нужным временем, то он возвращает номер ближайшего бара, но следующего или предыдущего (если они равноудалены)???
Forex Trader
114257
Forex Trader 2006.09.13 17:41  
И еще - а как вы находите последний бар дня ?
Допустим, что его время тоже неизвестно : чужая история, дыры в истории и т.д.
Вопрос, конечно риторический - можно вышепоказанным способом, только надо от даты отнять один день, найти первый бар и сместиться на один бар.
Вот здесь все и упирается в дату - как от даты отнять один день.
Учтите, что после 15 числа не всегда идет 16 - может идти 18.


Непробиваемый (хоть и не самый рациональный) вариант - найти первый бар (или любой другой в нужном дне) и перебирать бары, уменьшая Shift, пока не сменится дата...
Forex Trader
114257
Forex Trader 2006.09.13 17:45  
Я пока так и делаю - это единственная тормозная функция в моем советнике.

datetime ОтнятьОтДаты(datetime ВыбДата,int КвоДней)
{
datetime ВремДата,Дата;
int i,j,x;
int НачБар,КонБар;
datetime ИскДата;

x = КвоДней;
НачБар = iBarShift( NULL , 0, ВыбДата,true);
if (НачБар = -1) НачБар =iBarShift( NULL , 0, ВыбДата)-1;

//Comment("Для Даты =",ВыбДата, " Смещение равно = ",НачБар);
for(j=НачБар;j<Bars;j++)
{
ВремДата = StrToTime(TimeToStr(Time[j],TIME_DATE));
if (ВремДата!=ВыбДата)
{
x = x - 1;
ВыбДата = ВремДата;
}
if (x == 0) break;
}

return(ВремДата);
}


Но по барам я не хочу лазить - слишком долго. А разработчики с датой не включили почти никаких функций.
Например, в 1С я просто отнимаю от даты 1 или прибавляю.
В МТ4 таких функций нет.
Forex Trader
114257
Forex Trader 2006.09.16 01:57  
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий