Як я зробив $ 500K від машинного навчання та високочастотної торгівлі - частина 2

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





Створення повноцінного букмекера
Так мені вдалося перевірити і оптимізувати показники. Але мені довелося зробити щось більше – я шукав рамку, яка дозволить мені перевірити і оптимізувати всю торгову систему, в якій я міг надсилати команди і відкрити позиції. У тому випадку, я зміг оптимізувати загальний прибуток і збитки і, в певній мірі, середній прибуток і збитки за торгову сесію.

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

  • Коли команда йде на ринок в тренажері, я повинен змоделювати час від лагу. Просто тому, що моя система "поза" пропозиція не означає, що вона може придбати її прямо. Система відправить команду, почекайте близько 20 мілісекундів, а лише тоді, якщо пропозиція все ще перебуває в силі, вона лікує її як закрита угода. Це не зовсім точне, оскільки тривалість реального лагу не завжди однакова і не записана.
  • Коли я розміщую пропозиції, щоб купити або продати акції, потрібно розглянути потік виконання торгів (який API забезпечує) і використовувати його для відстеження, коли мій замовлення виконується. Щоб зробити це правильно, я повинен відслідковувати позицію моєї команди в черзі (черги формуються першою в першій системі першого виходу). Я не можу зробити це точно, але я моделю систему, як можна ближче до реальності.
Щоб поліпшити моделювання виконання, я збирав колоди під час реальної торгівлі за допомогою API і збігли їх з журналами, записаними під час імітації торгівлі за той же період. Я змогла зробити свій тренажер для держави дуже близько до реальності, і для тих моментів, які я не міг точно імітувати, я спробував переконатися, що результати відповідали статистиці (на тих метриків я думав).

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

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

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

Облік рахунків для різних цінових рівнів були розраховані на основі наступних факторів:

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

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

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

  • У офісі торгової компанії не можна говорити про ціну, за яку хтось входить до довгих і коротких торгів, так як якщо це повинно вплинути на подібні рішення в майбутньому. Незважаючи на те, що такі дані мають певну актуальність в рамках стратегії зменшення ризику, вони не мають нічого спільного з подальшими розробками ринку. Тож моя програма повністю ігнорувала цю інформацію. Як ігнорувати незворотні витрати.
  • Довгий/короткий торговий центр - Як правило, людина трейдера матиме специфічний критерій для того, щоб продати довгострокову позицію і де зробити коротку торгівлю. Однак в плані мого алгоритму не існує різниці між двома. Якщо мій алгоритм очікувано цін на падіння, то продаж був логічним рухом, незалежно від того, чи була торгівля довга, коротка або плоска.
  • Стратегія «доулінг» Це загальноприйнята стратегія, за якою торговці купують більше акцій, якщо спочатку торгівля не на користь. В результаті, вартість вашої середньої покупки знизиться, що означає, що коли (якщо) курс зміни ціни на склад, ви будете «повернути назад» ваших витрат без часу. Я думаю, що це нічна стратегія, якщо ви Warren Buffett. Ви захочете думати, що ви робите, тому що більшість ваших угод буде вигорнути. Проблема полягає в тому, що якщо ви не щасливі, втрата буде переповнена. Ще одним наслідком цього підходу є те, що він стає надзвичайно складним для визначення того, що ви насправді отримали перевагу ринку або просто щасливі. Важлива якість моєї програми була в тому, що я зміг відстежити і підтвердити ситуації, де моя програма дійсно мала перевагу.
Управління ризиками
Оскільки мій алгоритм ухвалив рішення таким же чином, незалежно від того, де він зробив торгівлю, і чи в даний час позиція була тривалою або короткою, він зробив в рази відкритими некомерційними позиціями і змусив торгівлю на великі суми грошей (хоча було також успішні торгівлі на однаково великі суми). Не варто забувати про те, що я нічого не зробив для управління ризиками.

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

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

Щотижня, я хочу перепідготовити програму на основі даних, зібраних за попередні 4 тижні. Тим не менш, я знайшов, що це посилює баланс між пошуком останніх тенденцій ринку і переконавшись, що мій алгоритм отримує достатньо інформації для розробки значущих моделей поведінки. Як навчання стало більш і більш трудомістким, я зламав його так, що це може бути зроблено на 8 віртуальних машин з використанням Amazon EC2. На локальній машині було зібрано результати.

Мій найвищий торговий пункт був Жовтень 2009, коли я заробив майже $100,000. Згодом я провів ще 4 місяці, які намагаються поліпшити свою програму, незважаючи на те, що прибуток знизився щомісяця. На жаль, я відчуваю, що я спробував всі мої найкращі ідеї, тому що все, що я не допоміг мені.

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

Зареєструватися: Я опублікував цю посаду на Hacker News, де він став дуже популярним. Я просто говорю, що я не намагаюся захистити людей, які намагаються зробити це самостійно. Вам потрібна команда найрозумніших колег з великою кількістю навичок, щоб просто спробувати конкурувати з кимось на ринку. Вже тоді, коли я пишу свою програму, боки були рідко успішними.

У верхній частині сторінки [в оригінальній пошті — приблизно. Перекладач] є коментар, в якому є такі вирази, як «управління статистикою», і я називався одним з «надійних інвесторів», про які реальні кванти [квантас / квантас – у російському перекладі практика використовують як варіанти перекладу – близько. перекладач] кажуть, що вони «зберігаються». Це дуже незручний коментар, просто далеко від реальності. Проте, на своїй статті є цікаві коментарі.

Примітка 2: Я опублікував список відповідей на запитання, які я отримав від трейдерів, які прочитали цю статтю.

Джерело: habrahabr.ru/company/itinvest/blog/211642/