вторник, 19 марта 2013 г.

Как написать торговую систему в Amibroker?

  Зачем это нужно?
Сразу оговоримся,что любую торговую систему, состоящую из определенного набора правил можно и нужно алгоритмизировать или перенести на язык «если-то». А соответственно реализовать автоматическую торговую систему. Если же стратегия торговли не поддается формализации, то в ней присутствует случайный компонент, влияние которого на результативность предсказать невозможно.
 Обличение набора торговых правил в программный код даст не только возможность оценить целесообразность использования данной методики торговли на исторических данных, но и возможность создать некий аналитический аппарат, который будет мгновенно обрабатывать полученную биржевую информацию, строить прогноз о движении цены, предлагать готовое решение, самостоятельно совершать биржевые операции.
  AmiBroker – перспективная, гибкая и динамично развивающаяся программа технического анализа, которая конкурирует с MetaStock, Wealth-Lab Developer и TS Lab. Продукт является недорогим и обеспечивает полноценную среду для создания и тестирования торговых систем.В таблице ниже я постарался собрать основную информацию по популярным программам технического анализа, которая поможет новичку сделать выбор. Я остановился на Ami.
  Итак, у вас есть торговая идея, которую вы считаете рабочей и совершенно не сомневаетесь в ее способности принести вам профит. Стоит это проверить. Так как в будущее заглянуть дано не каждому, то будем оперировать с историческими данными. И опираясь на прошлое, строить прогноз на будущее. Поэтому, критерии проверки системы должны быть достаточно жесткими.
    Такие параметры как проскальзывание и размер комиссии лучше указывать больше чем есть в реальности. Пусть результаты тестирования на исторических данных будут хуже, чем тестирование или работа с реальным потоком биржевых котировок, а не наоборот. В связи с этим я рекомендую начинать любую вашу систему со следующего кода:

Запускаем Amibroker и открываем Formula Editor


И вставляем строки:
KomBir=2;                                        //комиссия биржи за круг
KomBro=2;                                        //комиссия брокера за круг
prosk=50;                                        //Проскальзывание
SetPositionSize(1,4);                            //Торгуемое количество лотов
SetTradeDelays( 0, 0, 0, 0 );                    //Задержка торгов
SetOption("InitialEquity", 100000);              //Начальный депозит
SetOption("AllowSameBarExit", True);             //Запрет выхода на баре входа
SetOption("ActivateStopsImmediately", True);     //Немедленная активация стопов
SetOption("AllowPositionShrinking", False);  
//Разрешить окрывать позицию размером меньше заданного (при недостатке средств) 
SetOption("FuturesMode", True);                  //Режим маржинальной торговли
SetOption("CommissionMode", 2);                  //Режим комиссии
SetOption("CommissionAmount",(KomBir+KomBro)/2); //Величина комиссии
Buy=;                                            //Правила покупки
Short=;                                          //Правила продажи
BuyPrice=prosk+O/С/H/L;                     //Учитываем проскальзывание при покупке
ShortPrice=-prosk+O/С/H/L;                  //Учитываем проскальзывание при продаже

//среди O/С/H/L выберите нужное значение

Sell=;                                           //Правила закрытия длинной позиции
Cover=;                                          //Правила закрытия короткой позиции 
SellPrice=-prosk+O/С/H/L;                   //Учитываем проскальзывание при продаже
CoverPrice=prosk+O/С/H/L;                   //Учитываем проскальзывание при покупке

Когда я тестирую свои стратегии на фьючерсе индекса РТС комиссию биржи и брокера за каждую сделку устанавливаю в размере 2 рублей за операцию, а проскальзывание 50-100 пунктов(в зависимости от времени торгов - в основную и вечернюю сессию соответственно)

Если вы не знаете что означает та или иная переменная, то обязательно скачайте русскоязычный HELP тут:  http://www.amisite.ru/files/files/broker.chm

   Около 80% стратегий будут начинается с этого шаблона. Теперь давайте проверим такую идею: Говорят, что после консолидации цены в узком диапазоне и дальнейшем выходе из него цена получает "ускорение" и начинает зарождаться новое движение.
Объяснить это можно следующим образом. Когда на рынке присутствует неопределенность, никто не хочет покупать или продавать, выравнивается баланс между продавцами и покупателями. Но когда на рынок приходит новая информация, способная оказать существенное влияние, то происходит выход цены из сложившегося коридора. 
Часто такая ситуация наблюдается перед выходом важных новостей.

Выделим необходимые условия:
1) Пусть, консолидация - это состояния при котором цена была в диапазоне +/- 100 пунктов  последние 30 мин.
2)  Выход из диапазона - закрытие 5минутного бара выше или ниже зоны консолидации.
3) Открываем позицию в направлении пробоя.
4) Стоп-лосс и тейк-профит поставим на расстоянии 1% от точки входа.
5) Выходим из позиции по тейку/стопу или в конце торговой сессии.

Конечно из-за большого количества параметров система очень неустойчива. И, следовательно, ненадежна. Но для примера нам подходит.
Покопавшись в справке, получаем следующий код:
Cond1= Ref(HHV(H,6),-2)-Ref(LLV(L,6),-2)<200;                     //Условие №1
DayEnd = Ref(Day(),1) != Ref(Day(), 2) OR Day() != Ref(Day(), 1); //Последний бар дня
Buy=Ref(C,-1)>Ref(HHV(H,6),-2) AND Cond1;                         //Открываем лонг
Sell=DayEnd;
SellPrice=C);
Short=Ref(C,-1)<Ref(LLV(L,6),-2) AND Cond1;                       //Открываем шорт
ShortPrice=O;
Cover=DayEnd;
CoverPrice=C;
ApplyStop(stopTypeLoss, stopModePercent, 1,1, True );             //Стоп лосс
ApplyStop(stopTypeProfit, stopModePercent, 1,1, True );           //Тейк-профит
Получилась настоящая система. Конечно, она не полноценная, но уже можно протестировать ее на истории. Для этого нам понадобится скачать архив котировок фьючерса на индекс РТС и произвести небольшую настройку Амиброкера.


Теперь нужно настроить параметры нового инструмента примерно как на рисунке.


После этого все готово для первого тестированияAnalysis > Automatic Analysis > Back Test 
Увидим, что появился список сделок.
Выберите несколько из них и проверьте, 
правильно ли робот исполняет наш алгоритм, 
по какой цене открываются сделки,
 и не заглядывает ли система в будущее?



Кликаем Report... 
     И теперь я предлагаю обратить внимание на один полезный код, для того чтобы отчеты по вашим системам были красивее. Добавим в стандартную форму отчета гистограмму прибыли по месяцам. Вот как она выглядит:
Мне кажется, что очень информативно и красочно. 
Скачать его можно тут.
Итак, тестирование. 
Период на котором мной была проверена система: с 01.04.2008 по 01.04.2011. На фьючерсе на индекс РТС. (Гарантийное обеспечение = 9000, Стоимость пункта = 0,6 рубля (настраивается в Symbol > Information) )

Да, не стоит забывать, что тестирование проводилось только одним контрактом на 100 тысячный депозит. Так что большее значение для нас здесь имеют не столько относительные, сколько абсолютные показатели.





































Цифры, конечно не впечатляющие.
Сделок мало, говорить что-то о значимости выборки мы не можем. Огромные просадки и мизерная доходность...
Но тем не менее, именно на таком примере будет правильно показать, какие чудеса может совершить оптимизация с элементарной системой. И объяснить, почему это опасная функция.

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

Комментариев нет:

Отправить комментарий