1471
Повернутися до майбутнього: перевірка виконання торгового робота з використанням історичних даних

Ми вже розглядали питання обов’язкових етапів розробки торгової стратегії для роботи на фондовому ринку. Однією з найважливіших етапів є розробка стратегії тестування на історичні дані. Ми будемо говорити про нього сьогодні.
Проведення алгоритму стратегії торгівлі за допомогою історичних фінансових даних. Алгоритм, виявивши певні біржові події («видатки»), генерує замовлення на придбання або продаж фінансових інструментів – ці операції матимуть пов’язаний дохід або втрату.
Загальна сума прибутку і втрати (P&L, PnL) за вказаний час в торговій стратегії буде індикатором успіху або невдачі алгоритму.
Є кілька цілей, які розробники торгових програм досягають за допомогою переадресації:
- Фільтрація Кожна стратегія має певні показники ефективності та ефективності, які закладені в ній розробником. Відповідно, будь-яка стратегія, яка не досягне цілей, повинна бути відфільтрована.
- Моделювання За допомогою переадресації розробники можуть перевірити різні ринкові моделі (зміни в умовах ліквідності, витрати на транзакції, швидкість обробки замовлення, затримки каналу тощо) без ризику втрати реальних грошей.
- Оптимізація За допомогою стратегії з історичних даних можна покращити його продуктивність в конкретних ринкових ситуаціях.
- Перевірка ефективності За допомогою тестування розробник може зрозуміти, чи були зроблені помилки при описі стратегії в коді програми.

