Автор |
Сообщение |
roma095
Зарегистрирован: 02.02.2012
Сообщения: 170
|
Подскажите. Есть код для теста. Перевертыш, то есть всегда в рынке.
Если я тестирую на истории, то получается, что он учитывает прибыль/убытки по гэпу. Что не очень правильно.
Какую куда строчку можно добавить, чтобы независимо от текущей позиции лонг/шорт, выходили из позы и фиксировали прибыль/убыток в 23:50 ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Sell = Cover = TimeNum() == 235000; |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
roma095
Зарегистрирован: 02.02.2012
Сообщения: 170
|
Спасибо. У меня было sell=cover=0. Оставляю только вашу строчку? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Ну да. В 23.50 все открытые позиции будут закрываться. Правда, тут один нюанс есть: в истории может быть дыра в данных, и свечки со временем 23.50 может не оказаться... Чтобы защититься от таких дыр, лучше вот так написать:
Sell = Cover = TimeNum() >= 235000 OR DateTime() != Ref(DateTime(), -1);
С таким кодом позиции по любому в конце дня закроются, даже если есть пропуски баров. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
Так писать нельзя
Sell = Cover = DateTime() != Ref(DateTime(), -1);
они на каждом баре не равны из-за времени и закрытие будет тут же.
Если использовать
Sell = Cover = DateNum() != Ref(DateNum(), -1);
то закрытие будет на первом баре следующего дня, тоже не дело.
А как сделать сам тоже думаю. Пробовал через 235000-100*Interval()/60, но это не для всех ТФ, пример -3 минуты - последний бар начинается в 23-48. И от проблемы дыры в данных это не спасёт.
Только если для теста заглянуть в будущее
Sell = Cover = DateNum() != Ref(DateNum(), 1); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
belin писал(а): |
Так писать нельзя
Sell = Cover = DateTime() != Ref(DateTime(), -1);
они на каждом баре не равны из-за времени и закрытие будет тут же.
Если использовать
Sell = Cover = DateNum() != Ref(DateNum(), -1);
то закрытие будет на первом баре следующего дня, тоже не дело.
А как сделать сам тоже думаю. Пробовал через 235000-100*Interval()/60, но это не для всех ТФ, пример -3 минуты - последний бар начинается в 23-48. И от проблемы дыры в данных это не спасёт.
Только если для теста заглянуть в будущее
Sell = Cover = DateNum() != Ref(DateNum(), 1); |
Тьфу, ёлки, конечно же DateNum(), опечатка. Спасибо за поправку.
Sell = Cover = TimeNum() >= 235000 OR DateNum() != Ref(DateNum(), -1);
От дыр в данных эта конструкция защищает на все сто, позиции гарантированно будет закрыты в интервале между 23:50 и началом следующих суток (на первой же имеющейся в этом интервале свече).
Но если речь идёт не о круглосуточных рынках - тогда да, только через заглядывание в будущее:
Sell = Cover = TimeNum() >= 235000 OR DateNum() != Ref(DateNum(), 1); |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
|