Germany | Finland | Saint Petersburg | Drive

Первый робот на AmiSharp

Опубликовано в Торговые системы

Готов первый робот с использованием AmiSharp.

 

Поставленная Заказчиком задача состояла из двух частей

  • Тестирование алгоритма в программе технического анализа на исторических данных
  • В случае получения положительных результатов реализация алгоритма на языке qpile (либо внешней программой)

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

В качестве программы технического анализа был выбран Amibroker. На встроенном языке AFL была написана модель алгоритма. Модель позволяет оптимизировать параметры фракталов (размерность), защитные стопы, уровни входа и выхода из позиции. Фильтром позиций является скользящая средняя. Кроме встроенных в Амиброкер Заказчику были предоставлены дополнительно более десятка различных типов скользящих средних на выбор (см. статью Все скользящие средние в одном флаконе). Список доступных скользящих средних:

  1. Simple MA
  2. Exponential MA
  3. Double Exponential MA
  4. Trimple Exponential MA
  5. Wilders MA
  6. EMA Кауфмана
  7. TSF
  8. Линейная регрессия
  9. T3
  10. ViDYA(CMO)
  11. ViDYA(stDev)
  12. TRIMA
  13. HMA
  14. ALMA
  15. Displaced MA
  16. FRAMA
  17. Juric MA
  18. SWMA
  19. 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, ни во внешних программах на языке высокого уровня.

 

Добавить комментарий