Відомий експерт з біржової торгівлі, квантової та розробника біржових роботів Майкл Холс-Моор, переконаний, що розробники новачків біржових систем часто роблять помилки при створенні їх через певні помилки. Зокрема, експерт цитує чотири такі поняття:
Нерідко розробник спокусив зробити зміни до тестових параметрів для більш переконливих результатів.
У той же час, якщо у випадку історичних даних є можливість змінити щось і точно прогнозувати результат, то в режимі «комбат» робот не може працювати так ефективно. Необхідно вимірювати продуктивність стратегії в різних значеннях параметрів введення.
У деяких випадках творці торговельних стратегій включають в себе припущення щодо майбутнього стану справ на ринку. При похибках в коді невірний розрахунок оптимальних параметрів стратегії або неправильного використання екстремальних значень цін (максимумів і невисоких), запуску такої стратегії в реальному ринку може бути невдалим (це одна з найбільш поширених причин, чому стратегії працюють більш ефективно на історичних даних, ніж в режимі реального часу).
При проведенні випробувань розробник бачить фінальну роботу алгоритму. Якщо система приносить прибуток за певним періодом часу (просування, рік або п'ять років), то існує велика спокуса ігнорувати депозитні відкладки (збитки), які відбувалися по такому шляху до успіху. Люди думають, що вони можуть легко вижити, втративши 25% своїх грошей (наприклад, робот повинен переробити).
На практиці не кожен має належності вижити такі моменти, не роблячи висипання дій (і якщо алгоритм дозволяє втратити 25% грошей на оповідання, то в реальності ця ситуація дуже ймовірно), які часто призводять до більших збитків.
Розробники торгових систем повинні враховувати безліч різних параметрів, які можуть вплинути на кінцеву фінансову життєздатність конкретної стратегії.
початківцям трейдерам часто звертають увагу тільки на виконання свого алгоритму безпосередньо на ринку, але забути враховувати пов'язані витрати, які можуть рівень всіх отриманих доходів. Найбільш очевидні витрати в цьому випадку будуть платежі, що стягуються обміном та брокером (ITinvest за деякими тарифами, що відповідають біржовим комісіям).
Затримка і затримка відноситься до різниці в ціні між тим, на якому торговий робот, призначений для здійснення операції і тієї, на якій він фактично пройшов. Займає час на «виставку» наказ на ядро біржової торгової системи. У випадку швидкісних торгових роботів (HFTs), кожен мілісекундний розрахунок за яку ціна може трохи змінюватися, роблячи торгівлю менш вигідною (або некомерційною на всіх).
Деякі фінансові інструменти мають високу летючість, тому при роботі з ними необхідно зробити знижку на можливу слизу.
При спілкуванні з відносною рідиною, трейдер повинен мати на увазі можливий вплив, що дії його торгової системи будуть мати на ринку. Якщо придбаний і продається не багато людей, то замовлення покупки значної кількості таких акцій може істотно змінити їх ціну. Щоб уникнути такої ситуації, необхідно навчити роботів розірвати торгівлю в велику кількість невеликих замовлень, які не можуть істотно вплинути на ринок.
Робота торгової стратегії впливає на те, що торгові накази її розробника планують використовувати для здійснення транзакцій. Найчастіше торговці курорту на ринкові замовлення і обмеження замовлень.
Замовлення ринку здійснюється відразу за поточною ринковою ціною фінансового інструменту (пошуки, перспективи, варіанти тощо). Відповідно, якщо потрібно зробити велику операцію, наприклад, придбання великої кількості акцій, ринкове замовлення призведе до того, що буде кілька транзакцій за різними цінами - ринок може не бути правою кількістю людей, які готові продати акції за одну ціну, після чого покупка всіх своїх акцій, робот перейде на наступну пропоновану ціну і так далі.
Ринкові замовлення – агресивний інструмент – вони завжди будуть виконані, з кінцевою ціною торгівлі, що залишилися невідомими трейдерам.
Накази, як Ліміт дозволяють роботу визначити найгіршу ціну, за якою вона має сенс торгувати. Таке замовлення може залишатися невиконаним (якщо не існує бажання продати або купити за вказаною ціною) або частково виконаної (не було достатньо бажання), в результаті чого вважається більш пасивним засобом здійснення транзакцій.

Їхня перевага – безперечно, що ціна операції визначена. Перелік поточних замовлень типу Ліміту називається книгою замовлення і відображається в торгових терміналах окремим вікном.
При тестуванні стратегії важливо звертати увагу на її поведінку при використанні ринкових та лімітних замовлень. У випадку, якщо черга замовлення виконана некоректно, торгова стратегія може показувати більші результати при роботі в режимі реального часу, порівняно з запуском історичних даних.
Є досить велика кількість загальнодоступних систем, які можна використовувати для тестування фінансових стратегій:
- МС Excel Microsoft Excel, знайомий всім, може бути використаний для написання механічних торгових систем. Більшість брокерів дозволяють пов'язувати цей інструмент з їх програмними продуктами (генерація даних та виробництво торгових сигналів за допомогою VBA). Недоліком такого рішення буде низька швидкість роботи, а плюс вільного і швидкого впровадження простих стратегій. Альтернатива: Відкритий офіс
- Мапа Програмне забезпечення, призначене для виконання складних обчислень. Є плагіни для використання в біржових торгах. З його допомогою ви можете створити невеликі сценарії, які не описують досить складні стратегії. Мінус - система оплачується і дорого. Альтернативи для російського ринку TSlab та StockSharp. Також торговці використовують MetaStock, Wealth-Lab та Omega продукти для створення механічних торгових систем.
- C++/C# Мова програмування, яка поширена в фінансовому світі. Java і Scala користуються популярністю.
- Вбудовані торгові терміналиДеякі торгові термінали мають вбудовані інструменти для створення торгових роботів та резервних стратегій. У терміналі SmartX можна встановити відповідний плагін. Сценарійна мова TradeScript використовується для написання роботів.

Вікно для закріплення плагіна для створення роботів на терміналі SmartX
Закінчення є найважливішим етапом розвитку торгової стратегії, без якого важко розраховувати на адекватну роботу торгового робота в умовах «комбата» реального ринку. Важливо розуміти, що успішна стратегія на основі історичних даних не гарантує той же хороший результат при використанні в режимі реального часу.
Крім тестування на історичні дані розробники повинні перевірити програму в режимі реального часу – це можна зробити за допомогою спеціальних тестових торгових систем, що надаються обмінами та брокерами. За допомогою таких систем ризику можна відхилити реакцію роботи на зміну умов на ринку – як правило, дані в таких випадках передбачені біржовими платформами (з затримкою або «шкарсом»).
Це сьогодні, спасибі вам дуже багато. Ми будемо раді відповісти на питання в коментарях.
УВАГА! ITinvest відкрив вакансію розробника GUI C#, робота полягає в реалізації передового розвитку програмних продуктів для торгівлі на біржі. Детальніше на www.itinvest.ru/about/vacancies/programmer-gui-c/.

P.S. Якщо ви помітили тип або помилку, напишіть персональне повідомлення, і ми оперативно виправимо все.
Посилання та повідомлення на тему:
- Успішне тестування алгоритмічних стратегій торгівлі - Частина I
- Успішне тестування алгоритмічних стратегій торгівлі - Part II
- Як: покрокова інструкція з розробки торгової системи для роботи на фондовому ринку
- Інтерв'ю: Як C# і C++ Чи може заробляти гроші на фондовому ринку
- Як вибрати мову програмування, щоб створити торговий робот
Джерело: habrahabr.ru/company/itinvest/blog/238839/