Стратегия Donchian breakout

Автор: Laber

Стратегия Donchian breakout - Thu Sep 02 2010 02:33 PM

Для реализации стратегии "Donchian breakout" за основу взят скрипт на сайте Wealth-Lab.

Стратегия аналогична классической системе пробоя ценового канала.
Усовершенствование заключается в динамическом изменении
периода определения ценового канала для закрытия.
Принцип простой - после открытия позиции период расчета
для канала закрытия уменьшается на шаг (в оригинале это 1).


На графике отображены заходы в позиции:





Результаты тестирования стратегии.


Кривая капитала:




Отчет с результатами тестирования:





В прикрепленных файлах можно найти всю необходимую информацию по этой стратегии.
Автор: DIS

Re: Стратегия Donchian breakout - Fri Jan 28 2011 01:45 AM

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

В боевом режиме скрипт работает совершенно не так, как в режиме симуляции. А именно, по разному расставляются стопы. В "боевом" режиме стопы периодически начинают почти сразу выставляться по low предыдущего бара, параллельно запущенный скрипт в режиме симуляции выставляет их "как положено".

Просмотрев код скрипта сразу обратил внимание на следующий подозрительный код:

#region execute signals
//--------------------------------------------------------------------------------
// выполнение сигналов для длинной позиции
LongPos = source.Positions.GetLastActiveForSignal("LN");
if (LongPos == null)
{
// Если нет активной длинной позиции
if (BuyPrice > 0)
{
// Если есть сигнал Buy,
// выдаем условный ордер на открыте новой длинной позиции.
source.Positions.BuyIfGreater(bar+1, 1, BuyPrice, "LN");
}
LongPos = source.Positions.GetLastActiveForSignal("LN");
if (LongPos != null) LongLowPeriod = LongClosePeriod;
}

Подозрительный потому, что по всей видимости функция BuyIfGreater работает по разному в режиме симуляции и в боевом режиме. Похоже, в режиме симуляции, после выполнения BuyIfGreater позиция сразу "открывается" и следующий GetLastActiveForSignal дает true, а в боевом режиме - позиция открывается на следующем цикле и GetLastActiveForSignal дает false. Отсюда, LongLowPeriod не сбрасывается, что приводит к радикальным отличиям в функционировании скрипта.

Большая просьба к разработчикам подтвердить или опровергнуть мою теорию и более подробно описать работу функций выставления заявок.

К сожалению, существующая документация совершенно не раскрывает детали работы данных функций (особенно тех, которые по разному могут работать в режиме симуляции и в бою), а ведь от детального понимания их работы зависят реальные деньги!
Автор: Nektodron

Re: Стратегия Donchian breakout - Fri Jan 28 2011 10:34 AM

Да все так и есть, это нужно учитывать при программировании на API. Все GetLastActiveForSignal должны быть до создания новых сигналов, код в визуальном редакторе так и построен.
Автор: DIS

Re: Стратегия Donchian breakout - Fri Jan 28 2011 11:54 AM

Спасибо, ясно. Ясно даже, отсутствие документации - требует времени.

Не ясно только, почему в режиме симуляции GetLastActiveForSignal работает не так, как должен.

Разве нельзя отложить открытие позиции при симуляции до следующего цикла? Ошибки скриптов были бы выявлены в процессе отладки, а не случайно - в процессе реальной торговли...
Автор: Nektodron

Re: Стратегия Donchian breakout - Fri Jan 28 2011 12:08 PM

Потому что в режиме лаборатории список позиций сразу меняется, а в реальных торгах перед каждым расчетом берется из сделок/заявок.

Отличия еще есть. Например в торговом цикле нельзя чтото хранить в переменных локальных, т.к. в режиме лаборатории все торговая логика идет внутри торгового цикла, а в режиме реальных торгов, скрипт каждый раз полностью пересчитывается при появлении новых данных.
Автор: ZooR

Re: Стратегия Donchian breakout - Sat May 21 2011 05:19 AM

А я из всего вышесказанного ничего не понимаю, но разницу между лабараторией и реальными торгами подтверждаю, сам на это напаролся, отсюда следует вопрос - как с этим бороться, если можно максимально простым языком, очень хочется с этим разобраться.
Автор: Nektodron

Re: Стратегия Donchian breakout - Sat May 21 2011 12:57 PM

Вы напоролись в скрипте на визуальном редакторе или API?
Автор: ZooR

Re: Стратегия Donchian breakout - Sat May 21 2011 02:32 PM

в визуальном редакторе ставится внешний скрипт на API вот на нём это и происходило...
Автор: Nektodron

Re: Стратегия Donchian breakout - Mon May 23 2011 12:08 PM

Что эта проблема не возникала нельзя хранить какие-то вычисляемые внутри торгового цикла данные в переменных. Все должно вычислять каждый раз заново.