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

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

 *
Цена
От 199$
799$
10$/мес.
От 499$
Язык программирования
AFL
Встроенный компилятор C# с редактором
Блок-схемы
Собственный, встроенный
Подключение собственных модулей
да
да
да
да
Интергация с торговыми системами
да
да
да
да
Получение котировок из независимых источников(real-time)
Любые рынки
Любые рынки
Российские рынки
Западные рынки
Простота в освоении программы
Просто
Сложно
Просто
Сложно
Позиционирование
Для всех
Для продвинутых пользователей
Для начинающих
Для всех
Редактов индикаторов
Да
Да
Нет
Да
Русскоязычная поддержка
Нет
Нет
Есть
От агентов
*Более подробную техническую информацию смотрите на официальных сайтах.

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

Запускаем 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 );           //Тейк-профит
Получилась настоящая система. Конечно, она не полноценная, но уже можно протестировать ее на истории. Для этого нам понадобится скачать архив котировок фьючерса на индекс РТС и произвести небольшую настройку Амиброкера.

Скачиваем котировки:
Идем на finam.ru выбираем необходимый инструмент. Чтобы скачать данные об объеме, выбираем вот эту строчку:
*Если вам нужна информация по открытому интересу (ОИ) то такие данные можно скачать на http://mfd.ru*
В Amibroker нажимаем File > Import Wizard > Pick files и заполняем появившееся окошко по схеме.


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


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



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

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

Результаты:






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

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

Посмотреть законченный код системы
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); //Величина комиссии
BuyPrice=SellPrice=O;   
Cond1= Ref(HHV(H,6),-2)-Ref(LLV(L,6),-2)<200; 
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(LLV(L,6),-2)>Ref(C,-1) AND Cond1;
ShortPrice=O;
Cover=DayEnd;
CoverPrice=C;
ApplyStop(stopTypeLoss, stopModePercent, 1,1, True );
ApplyStop(stopTypeProfit, stopModePercent, 1,1, True );
Похожие посты:

3 коммент.:

Unknown комментирует...

Огромное спасибо!

Анонимный комментирует...

супер

Unknown комментирует...

Подскажи, а можно нанести сделки из файла на график в Amibroker ???

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