AmiSharp

Опубликовано в AmiBroker

Amibroker построение роботовДо текущего момента стандартным (для меня) путём реализации торговой системы  была последовательность, состоящая из двух несвязанных между собой этапов:

  1. Моделирование алгоритма в программе технического анализа (я предпочитаю Amibroker)
  2. Повторение алгоритма на языке QPILE / QLUA

Получается, алгоритм каждый раз приходится реализовывать дважды. Надоело.

Поиск в сети выявил несколько попыток создания роботов непосредственно на связке  Quik - Amibroker. Схема проста - котировки из QUIK транслируются в Amibroker, Amibroker принимает решения об открытии или закрытии позиций, конвертируя свои решения в виде создания .tri файла в каталоге импорта транзакций терминала QUIK. Решение довольно простое, однако ему присущ один главный (не считая множества второстепенных) недостаток. Amibroker способен получить лишь результат обработки транзакций терминалом, но никак не результат исполнения самой заявки. Исполнена ли она, полностью ли исполнена, по какой цене, в какое время и т.д. - эту информацию Amibroker получить не в состоянии. Однако для правильно и надёжно функционирующего робота она абсолютно необходима.

Другой широко распространенный вариант построения роботов - на основе библиотеки StockSharp. Роботы, построенные на этой платформе, имеют доступ практически ко всей информации, имеющейся в терминале QUIK, позволяют строить сложные пользовательские интерфейсы, однако в них затруднено манипулирование с историей котировок, визуализация данных и практически отсутствуют средства оптимизации алгоритмов на истории. Да и процесс написания роботов с использованием StockSharp сам по себе очень трудоёмкий.

Существуют и иные варианты построения механических торговых систем на основе терминала QUIK (MS EXCEL и пр.), но возможности таких решений значительно беднее двух ранее описанных.

Я до сих пор в большинстве случаев использовал первый вариант - реализация алгоритма в программе теханализа (Amibroker) и с последующим (полным!) повторением алгоритма на qpile или qlua. Процесс трудоёмкий, но иного способа построить качественный полный цикл в реалиях отечественного рынка биржевого программного обеспечения я не до сих пор не видел.

 Как терминал QUIK может отдать информацию во внешний мир? Путей четыре:

  1. Текстовые файлы. Вариант сразу отброшен - для передачи данных в режиме он-лайн - несерьёзно.
  2. ODBC. Сложен для пользователя и весьма прожорлив к ресурсам.
  3. DDE. Ставим галочку.
  4. API. Не из любой внешней программы доступно, да и данные можно получить далеко не все.

Зайдём с другой стороны. Программа технического анализа Amibroker (как и иные приличные  - Wealth-Lab, Metastock и так далее) имеет возможность подключения внешних COM-объектов. В принципе, такой объект мог бы читать таблицы QUIK посредством протокола DDE. Беседа о судьбах отечества с моим давним другом Alex Kumpan имела неожиданный результат - спустя пару дней появилась первая версия V0.1 альфа nonstable forinternaluseonly notfordistribution Wink brandname Mutant. Такое рабочее название из-за специфики: это и COM-сервер и DDE сервер и библиотека недостающего для реалтайм-торговли функционала. Через неделю - уже вполне приличный продукт, оказавшийся очень удобным инструментом. Идея частично почерпнута из библиотеки StockSharp - отсюда и название.

Идеология проста - это менеджер двумерных таблиц данных. Каждая таблица есть матрица, содержащая произвольное количество столбцов и строк. Источником информации для любой из них могут быть как данные, рассчитанные роботом (роботами) в Амиброкере, так и любая экспортируемая посредством протокола DDE таблица. И, соответственно, функционал - записать, прочитать, поиск, фильтрация, технические функции типа установлена связь и так далее. Зачем нужны таблицы пользователя (не экспортируемые по DDE, создаваемые внутри скрипта)? Ответ прост - хотя Amibroker изначально оперирует массивами, но массивы в нем своеобразные - размерность всегда равна количеству свечей, что не всегда приемлемо при построении реал-тайм алгоритмов (варианты с эмуляцией массивов через генерацию переменной с уникальным именем не рассматриваю - не тот случай). Также отказался от варианта использования JScript/VBScript внутри скриптов AFL. Очень приятной особенностью AmiSharp является возможность видеть на экране в реальном времени содержимое всех существующих таблиц, как импортируемых, так и пользовательских - полезно при отладке алгоритмов.

Вот так выглядит трансляция таблицы текущих параметров из терминала QUIK в AmiSharp:

 

Трансляция таблицы текущих параметров

 

Таким образом, теперь в Amibroker (да и в любых других программах, поддерживающих механизм OLE) можно иметь доступ ко всем данным терминала QUIK, включая, естественно, и котировки. Этой информации вполне достаточно для построения законченной механической торговой системы или робота и (практически) отсутствует необходимость дублирования алгоритма на языках QPILE/Lua или при помощи StockSharp.

Естественно, нет добра без худа. Все-таки, работа робота (Удивляюсь) будет требовать запуска не одного терминала, а еще и Amibroker. В принципе этот вариант ничем не хуже, чем вариант с использованием робота в виде внешней программы. Основное же преимущество данного подхода - одноэтапная разработка алгоритма, и (что тоже очень важно) полное отсутствие отличий в алгоритме, часто возникающих при разработке в два этапа.

Простейшая схема построения робота в Амиброкере с использованием AmiSharp:

Схама AmiSharp

Таким образом, AmiSharp обеспечивает двустороннюю связь между пользовательским приложением (на рисунке это Амиброкер) и терминалом QUIK.

Ссылка на документацию.

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

 


Применение Амишарпа не ограничивается одним Амиброкером. Ничто не мешает использовать Амишарп как готовый DDE сервер плюс сервер транзакций для любых сторонних приложений, написанных на произвольных языках программирования. В этом случае Амишарп дополнительно предоставляет возможности масштабирования:

Внутри Амиброкера может быть запущено несколько скриптов, и все они будут успешно работать с одной запущенной копией AmiSharp. Кроме того, можно  запустить произвольное количество любых других программ, как "стандартных", типа Excel, так и "самодельных", написанных на произвольных языках программирования - AmiSharp и его данные будут доступны всем. Нет никаких ограничений в использовании одновременно нескольких торговых счетов, разных кодов клиента и нескольких одновременно запущенных терминалов QUIK.

Примеры использования:

  1. Первый робот на AmiSharp
  2. Канальный робот
  3. AmiSpread
  4. Арбитражер с хеджем
  5. LuaSharp

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

AmiSharp успешно работает с любыми другими программами теханализа (Metastock, Metatrader, Wealth-Lab и др.), которые умеют работать с COM-объектами. Прекрасно работает с Excel - решает задачу выставления заявок.

Может работать как с 32-разрядными приложениями, так и с 64-разрядными в любых комбинациях и одновременно.

Кроме того, все роботы независимо от способа их построения и среды, в которой они работают, могут обмениваться данными друг с другом в реальном времени путем использования общих таблиц Амишарпа.


См. также

 

Комментарии   

# Камынин 08.03.2012 09:35
Добрый день,Михаил!
Могу потестировать Ваше решение и сравнить его со своим аналогичный
Ответить | Ответить с цитатой | Цитировать
# admin 08.03.2012 12:08
Николай, нарисую списочек функций и после праздничков пришлю
Ответить | Ответить с цитатой | Цитировать
# admin 04.01.2013 20:02
Нарисовал. Доступно в меню FAQ
Ответить | Ответить с цитатой | Цитировать
# andr 20.01.2013 17:12
Добрый день а как можно получить дистрибутив библиотеки?
Ответить | Ответить с цитатой | Цитировать
# admin 07.02.2014 14:16
Цитирую andr:
Добрый день а как можно получить дистрибутив библиотеки?


Здесь:
www.bot4sale.ru/.../51-nuzhen-amisharp.html
Ответить | Ответить с цитатой | Цитировать

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


Защитный код
Обновить