Пишем торговых роботов на TradeScript » Элитный трейдер
Элитный трейдер


Пишем торговых роботов на TradeScript

Тема создания механических торговых систем или попросту биржевых роботов вызывает на Хабре определенный интерес. Мы частенько освещаем теоретические аспекты алгоритмической торговли, но не так часто говорим о ее практической составляющей. Поэтому в сегодняшнем топике будут рассматриваться реальные примеры различных роботов, созданных с помощью скриптового языка TradeScript.
27 марта 2014

Введение

Для начала обратим внимание на инструменты, которые будут описываться в этом тексте. Итак, TradeSript – это векторный язык программирования, созданный американской компанией Modulus Financial Engineering специально для создания торговых роботов. Этот язык входит в пакет технологий, которые были лицензированы (OEM) нашей компанией для создания торговго терминала SmartX (подробнее о его создании можно почитать в этом топике).

Главный плюс TradeScript – это простота синтаксиса, который, тем не менее, позволяет описывать торговые стратегии любой сложности. В результате использовать его для создания роботов можно практически не имея опыта программирования. Если же такой опыт есть, то освоить язык можно буквально за полчаса.

Движок языка работает на стороне терминала и подключается в качестве плагина-расширения к SmartX. Помимо возможности собственно написания скриптов присутствует и возможность их тестирования в двух режимах: на реальных данных и на исторических.

Пишем торговых роботов на TradeScript


В TradeScript существует много встроенных функций (примитивов), облегчающих написание скриптов. Например, вот так выглядит примитив TREND:

TREND(CLOSE, 30) = UP

Эта функция вернет значение Истина, если имеет место восходящий тренд – рассчитывается за последние 30 дней по ценам закрытия торговых сессий.

Благодаря тому что TradeScript – векторный язык, он реально удобен для описания торговых стратегий. Каждая операция здесь применяется сразу ко всему набору значений (вектору или полю). Это позволяет мыслить и оперировать категориями агрегатов данных, без необходимости использовать циклы или индивидуальные скалярные операции.

Например, чтобы рассчитать простую скользящую среднюю «срединной» цены акций за последние 30 периодов при помощи обычного языка программирования типа BASIC, нужно написать что-то типа:

For each symbol

For bar = 30 to max

Average = 0

For n = bar - 30 to bar

median = (CLOSE + OPEN) / 2

Average = Average + median

Next

MedianAverages(bar) = Average / 30

Next bar Введение в TradeScriptTM 10

Next symbol


о есть, для описания простейшего действия, нужно “потратить” 9-10 строк кода. С помощью векторного языка можно управиться и с помощью конструкции вида:

SET MedianAverage = SimpleMovingAverage((CLOSE + OPEN) / 2, 30)


В общем, если МТС может быть выражена математическими формулами или может быть запрограммирована в каком-либо процедурном языке программирования, например, C++, VB или Java, Вы можете быть уверены, что эта МТСтакже может быть запрограммирована при помощи TradeScript.

А теперь перейдем непосредственно к написанию роботов.

Поехали

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

В общем случае робот или механическая торговая система (МТС) – это набор правил, которые определяют точки входа и выхода в позицию для конкретной ценной бумаги или финансового инструмента (фьючерса и т.п.). Обычно МТС включают один или несколько индикаторов, например, система основанная на пересечении скользящих средних (Moving Average Crossover) будет покупать если короткая скользящая средняя пересекает снизу-вверх длинную скользящую среднюю, и продавать, если пересечение идет в обратном направлении.

Пишем торговых роботов на TradeScript


Скользящие средние бывают разной длины и типа (про индикаторы технического анализа мы сделаем отдельный пост), от которых зависит число генерируемых торговой системой сигналов. Более короткие скользящие средние (MA – Moveing Average) генерируют больше сигналов, поскольку пересекаются чаще. Соответственно, и число «ложных» сигналов в их случае гораздо выше, поэтому необходимо искать баланс между ложными сигналами и упущенной прибылью.

Одним из решений этой проблемы может быть использование какого-то второго индикатора для фильтрации сигналов входа/выхода. Для выхода, в частности, часто используют параболическую систему (Parabolic SAR). В скрипте ниже для входа используется 20/60 EMA, а для выхода – параболическая система.

Buy Signals

# 20-периодная EMA пересекает снизу-вверх 60-периодную EMA

CROSSOVER(EMA(CLOSE, 20), EMA(CLOSE, 60))

Sell Signals

# 20-периодная EMA пересекает сверху вниз 60-периодную EMA

CROSSOVER(EMA(CLOSE, 60), EMA(CLOSE, 20))

Exit Long

# Цена закрытия пересекает снизу-вверх Parabolic SAR

CROSSOVER(CLOSE, PSAR(CLOSE, 0.02, 0.2))

Exit Short

# Цена закрытия пересекает сверху вниз Parabolic SAR

CROSSOVER(PSAR(CLOSE, 0.02, 0.2), CLOSE)


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

Пишем торговых роботов на TradeScript


