Скачать MetaTrader 5

Поиск времени открытия и закрытия сессии

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Timur Gatin
7189
Timur Gatin  

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

Vasyl Nosal
18650
Vasyl Nosal  

Дык. Зачем тебе библиотека?

uchar hour_session_open=5;
uchar hour_session_close=9;

uint bars_open[];
uint bars_close[];
ArrayResize(bars_open,Bars);
ArrayResize(bars_close,Bars);
uint bars_open_counter;
uint bars_close_counter;

for(int i=0;i<Bars-20;i++)
{
if(TimeHour(Time[i])==hour_session_close && TimeMinute(Time[i])==0) {bars_close[bars_close_counter]=i;bars_close_counter++;}
if(TimeHour(Time[i])==hour_session_open && TimeMinute(Time[i])==0) {bars_open[bars_open_counter]=i;bars_open_counter++;}
}
Vasyl Nosal
18650
Vasyl Nosal  

Можно более изящным путём.

extern string session_open="11:00";
extern string session_close="19:00";


////////////////////////////////////////////////////////////////////////
datetime session_open_=StringToTime(session_open);
datetime session_close_=StringToTime(session_close);

int bars_open[];
int bars_close[];
ArrayResize(bars_open,iBars(Symbol(),PERIOD_D1));
ArrayResize(bars_close,iBars(Symbol(),PERIOD_D1));


int day_in_seconds=60*60*24;
for(int i=0;i<iBars(Symbol(),PERIOD_D1);i++)
{
bars_open[i]=iBarShift(Symbol(),0,session_open_,true);
bars_close[i]=iBarShift(Symbol(),0,session_close_,true);

session_open_-=day_in_seconds;
session_close_-=day_in_seconds;
}

 
Alexey Volchanskiy
17144
Alexey Volchanskiy  
Vasyl Nosal:

Можно более изящным путём.

datetime session_open=D'11:00'; // получится datetime session_open=D'[дата компиляции] 11:00'
По крайней мере для четверки это так
Timur Gatin
7189
Timur Gatin  
Vasyl Nosal:


Задача немного сложнее. Твой вариант не учитывает выходные. Без дыр в истории можно было бы тупо вычитать 86400 и сравнивать время.
Vasyl Nosal
18650
Vasyl Nosal  
Alexey Volchanskiy:
По крайней мере для четверки это так

Спасибо. Исправил.

Vasyl Nosal
18650
Vasyl Nosal  
Timur Gatin:
Задача немного сложнее. Твой вариант не учитывает выходные. Без дыр в истории можно было бы тупо вычитать 86400 и сравнивать время.
А ты знаешь что делает iBarShift? А в конце true/false?
Vasyl Nosal
18650
Vasyl Nosal  

Можешь ещё поизвращатся. После ФОР добавь 

if(!IsTradeAllowed(Symbol(),session_open_) && !IsTradeAllowed(Symbol(),session_close_)) continue;
Timur Gatin
7189
Timur Gatin  
Vasyl Nosal:


Сделай такой индиратор и открой конец 2014 года. Твои варианты не сработают.

 

Vasyl Nosal
18650
Vasyl Nosal  
Timur Gatin:

Сделай такой индиратор и открой конец 2014 года. Твои варианты не сработают.

 

Дык. Так может ты заготовку скинешь???
Timur Gatin
7189
Timur Gatin  
А чего его делать, копируешь полученные данные в буферы индикатора и все.
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий