Germany | Finland | Saint Petersburg | Drive

Торговый привод внутри Amibroker

Опубликовано в Утилиты

Некоторое время назад я писал, что Амиброкер (плюс Амишарп) бесполезны в случае необходимости написать привод для удобной торговли руками. Был неправ.

Заказчик имеет свою систему торговли руками на малых таймфреймах. С определённой степенью уверенности можно назвать стиль его торговли скальпингом.

Использует терминал QUIK. Однако встроенных в терминал механизмов торговли ему не хватает.

С одной стороны, терминал предоставляет тиковый и сразу следующий за ним минутный таймфрейм без каких-либо промежуточных возможностей. Как известно, Минздрав предупреждает, что торговля ликвидными инструментами на тиковом графике разрушительно влияет на ваше здоровье. А минутный для Заказчика оказался великоват.

Вторая проблема. Заказчику требовалась определенная логика при выставлении торговых приказов. Поскольку ситуация на графиках минимальных таймфреймов меняется очень быстро, часть действий по выставлению заявок, установке стоп-приказов требовалось автоматизировать. Терминал QUIK таких возможностей не представляет.

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

Итого маячит крайне несимпатичная перспектива языка высокого уровня. Стокшарп, Windows GUI, куча скучной непродуктивной рутинной работы, масса времени. Соответственно высокая цена разработки.

Решил сделать привод в Амиброкере. Вот что получилось:

На график инструмента (в данном случае это фьючерс на индекс РТС) наложены 3 Волны Боллинджера с разными отклонениями. Пересечения текущей цены с каждой из этих линий дополнительно отмечается для большей наглядности. Также для простоты восприятия быстро меняющейся ситуации и повышения информативности привода все зоны Боллинджера раскрашены разными цветами.

Средства Амиброкера позволяют в качестве таймфрейма использовать как стандартные временные промежутки, так и необычные. Например, 5 секунд, 18 секунд, 78 секунд, 2 тика, 16 тиков и тому подобные, на любой вкус.

Для целей торговли на экран помещены 4 кнопки с очевидным для каждой из них назначением. Нажатие на любую из них инициирует посылку соответствующего приказа в торговую систему. После размещения заявки в торговой система привод мониторит ее состояние. При удовлетворении (частичном) заявка считается (частично) исполненной. Закрытие позиции производится всегда заявкой "по рынку" (в том числе на рынке FORTS).

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

Пользователь защищен от неправильных действий. Например, невозможно закрыть несуществующую позицию или открыть короткую, не закрыв предварительно длинную.

Привод хранит всю историю произведенных сделок. На скриншоте видны метки в виде стрелок. Это метки сделок. Расставляются они в соответствии с реальными ценами произошедших сделок. Для удобства во время существования позиции на график выводится уровень ее себестоимости.

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

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

Возможна параллельная торговля разными (и одним тоже) инструментами. Для этого требуется запустить несколько скриптов параллельно и соответствующим образом настроить каждому из них параметры. Возможна торговля как по одному счету, так и по разным.

По вопросу производительности нелёгкого программистского труда. Написано с использованием AmiSharp и готовых процедур (часть из них лежит на этом сайте) за полный день. Утомился.

Публикуется с разрешения Заказчика

Не так давно эти ребята были в Москве. Скрипки тоже были Подмигиваю.

Комментарии   
# Feodor 16.04.2013 19:17
Отличная работа!
Сегодня целый день искал как поместить кнопки на форму и увязать их нажатие с AmiSharp. Решил, что это не возможно :sad: Получается ошибался.
Буду думать дальше.
Ответить | Ответить с цитатой | Цитировать
# admin 16.04.2013 21:30
Беда ) На самом деле амишарп тут не при чем. Все делается стандартными средствами амиброкера.

Федор, смотрите функции

GetCursorXPosition
GetCursorYPosition
GetCursorMouseB uttons

Первые 2 дают положение курсора.. Третья дает состояние кнопок мышки.. Если GetCursorMouseB uttons дает нажатие клавиши и первые две дают позиционировани е на кнопку - ура-ура, она нажата
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий