Первый робот на AmiSharp
Готов первый робот с использованием AmiSharp.
Поставленная Заказчиком задача состояла из двух частей
- Тестирование алгоритма в программе технического анализа на исторических данных
- В случае получения положительных результатов реализация алгоритма на языке qpile (либо внешней программой)
Алгоритм представлял собой комбинацию скользящих средних и фрактального анализа. Варьироваться должны как параметры фрактала так и тип и параметры скользящей средней.
В качестве программы технического анализа был выбран Amibroker. На встроенном языке AFL была написана модель алгоритма. Модель позволяет оптимизировать параметры фракталов (размерность), защитные стопы, уровни входа и выхода из позиции. Фильтром позиций является скользящая средняя. Кроме встроенных в Амиброкер Заказчику были предоставлены дополнительно более десятка различных типов скользящих средних на выбор (см. статью Все скользящие средние в одном флаконе). Список доступных скользящих средних:
- Simple MA
- Exponential MA
- Double Exponential MA
- Trimple Exponential MA
- Wilders MA
- EMA Кауфмана
- TSF
- Линейная регрессия
- T3
- ViDYA(CMO)
- ViDYA(stDev)
- TRIMA
- HMA
- ALMA
- Displaced MA
- FRAMA
- Juric MA
- SWMA
- SMAD
Очевидно, в терминале QUIK большинства скользящих из этого списка нет. Если Заказчику потребуется использование одной (или не дай бог нескольких) из таких отстутствующих в терминале QUIK скользящих средних в конечной версии робота, придётся каждую из них отдельно программировать. Также реализована возможность торговать как по исходным свечам, так и по синтетическим, например Heiken-Ashi.
После тестирования модели Заказчик принял решение реализовать алгоритм в виде механической торговой системы. Вместо дублирования алгоритма на qpile с программированием необходимых Заказчику скользящих средних было принято решение использовать AmiSharp и предоставить возможность по-прежнему пользоваться всем набором скользящих. Вариант построения робота с использованием StockSharp был отвергнут по причине несоразмерных трудозатрат.
В исходный код скрипта на AFL был добавлен операционный блок, выставляющий заявки в терминал по сигналам модели и получающий результаты исполнения этих заявок. Средств встроенного языка AFL с запасом хватает для создания всего необходимого пользовательского сервиса: визуализации процесса торговли, создания отчетов, уведомления пользователя о нестандартных ситуациях, в том числе по email.
Вот так выглядит работа торговой системы.
На экране три программы - терминал QUIK, программа теханализа AmiBroker и связка AmiSharp. Терминал занимается взаимодействием с торговой системой - выставлением заявок, получением их результатов и трансляцией котировок в Амиброкер. Иных задач в построенной МТС он не решает. Связка AmiSharp получает таблицы ( сделок и пр.) из терминала и делает их доступными скрипту, работающему в Амиброкере. Скрипт внутри Амиброкера несёт всю логическую нагрузку - анализирует котировки, рассчитывает индикаторы, принимает решения об открытии/закрытии позиций, контролирует их исполнение (полное, частичное, себестоимость и т.д.), создает пользовательские отчёты.
Как видно, на одной из свечей в соответствии с алгоритмом скрипт Амиброкера принял решение открыть позицию short. Скрипт посылает в торговую систему транзакцию, позиция открывается. Сделка видна на графике терминала. Этот график показан для наглядости, в обшем случае для работы робота он не требуется. После осуществления сделки информация о ней появилась в таблице сделок терминала, и скрипт робота с помощью AmiSharp проконтролировал результат. Также скрипт отслеживает нестандартные ситуации и формирует пользовательские отчеты. На скриншоте виден отчет о сделках робота в формате Excel, который формируется скриптом Амиброкера в реальном времени и включает в себя информацию и количестве и себестоимости сделок.
Вот запись нескольких минут работы. В демонстрационных целях велась торговля в игровом режиме. Настройки взяты произвольно, таймфрейм - 1 минута, прибыльность в расчет не принимается.
Возможности Амиброкера позволяют реализовать весьма богатый и удобный интерфейс. Можно выполнять одновременно в реальном времени произвольное количество скриптов, каждый из которых работает со своим инструментом, своим таймфреймом и своими настройками. Каждый из скриптов может работать со своим торговым счетом, а могут и на одном, все зависит от желания Пользователя. При этом нет никаких синтетических задержек (как, например, в qpile). Количество одновременно выполняемых задач ограничены лишь производительностью компьютера. Мне не хватило терпения загрузить по упора компьютер 7-летнего возраста - CPU 2.6ГГерц ОЗУ 2Мб - на десятом по счету скрипте, работающем параллельно без видимого увеличения загрузки процессора, я прекратил попытки.
Все возможности по удобному и моментальному изменению параметров графиков остаются в силе. Происходит это точно так же как и в режиме обычного индикатора без каких-либо изменений в скрипте. Работа торговой системы в Амиброкере никак не ограничивает пользователя в использовании Амиброкера с иными задачами. Можно параллельно торгующему роботу запускать бэктестер, оптимизатор, загружая в них как скрипт работающего робота, так и любой иной. Не вызывает сложностей одновременная работа нескольких разных скриптов, торгующих на рынке, если они написаны с учетом такой возможности. Для работы нескольких торгующих скриптов (по одному алгоритму или по разным) достаточно одной копии AmiSharp в памяти.
Замечен и отрицательный момент по сравнению с роботами, написанными на qpile - более сложный процесс запуска робота, связанный с настройкой протокола DDE. Но если учесть, что пользователи успешно справляются с запуском роботов, написанных в виде внешних программ, настройка которых ничем не проще, можно считать этот недостаток допустимым.
Реализация подобного функционала на qpile крайне затруднительна (Heiken-Ashi). Снабдить внешнюю программу (StockSharp) всем описанным функционалом вполне возможно, но придется проделать огромный объём рутинной работы.
Особо следует отметить легкость изменения алгоритма. Достигается простым изменением формулы Амиброкера, что невозможно ни в qpile, ни во внешних программах на языке высокого уровня.
Комментарии
RSS лента комментариев этой записи