Зачем это нужно?
Сразу оговоримся,что любую торговую систему, состоящую из определенного набора правил можно и нужно алгоритмизировать или перенести на язык «если-то». А соответственно реализовать автоматическую торговую систему. Если же стратегия торговли не поддается формализации, то в ней присутствует случайный компонент, влияние которого на результативность предсказать невозможно.
Сразу оговоримся,что любую торговую систему, состоящую из определенного набора правил можно и нужно алгоритмизировать или перенести на язык «если-то». А соответственно реализовать автоматическую торговую систему. Если же стратегия торговли не поддается формализации, то в ней присутствует случайный компонент, влияние которого на результативность предсказать невозможно.
Обличение набора торговых правил в программный код даст не только возможность оценить целесообразность использования данной методики торговли на исторических данных, но и возможность создать некий аналитический аппарат, который будет мгновенно обрабатывать полученную биржевую информацию, строить прогноз о движении цены, предлагать готовое решение, самостоятельно совершать биржевые операции.
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 пунктов(в зависимости от времени торгов - в основную и вечернюю сессию соответственно)
Около 80% стратегий будут начинается с этого шаблона. Теперь давайте проверим такую идею: Говорят, что после консолидации цены в узком диапазоне и дальнейшем выходе из него цена получает "ускорение" и начинает зарождаться новое движение.
Объяснить это можно следующим образом. Когда на рынке присутствует неопределенность, никто не хочет покупать или продавать, выравнивается баланс между продавцами и покупателями. Но когда на рынок приходит новая информация, способная оказать существенное влияние, то происходит выход цены из сложившегося коридора.
Выделим необходимые условия:
1) Пусть, консолидация - это состояния при котором цена была в диапазоне +/- 100 пунктов последние 30 мин.
2) Выход из диапазона - закрытие 5минутного бара выше или ниже зоны консолидации.
3) Открываем позицию в направлении пробоя.
4) Стоп-лосс и тейк-профит поставим на расстоянии 1% от точки входа.
5) Выходим из позиции по тейку/стопу или в конце торговой сессии.
Конечно из-за большого количества параметров система очень неустойчива. И, следовательно, ненадежна. Но для примера нам подходит.
Покопавшись в справке, получаем следующий код:
Скачиваем котировки:
Идем на finam.ru выбираем необходимый инструмент. Чтобы скачать данные об объеме, выбираем вот эту строчку:
*Если вам нужна информация по открытому интересу (ОИ) то такие данные можно скачать на http://mfd.ru*
В Amibroker нажимаем File > Import Wizard > Pick files и заполняем появившееся окошко по схеме.
Теперь нужно настроить параметры нового инструмента примерно как на рисунке.
После этого все готово для первого тестирования. Analysis > Automatic Analysis > Back Test
Увидим, что появился список сделок.
Кликаем Report...
И теперь я предлагаю обратить внимание на один полезный код, для того чтобы отчеты по вашим системам были красивее. Добавим в стандартную форму отчета гистограмму прибыли по месяцам. Вот как она выглядит:
Цифры, конечно не впечатляющие.
Сделок мало, говорить что-то о значимости выборки мы не можем. Огромные просадки и мизерная доходность...
Но тем не менее, именно на таком примере будет правильно показать, какие чудеса может совершить оптимизация с элементарной системой. И объяснить, почему это опасная функция.
О процессе оптимизации пойдет речь в следующей статье; обратим внимание на основные принципы по которым оптимизацию, можно отличить от подгонки под кривую и остановимся на некоторых интересных моментах, которые помогут создать по-настоящему устойчивую систему.
Если вы не знаете что означает та или иная переменная, то обязательно скачайте русскоязычный 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 тысячный депозит. Так что большее значение для нас здесь имеют не столько относительные, сколько абсолютные показатели.
Результаты:
Цифры, конечно не впечатляющие.
Сделок мало, говорить что-то о значимости выборки мы не можем. Огромные просадки и мизерная доходность...
Но тем не менее, именно на таком примере будет правильно показать, какие чудеса может совершить оптимизация с элементарной системой. И объяснить, почему это опасная функция.
О процессе оптимизации пойдет речь в следующей статье; обратим внимание на основные принципы по которым оптимизацию, можно отличить от подгонки под кривую и остановимся на некоторых интересных моментах, которые помогут создать по-настоящему устойчивую систему.
Посмотреть законченный код системы
3 коммент.:
Огромное спасибо!
супер
Подскажи, а можно нанести сделки из файла на график в Amibroker ???
Отправить комментарий