How-to: Створення торгових роботів на TradeScript vol. 2

image

Ми неодноразово розповідали про алгоритмічної торгівлі на біржі та створення торгових роботів. Згадували ми і про те, що більша частина учасників фондового ринку все одно користується торговим терміналом — для здійснення операцій вручну або контролю дій робота.

Проте навіть тим торговцям, які працюють виключно руками в терміналі, іноді хочеться автоматизувати деякі процеси і запрограмувати торгові стратегії. Ми в ITinvest створили термінал SmartX (цього процесу присвячено окремий топік), в якому є вбудований скриптова мова для написання торгових роботів.

Що таке торговий робот

Торговим роботом або механічної торгової системою зазвичай називають програму, яка «вміє» проводити аналіз ринкових умов і, у відповідності з певною торговою стратегією, здійснює операції купівлі або продажу цінних паперів і похідних інструментів (ф'ючерсів або параметри).

Часто для написання роботів використовують мови програмування зразок C/C++ (іноді Java), Python, Matlab та R. До мов скриптової типу, які дозволяють описувати досить складні стратегії, відноситься векторний мова TradeScript, створений американцями з Modulus Financial Engineering. Ця технологія була ліцензована нами (OEM) для створення терміналу SmartX.

Скрипти на TradeScript

«Движок» мови TradeScript працює на стороні терміналу — підключається в якості плагіна-розширення (такі доповнення добре розширюють функціональність програми).

Синтаксис мови досить простий, але тим не менше, дозволяє описувати торгові стратегії практично будь-якої складності. У TradeScript є вбудовані функції (примітиви), що полегшують написання скриптів. Приклад такого примітиву, функція TREND:

TREND(CLOSE, 30) = UP

Ця функція поверне значення «Істина», якщо має місце висхідний тренд — його наявність розраховується за останні 30 днів за цінами закриття торгових сесій.

Приклад скрипту для розрахунку ковзної середньої «серединної» ціни акцій за останні 30 періодів на TradeScript виглядає так:

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

Крім можливості написання скриптів, їх продуктивність можна тестувати на реальних історичних даних з допомогою функції бек-тестінгу.

image

Для більш простого освоєння мови TradeScript була створена безкоштовна бібліотека готових торгових роботів, яких можна модифікувати.

Приклади торгових стратегій

Ми публікували приклади торгових систем на TradeScript наведені в окремому матеріалі на Хабре, сьогодні розглянемо трохи більш складні випадки.

Система Parabolic SAR/MA System
Ця торгова система є варіантом стандартної системи перетину, ковзних середніх.

image

Зазвичай параболічна система використовується лише для отримання сигналів виходу з позиції (продажу акцій або «відкупу» за відкриття короткої позиції).

Конкретно в цій МТС, проте, перетин двох EMA (експоненціальні ковзаючі середні) використовується для прийняття рішення, чи потрібно купувати (продавати) всякий раз, коли індикатор Parabolic SAR перетинає знизу
вгору ціну закриття.

Після відкриття позиції Parabolic SAR можна використовувати в звичайному контексті. Прибуток повинна фіксуватися, коли ціна закриття перетинає Parabolic SAR.

Buy Signals
# Купуємо, якщо ковзні середні перетнулися сьогодні або вчора
# якщо PSAR перетнулися сьогодні або вчора
(CROSSOVER(CLOSE, PSAR(0.02, 0.2)) OR
CROSSOVER(REF(CLOSE,1), PSAR(0.02, 0.2)))
AND
(CROSSOVER(EMA(CLOSE, 10), EMA(CLOSE, 20)) OR
CROSSOVER(REF(EMA(CLOSE, 10),1), REF(EMA(CLOSE, 20),1)))

Sell Signals
# Продаємо, якщо ковзні середні перетнулися сьогодні або вчора
# якщо PSAR перетнулися сьогодні або вчора
(CROSSOVER(PSAR(0.02, 0.2), CLOSE) OR
CROSSOVER(PSAR(0.02, 0.2), REF(CLOSE,1)))
AND
(CROSSOVER(EMA(CLOSE, 20), EMA(CLOSE, 10)) OR
CROSSOVER(REF(EMA(CLOSE, 20),1), REF(EMA(CLOSE, 10),1)))

Цей приклад показує, як використовувати булевскую логіку, щоб знайти акції, які відповідають умовам або поточної торговельної сесії або попереднього торгового дня.

Система Outside Day System
Зовнішній день (Outside Day) виникає, коли максимум поточного бару вище максимуму попереднього бару, а мінімум поточного бару нижче мінімуму попереднього бару. Ціна закриття повинна бути протилежна поточного тренду (якщо тренд висхідний, то Close повинен бути менше, ніж Open). Зовнішні дні виникають досить часто і можуть використовуватися як частина короткостроковій торгової стратегії.

image

Зовнішні дні, що виникають після тривалого висхідного тренда, як показано на малюнку, говорять про нерішучості ринку, і можуть бути сигналом розвороту або тимчасової корекції тренда.

В залежності від напрямку ринку зовнішні дні можуть бути або бичачими або ведмежими. Якщо ознаки розвороту виникають на рівнях опору їх можна розцінити як ведмежі. Якщо вони з'являються на рівнях під-
тримки, то їх можна віднести до бичачим.

Buy Signals
# Знаходимо outside days
LOW < REF(LOW, 1) AND
HIGH > REF(HIGH, 1) AND
HIGH > REF(HIGH, 1) AND
CLOSE < OPEN AND
# Outside days більш значущі, якщо
# попередній бар коротше поточного
HIGH - LOW > (REF(HIGH, 1) - REF(LOW, 1)) * 1.5 AND
# Тренд повинен бути висхідним
TREND(CLOSE, 30) = UP

Sell Signals
# Знаходимо outside days
LOW < REF(LOW, 1) AND
HIGH > REF(HIGH, 1) AND
HIGH > REF(HIGH, 1) AND
CLOSE < OPEN AND
HIGH - LOW > (REF(HIGH, 1) - REF(LOW, 1)) * 1.5 AND
# Тренд повинен бути низхідним
TREND(CLOSE, 30) = DOWN
<h5>

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

Ефективної короткостроковій стратегії торгівлі часто є використання фігур технічного аналізу, на кшталт «бичачого» або «ведмежого поглинання» — в разі різкого зростання обсягу торгів, вони сигналізують про розворот тренда. Фігура поглинання складається з короткої свічки, за якою слід свічка з більш довгим тілом, яке «поглинає» попередню коротку свічку.

image

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

Код для подібної системи на 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 рублів за кожну, а комісії брокера приблизно відповідають біржовим (у ITinvest на деяких тарифах вони дорівнюють біржовим).

На сьогодні все. Будемо раді відповісти на питання в коментарях. Спасибі за увагу!

Пости та посилання по темі:



Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.