Как закрыть ордер через определенное время

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

Добрый день

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

Реализовал в тестовом режиме ( считал часовые тики), а в реале теперь не знаю как реализовать ( понятно, если советник круглосуточно висит, то тоже можно считать часы, но я хочу сделать чтобы советник можно было  останавливать и вновь запускать). По астрономическому времени не получается - мешают субботы и воскресенья и  праздники.

Хотел использовать функцию IsTradeAllowed(symbol, time) - чтобы исключить нерабочие часы, но    почему-то эта функция в выходные тоже возвращает true (?).

Подскажите  пожалуйста- какую еще функцию можно использовать ?

Maxim Kuznetsov
13781
Maxim Kuznetsov  
Alex406:

Добрый день

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

Реализовал в тестовом режиме ( считал часовые тики), а в реале теперь не знаю как реализовать ( понятно, если советник круглосуточно висит, то тоже можно считать часы, но я хочу сделать чтобы советник можно было  останавливать и вновь запускать). По астрономическому времени не получается - мешают субботы и воскресенья и  праздники.

Хотел использовать функцию IsTradeAllowed(symbol, time) - чтобы исключить нерабочие часы, но    почему-то эта функция в выходные тоже возвращает true (?).

Подскажите  пожалуйста- какую еще функцию можно использовать ?

узнать сколько минут (минутных баров) прошло с момента открытия ордера : iBarShift(OrderSymbol(),PERIOD_M1,OrderOpenTime());

Ivan Ivanov
1921
Ivan Ivanov  
Maxim Kuznetsov:

узнать сколько минут (минутных баров) прошло с момента открытия ордера : iBarShift(OrderSymbol(),PERIOD_M1,OrderOpenTime());

Иногда , особенно ночью не в каждой минуте есть тики. Получается так , что за 60 минут било приметно 57 баров.

А то можете просто вычислить время в минутах = (TimeCurrent()-OrderOpenTime())/60

Ihor Herasko
21867
Ihor Herasko  
Ivan Ivanov:

Иногда , особенно ночью не в каждой минуте есть тики. Получается так , что за 60 минут било приметно 57 баров.

А то можете просто вычислить время в минутах = (TimeCurrent()-OrderOpenTime())/60


Тут уж смотря, что нужно топикстартеру. Судя по всему, ему нужно именно количество баров, т. к. есть упоминание о том, что мешают субботы и воскресенья. Таким образом, либо считаем все время без исключения, либо только то, когда были бары. Но если учесть, что говорилось именно о часах, то на Н1 проблема отсутствия баров встречается крайне редко. Поэтому просто:

int nOrderExistanceHours = iBarShift(OrderSymbol(),PERIOD_H1, <время открытия ордера>);
Alex406
199
Alex406  
Ihor Herasko:

Тут уж смотря, что нужно топикстартеру. Судя по всему, ему нужно именно количество баров, т. к. есть упоминание о том, что мешают субботы и воскресенья. Таким образом, либо считаем все время без исключения, либо только то, когда были бары. Но если учесть, что говорилось именно о часах, то на Н1 проблема отсутствия баров встречается крайне редко. Поэтому просто:


Спасибо, с iBarShift все получилось.Нужны были именно рабочие часы.А через астрономическое время  мешают не только субботы и воскресенья, но и праздники, и укороченные сессии перед праздниками.

Maxim Kuznetsov
13781
Maxim Kuznetsov  
Ihor Herasko:

Тут уж смотря, что нужно топикстартеру. Судя по всему, ему нужно именно количество баров, т. к. есть упоминание о том, что мешают субботы и воскресенья. Таким образом, либо считаем все время без исключения, либо только то, когда были бары. Но если учесть, что говорилось именно о часах, то на Н1 проблема отсутствия баров встречается крайне редко. Поэтому просто:

c PERIOD_H1 топикстартер может сильно попасть :-) если сделка открылась в 11.55 то уже в 12.01 iBarShift скажет что прошёл целый час и сделку нужно закрыть. Наверное у него пока прокатывает, если открывает сделки строго по границе часов, но это ненавсегда :-)
Alex406
199
Alex406  
Maxim Kuznetsov:
c PERIOD_H1 топикстартер может сильно попасть :-) если сделка открылась в 11.55 то уже в 12.01 iBarShift скажет что прошёл целый час и сделку нужно закрыть. Наверное у него пока прокатывает, если открывает сделки строго по границе часов, но это ненавсегда :-)

Я оттестировал на истории, при методе на открытии бара. Главная задача теперь - чтобы в реале  точно так же моделировалось. Запрограммировал, что открывать буду в теч. нескольких минут в начале часа , а  колво часов буду считать по  iBarShift.  По логике должно работать как на истории. Конечно , отличия все равно будут - если  открывать в понедельник в 0 часов  - возможен гэп, который при тестировании на истории при методе на открытии бара не учитывается. Но это отдельно  нужно поисследовать.

Ihor Herasko
21867
Ihor Herasko  
Maxim Kuznetsov:
c PERIOD_H1 топикстартер может сильно попасть :-) если сделка открылась в 11.55 то уже в 12.01 iBarShift скажет что прошёл целый час и сделку нужно закрыть. Наверное у него пока прокатывает, если открывает сделки строго по границе часов, но это ненавсегда :-)

Понятно, что у каждой задачи есть свои нюансы, которые нужно учесть. Главное, что дано верное направление для поиска решения.

Ihor Herasko
21867
Ihor Herasko  
Alex406:

Я оттестировал на истории, при методе на открытии бара. Главная задача теперь - чтобы в реале  точно так же моделировалось.


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

Запрограммировал, что открывать буду в теч. нескольких минут в начале часа , а  колво часов буду считать по  iBarShift.  По логике должно работать как на истории. Конечно , отличия все равно будут - если  открывать в понедельник в 0 часов  - возможен гэп, который при тестировании на истории при методе на открытии бара не учитывается. Но это отдельно  нужно поисследовать.

Час открытия можно отбрасывать, считая только полные часовые бары после бара открытия и до текущего бара. Таким образом, если открытие произошло даже в 11:00:01, а сейчас 12:59:50, то прошло все равно 0 часов. Вот в 13:00:00 будет 1 полный час.
Victor Nikolaev
Модератор
13970
Victor Nikolaev  
Ihor Herasko:


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

Час открытия можно отбрасывать, считая только полные часовые бары после бара открытия и до текущего бара. Таким образом, если открытие произошло даже в 11:00:01, а сейчас 12:59:50, то прошло все равно 0 часов. Вот в 13:00:00 будет 1 полный час.

Может в 12:01. А то два часа уже прошло. Вода выкипела и пельмени разварились

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