Пишемо робота "по кроках" крок 1

[Євген Єрошкін, приватний інвестор]

Написати автомат для торгівлі можна практично на будь-якому сучасному мові програмування, найголовніше - встановити обмін даними між терміналом (або шлюзом біржі) і автоматизованої торгової системою. А це вимагає досить серйозних навичок програмування. Найдоступніший шлях - написання робота на мові Qpile.

Плюс цієї мови полягає в тому, що він простий і інтегрований безпосередньо в термінал Quik [1], що підвищує надійність зв'язки «Термінал-Робот». З мінусів можна виділити відсутність інтерфейсу взаємодії з користувачем (тобто програму можна запустити і зупинити, але керувати нею в процесі роботи не можна). Також проблематично на Qpile обробляти великі масиви даних, що накладає обмеження на створення механічних систем для роботи з великою кількістю вхідних параметрів. Але для реалізації простих стратегій функціоналу цієї мови цілком достатньо.

Стратегія і інструмент

Будь-робот працює за наперед заданим алгоритмом, який є логічним втіленням торгової стратегії. Стратегія є найважливішою частиною будь-якого автомата (хоча за обсягом може займати невелику частину коду). Її вибір - основоположний етап для побудови будь-якої торгової системи, саме вона робить одну систему прибутковою, а іншу збитковою при інших рівних умовах. Питанню вибору стратегії присвячено чимало книг [2,3]. Метою даного циклу статей є процес написання робота, який самостійно приймає рішення про купівлю / продаж, виставляє заявки і перевіряє їх виконання (але не гарантується, що він обов'язково виявиться прибутковим). Який алгоритм вибрати для торгової системи, кожен трейдер вирішує суто індивідуально. Ми ж розглянемо одну з найпростіших стратегій - торгівлю в каналі. Її алгоритм простий: якщо ціна нижче певного рівня, купуємо, а якщо вище - продаємо. Якщо котирування виходять за межі каналу в невигідному для нас напрямку, фіксуємо збитки.

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

Реалізувати стратегію торгівлі в каналі можна двома способами. Перший має на увазі відстеження рівня ціни і виставлення заявки при досягненні мети. Також можна відразу розміщувати ордери на рівнях, незалежно від поточної ціни, і потім стежити за виконанням. Перший спосіб застосовується тільки для інструментів, ціни яких змінюються не дуже швидко, в іншому випадку, при різких рухах можна просто не встигнути. Другий метод підходить для всіх активів, однак при цьому треба весь час стежити за виконанням заявок, при необхідності їх переставляти або ж по-все знімати (наприклад, при динамічно змінюються рівнях покупки / продажу). Перший підхід більш простий в реалізації, тому поки зупинимося на ньому. А боротися з швидкою зміною ціни і невиконанням заявок будемо свідомо більш вигідними для ринку цінами, тобто в них буде спочатку закладатися прослизання.

Після того, як код написаний, зберігаємо файл з розширенням * .qpl, потім в терміналі Quik відкриваємо пункт меню «Табліци-> Портфелі-> Признач портфель» (програми в Quik іменуються портфелями) або натискаємо клавіші Ctrl + F10. Вибираємо наш файл, натискаємо на кнопці «Відкрити», «Завантажити локально», а потім «Вихід» (див. Рис. 2).

Мал. 2Пункти меню для завантаження і запуску програм Qpile

Мал. 3Программа, що виводить поточний час сервера

Тепер, коли перша програма запрацювала, починаємо її удосконалення: будемо отримувати поточні ціни попиту / пропозиції за обраним інструменту, значення наших рівнів, назва інструменту і час до виконання в днях. Всі ці дані так- же виведемо в таблицю (див. Код «Інструмент»). Завантажимо програму в Quik і запустимо її. Якщо все реалізовано без помилок, ми отримаємо таку таблицю (див. Рис. 4).

Мал. 4Вивод параметрів інструменту в таблицю

У нас є всі необхідні дані, тому залишається лише порівнювати поточні ціни з нашими рівнями. Якщо ціна попиту вище верхнього рівня, це сигнал до про- навіть, якщо пропозиція нижче нашого нижнього рівня, необхідно здійснити покупку. Оформимо цю логіку в коді (див. Код «Порівняння», приведено лише тіло основної програми).

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

IF PriceBid> = HiLevel SERVER_TIME = "SELL"

'Якщо ціна попиту нижче уровняLOW, треба купувати

IF PriceOffer <= LowLevel SERVER_TIME = "BUY"

У цьому випадку сигнали на покупку / продаж будуть виводитися, але в стовпець «TIME» таблиці.

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

Не рекомендується відразу намагатися торгувати за допомогою робота на реальному рахунку (особливо на початку шляху набуття досвіду написання програм), оскільки навіть при потенційно прибутковою стратегії можливі помилки в коді, які, в свою чергу, можуть призвести до серйозних втрат (припустимо, виставляється заявка з неправильної ціною і / або об'ємом) аж до обнулення рахунку. Доцільно для налагодження коду використовувати демо-рахунок.

Qpile (ProgrammableInterfaceandLogicEnvironment) - бейсікоподобний мову, який має в своемарсенале оператори для отримання даннихіз терміналу Quik і відправки заявок.

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

Торгова сесія - період часу, протягом якого проводяться торги на біржі.

Схожі статті