1. На официальном форуме не нашел ответа.
2. Время в минутах не подходит так как я не знаю время последнего бара. (данный параметр можно будет использовать в реальной торговле, так как я понимаю что например конец дневной сессии 18:45, значит последний минутный бар после 18:44. и соответственно по времени можно сгенерировать сигнал для торговой операции во время открытия последнего бара).
3. формула close[i-n] не подходит, так как она просто вернет значение цены закрытия n баров назад, но вернет -то она его в текущий момент.
Изначальный вопрос такой:
хочу в бэктестинге закрыть позицию в конце дня, скажем на открытии последнего минутного бара.
Но мне не известно какой бар по времени последний (так как в разные года биржа закрывалась в разное время), поэтому нельзя написать закрыться в определенное время (скажем после 18:44 или после 23.49).
Единственный способ который я использовал ранее для бэктестинга закрытия позиции в конце дня — это «заглянуть» вперед, чтобы понять что текущий бар последний и на нем закрыться.
в метастоке использовал следующую формулу:
c1:=If( DayOfWeek()=Ref(DayOfWeek(),1) ,0,1);
(определение последнего бара текущего дня:
если день недели текущего бара такой же как день недели следующего бара, то вернуть 0, значит текущий бар не последний;
в противном случае вернуть 1 — текущий бар последний)
ref(c1,1)
(смещение на один бар назад относительно последнего, для генерации сигнала)
точнее проверка того что след. бар последний значит текущей предпоследний и на нем генерируем сигнал.
Может есть еще какие-то способы решения вопроса?
Всем спасибо за содействие.
2 понятно что время конца прошлого дня = времени конца текущего дня… т.е. как только находим конец дня запоминаем время бара
3…
DateTime alertTime = Convert.ToDateTime("" + TimeClose + ":35:00");
а это в цикле в самом начале
if (sec.Bars[i].Date.TimeOfDay > alertTime.TimeOfDay)
{
if (lp1 != null)
lp1.CloseAtMarket(i + 1, «LTime»);
if (lp2 != null)
lp2.CloseAtMarket(i + 1, «LTime»);
if (sp1 != null)
sp1.CloseAtMarket(i + 1, «STime»);
if (sp2 != null)
sp2.CloseAtMarket(i + 1, «STime»);
continue;
}
Всего баров в дне = Х1
Х2=баров от начала дня
Если Х2=Х1-1, то close all
Как то так в одном советнике я считал до открытия американской сессии.