В такие моменты часто на открытии рынка подается много приказов на покупку, в результате чего акция может быть переоценена. За этим часто следует корректировка цены вниз – описанная ниже торговая система учитывает тот факт, что момент разворота обычно возникает в течение первого часа торгов. То есть, если разрыв не будет “закрыт” в течение первого часа, то можно предполагать, что покупка, с большей вероятностью, продолжится.

Наш скрипт возвращает акции, которые имели гэп не менее 2% и закрылись близко к максимуму. Стратегией на следующий день может быть покупка после первого часа торгов, если акция остается сильной. Стоп-лосс следует установить на минимуме дня. Консервативной целью прибыли может быть ½ гэпа — 1% в нашем случае.

Buy Signals

# Имеет место не менее чем 2% гэп вверх на высоком объеме

LOW > REF(HIGH,1) * 1.02 AND

VOLUME > SMA(VOLUME, 5) * 2

Sell Signals

# Имеет место не менее чем 2% гэп вниз на высоком объеме

HIGH SMA(VOLUME, 5) * 2

Exit Long

Используем цель прибыли приблизительно ½ от величины гэпа, а также стоп-лосс.

Exit Short

Используем цель прибыли приблизительно ½ от величины гэпа, а также стоп-лосс


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

Пишем торговых роботов на TradeScript


Обычно цены остаются внутри полос Боллинджера. Одна из стратегий заключается в покупке или продаже после того как цены коснувшись границы разворачиваются обратно.
Движение, которое началось у одной полосы, обычно имеет тенденцию продолжиться до другой полосы.

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

Стратегия, описанная в следующем примере, представляет собой комбинацию этих двух систем: покупка происходит, если предыдущий бар коснулся нижней полосы, а текущий бар находится внутри диапазона (т.е. между полосами). Также система будет покупать, если максимум текущего бара превышает верхнюю полосу на определенный процент. Продажа осуществляется по противоположным правилам.

Buy Signals

# Покупаем, если предыдущее значение было ниже нижней полосы, а сейчас выше

SET Bottom = BBB(CLOSE, 20, 2, EXPONENTIAL)

SET Top = BBT(CLOSE, 20, 2, EXPONENTIAL)

((REF(CLOSE, 1) Bottom) OR

# Также покупаем, если цена закрытия выше верхней полосы на 2%

CLOSE > Top * 1.02

Sell Signals

# Продаем, если предыдущее значение было выше верхней полосы, а сейчас ниже

SET Bottom = BBB(CLOSE, 20, 2, EXPONENTIAL)

SET Top = BBT(CLOSE, 20, 2, EXPONENTIAL)

((REF(CLOSE, 1) > REF(Top, 1)) AND

CLOSE REF(HIGH, 1) AND
CLOSE (REF(HIGH, 1) - REF(LOW, 1)) * 1.5 AND
# Тренд должен быть нисходящим
TREND(CLOSE, 30) = DOWN


Система «бычьего» и «медвежьего» поглощения (Japanese Candlestick Engulfing Line System)

Эффективной краткосрочной стратегией торговли часто является использование фигур технического анализа, вроде «бычьего» или «медвежьего поглощения» — в случае резкого роста объёма торгов, они сигнализируют о развороте тренда. Фигура поглощения состоит из короткой свечи, за которой следует свеча с более длинным телом, которое «поглощает» предыдущую короткую свечу.

Пишем торговых роботов на TradeScript


Соответственно, «бычье» поглощение указывает на потенциальный разворот нисходящего тренда, а «медвежье» — на возможный разворот бычьего (то есть восходящего) тренда. Чем более заметен тренд, тем более сильной предсказательной силой обладают эти паттерны.

Код для подобной системы на TradeScript может выглядеть следующим образом:

Signals
# Бычий паттерн
CANDLESTICKPATTERN() = BULLISH_ENGULFING_LINE AND TREND(CLOSE, 30) =
DOWN AND VOLUME > REF(VOLUME, 1)

# Медвежий паттерн
CANDLESTICKPATTERN() = BEARISH_ENGULFING_LINE AND TREND(CLOSE, 30) = UP
AND VOLUME > REF(VOLUME, 1)


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

Код представленных стратегий на TradeScript легко модифицировать и дополнять прямо в терминале.

Примечание: для того, чтобы загрузить выбранный скрипт в SmartX, необходимо скачать библиотеку на компьютер, установить терминал, а затем в меню «Расширения» выбрать Менеджер TradeScript и нажать «Загрузить».

Заключение

Полное описание языка TradeScript и описание построения довольно сложных торговых роботов на нем можно найти в специальном руководстве. Протестировать работу терминала и собственных роботов можно с помощью тестового контура — безрисковой торговой системы с виртуальными деньгами (открыть такой счет можно здесь).

Кроме того, при написании роботов следует учитывать в стратегии размер комиссии за совершение транзакций со стороны биржи и брокера — обычно биржа берет за скальперские сделки (которые открываются и закрываются в течение одного торгового дня) около 0,25 рублей за каждую, а комиссии брокера примерно соответствуют биржевым

(C) Источник
Не является индивидуальной инвестиционной рекомендацией
При копировании ссылка обязательна Нашли ошибку: выделить и нажать Ctrl+Enter