1190
Як я зробив $ 500K від машинного навчання та високочастотної торгівлі - частина 2
Від перекладача: Продовження перекладу статті (частина 1), яка захопила свою увагу і сподобалася шинки, про хлопця, який, використовуючи його технологічні навички, вдалося заробити половину мільйона доларів в рік.
Створення повноцінного букмекера
Так мені вдалося перевірити і оптимізувати показники. Але мені довелося зробити щось більше – я шукав рамку, яка дозволить мені перевірити і оптимізувати всю торгову систему, в якій я міг надсилати команди і відкрити позиції. У тому випадку, я зміг оптимізувати загальний прибуток і збитки і, в певній мірі, середній прибуток і збитки за торгову сесію.
Створення такої рамки не буде легко – в деяких варіантах навіть неможливо моделювати точно, але я зробив все, що я міг. Ось деякі питання, які мені довелося зіткнутися:
Забезпечення прибуткової торгівлі
За допомогою імітаційної моделі замовлення я зміг відправити команди на обмін в режимі імітації та відслідковувати неординарні вигоди та втрати. Як дізнатися, де і коли купити і продати?
Поведінка цін була початковою точкою для системи, але історія не закінчується. Далі я розробила систему забивання для кожного з 5 цінових рівнів, щоб купити і продати. Ці рівні включені один рівень вище внутрішньої ціни попиту (для замовлень, щоб купити) і один рівень нижче внутрішньої ціни постачання (для замовлень, щоб продати).
Якщо обліковий запис на будь-який рівень цін вище заданого порогу, це означає, що має бути активна пропозиція купівлі/продажу в системі на цьому рівні. Якщо на рахунку нижче порогу, будь-які активні замовлення повинні бути скасовані. За цими обставинами це не буде безкомпромісний для моєї системи, щоб раптово поставити пропозицію купівлі на ринку, а потім негайно скасувати її (право, я спробував мінімізувати ймовірність таких подій, що відбуваються, так як будь-яка особа, така ситуація на моніторі, здавалося б, жорстоко дратує).
Облік рахунків для різних цінових рівнів були розраховані на основі наступних факторів:
Всі змінні, які використовуються в цьому крокі, були оптимізовані. Зроблено таким же чином, що я оптимізував змінні цінових показників, крім того, в цьому випадку я оптимізував змінні при зниженні прибутку і втрати.
Що ігнорувати програму
Коли людина торгує, вони часто сильно впливають на емоції і упередження, які можуть призвести до підопічних рішень. Я, звичайно, не хочу, щоб вони були відображені в моєму коді. Тож система ігнорує деякі фактори:
Оскільки мій алгоритм ухвалив рішення таким же чином, незалежно від того, де він зробив торгівлю, і чи в даний час позиція була тривалою або короткою, він зробив в рази відкритими некомерційними позиціями і змусив торгівлю на великі суми грошей (хоча було також успішні торгівлі на однаково великі суми). Не варто забувати про те, що я нічого не зробив для управління ризиками.
Я впевнено встановив максимальний розмір позиції на 2 контракти за одиницю часу, тому що в дні активного торгів максимальний розмір позиції може періодично збільшуватися. Я також мав ліміт на максимальну кількість втрат протягом дня, щоб захистити себе від будь-яких несподіваних змін на ринку, а також від помилок у своїй програмі. Ці ліміти були виписані в коді, але я отримав додаткову запобіжність, даючи інструкції до мого брокера. Зробивши ці запобіжники, я згодом не відчував суттєвих проблем.
Робота з алгоритмом
Я почав працювати на моїй програмі до того, як я приніс її до точки, де він був прибутковим і я зміг спробувати його. Хоча, щоб бути чесним, я провів більшу частину цього часу, вивчення мови програмування. Як я працював над поліпшенням програми, я зафіксував зростання прибутку в кожному з наступних чотирьох місяців.
Щотижня, я хочу перепідготовити програму на основі даних, зібраних за попередні 4 тижні. Тим не менш, я знайшов, що це посилює баланс між пошуком останніх тенденцій ринку і переконавшись, що мій алгоритм отримує достатньо інформації для розробки значущих моделей поведінки. Як навчання стало більш і більш трудомістким, я зламав його так, що це може бути зроблено на 8 віртуальних машин з використанням Amazon EC2. На локальній машині було зібрано результати.
Мій найвищий торговий пункт був Жовтень 2009, коли я заробив майже $100,000. Згодом я провів ще 4 місяці, які намагаються поліпшити свою програму, незважаючи на те, що прибуток знизився щомісяця. На жаль, я відчуваю, що я спробував всі мої найкращі ідеї, тому що все, що я не допоміг мені.
Я почав думати в новому напрямку. Я написав листи до 6 різних торгових компаній, які спеціалізуються на високочастотній торгівлі, і попросили, якщо вони хочуть купити свою програму і орендувати мене за свою роботу. Немає відповіді. Тоді я мав ідеї для нових стартапів, які я хотів би працювати, тому я дав її.
Зареєструватися: Я опублікував цю посаду на Hacker News, де він став дуже популярним. Я просто говорю, що я не намагаюся захистити людей, які намагаються зробити це самостійно. Вам потрібна команда найрозумніших колег з великою кількістю навичок, щоб просто спробувати конкурувати з кимось на ринку. Вже тоді, коли я пишу свою програму, боки були рідко успішними.
У верхній частині сторінки [в оригінальній пошті — приблизно. Перекладач] є коментар, в якому є такі вирази, як «управління статистикою», і я називався одним з «надійних інвесторів», про які реальні кванти [квантас / квантас – у російському перекладі практика використовують як варіанти перекладу – близько. перекладач] кажуть, що вони «зберігаються». Це дуже незручний коментар, просто далеко від реальності. Проте, на своїй статті є цікаві коментарі.
Примітка 2: Я опублікував список відповідей на запитання, які я отримав від трейдерів, які прочитали цю статтю.
Джерело: habrahabr.ru/company/itinvest/blog/211642/
Створення повноцінного букмекера
Так мені вдалося перевірити і оптимізувати показники. Але мені довелося зробити щось більше – я шукав рамку, яка дозволить мені перевірити і оптимізувати всю торгову систему, в якій я міг надсилати команди і відкрити позиції. У тому випадку, я зміг оптимізувати загальний прибуток і збитки і, в певній мірі, середній прибуток і збитки за торгову сесію.
Створення такої рамки не буде легко – в деяких варіантах навіть неможливо моделювати точно, але я зробив все, що я міг. Ось деякі питання, які мені довелося зіткнутися:
- Коли команда йде на ринок в тренажері, я повинен змоделювати час від лагу. Просто тому, що моя система "поза" пропозиція не означає, що вона може придбати її прямо. Система відправить команду, почекайте близько 20 мілісекундів, а лише тоді, якщо пропозиція все ще перебуває в силі, вона лікує її як закрита угода. Це не зовсім точне, оскільки тривалість реального лагу не завжди однакова і не записана.
- Коли я розміщую пропозиції, щоб купити або продати акції, потрібно розглянути потік виконання торгів (який API забезпечує) і використовувати його для відстеження, коли мій замовлення виконується. Щоб зробити це правильно, я повинен відслідковувати позицію моєї команди в черзі (черги формуються першою в першій системі першого виходу). Я не можу зробити це точно, але я моделю систему, як можна ближче до реальності.
Забезпечення прибуткової торгівлі
За допомогою імітаційної моделі замовлення я зміг відправити команди на обмін в режимі імітації та відслідковувати неординарні вигоди та втрати. Як дізнатися, де і коли купити і продати?
Поведінка цін була початковою точкою для системи, але історія не закінчується. Далі я розробила систему забивання для кожного з 5 цінових рівнів, щоб купити і продати. Ці рівні включені один рівень вище внутрішньої ціни попиту (для замовлень, щоб купити) і один рівень нижче внутрішньої ціни постачання (для замовлень, щоб продати).
Якщо обліковий запис на будь-який рівень цін вище заданого порогу, це означає, що має бути активна пропозиція купівлі/продажу в системі на цьому рівні. Якщо на рахунку нижче порогу, будь-які активні замовлення повинні бути скасовані. За цими обставинами це не буде безкомпромісний для моєї системи, щоб раптово поставити пропозицію купівлі на ринку, а потім негайно скасувати її (право, я спробував мінімізувати ймовірність таких подій, що відбуваються, так як будь-яка особа, така ситуація на моніторі, здавалося б, жорстоко дратує).
Облік рахунків для різних цінових рівнів були розраховані на основі наступних факторів:
- Прогнозування цінової поведінки (які ми обговорювали раніше)
- Рівень цін на запитання (міжнародні рівні, швидше за все, ціна стрибка)
- Кількість контрактів перед замовленням в рядку (менше краще)
- Кількість договорів після замовлення в рядку (більше, краще)
Всі змінні, які використовуються в цьому крокі, були оптимізовані. Зроблено таким же чином, що я оптимізував змінні цінових показників, крім того, в цьому випадку я оптимізував змінні при зниженні прибутку і втрати.
Що ігнорувати програму
Коли людина торгує, вони часто сильно впливають на емоції і упередження, які можуть призвести до підопічних рішень. Я, звичайно, не хочу, щоб вони були відображені в моєму коді. Тож система ігнорує деякі фактори:
- У офісі торгової компанії не можна говорити про ціну, за яку хтось входить до довгих і коротких торгів, так як якщо це повинно вплинути на подібні рішення в майбутньому. Незважаючи на те, що такі дані мають певну актуальність в рамках стратегії зменшення ризику, вони не мають нічого спільного з подальшими розробками ринку. Тож моя програма повністю ігнорувала цю інформацію. Як ігнорувати незворотні витрати.
- Довгий/короткий торговий центр - Як правило, людина трейдера матиме специфічний критерій для того, щоб продати довгострокову позицію і де зробити коротку торгівлю. Однак в плані мого алгоритму не існує різниці між двома. Якщо мій алгоритм очікувано цін на падіння, то продаж був логічним рухом, незалежно від того, чи була торгівля довга, коротка або плоска.
- Стратегія «доулінг» Це загальноприйнята стратегія, за якою торговці купують більше акцій, якщо спочатку торгівля не на користь. В результаті, вартість вашої середньої покупки знизиться, що означає, що коли (якщо) курс зміни ціни на склад, ви будете «повернути назад» ваших витрат без часу. Я думаю, що це нічна стратегія, якщо ви Warren Buffett. Ви захочете думати, що ви робите, тому що більшість ваших угод буде вигорнути. Проблема полягає в тому, що якщо ви не щасливі, втрата буде переповнена. Ще одним наслідком цього підходу є те, що він стає надзвичайно складним для визначення того, що ви насправді отримали перевагу ринку або просто щасливі. Важлива якість моєї програми була в тому, що я зміг відстежити і підтвердити ситуації, де моя програма дійсно мала перевагу.
Оскільки мій алгоритм ухвалив рішення таким же чином, незалежно від того, де він зробив торгівлю, і чи в даний час позиція була тривалою або короткою, він зробив в рази відкритими некомерційними позиціями і змусив торгівлю на великі суми грошей (хоча було також успішні торгівлі на однаково великі суми). Не варто забувати про те, що я нічого не зробив для управління ризиками.
Я впевнено встановив максимальний розмір позиції на 2 контракти за одиницю часу, тому що в дні активного торгів максимальний розмір позиції може періодично збільшуватися. Я також мав ліміт на максимальну кількість втрат протягом дня, щоб захистити себе від будь-яких несподіваних змін на ринку, а також від помилок у своїй програмі. Ці ліміти були виписані в коді, але я отримав додаткову запобіжність, даючи інструкції до мого брокера. Зробивши ці запобіжники, я згодом не відчував суттєвих проблем.
Робота з алгоритмом
Я почав працювати на моїй програмі до того, як я приніс її до точки, де він був прибутковим і я зміг спробувати його. Хоча, щоб бути чесним, я провів більшу частину цього часу, вивчення мови програмування. Як я працював над поліпшенням програми, я зафіксував зростання прибутку в кожному з наступних чотирьох місяців.
Щотижня, я хочу перепідготовити програму на основі даних, зібраних за попередні 4 тижні. Тим не менш, я знайшов, що це посилює баланс між пошуком останніх тенденцій ринку і переконавшись, що мій алгоритм отримує достатньо інформації для розробки значущих моделей поведінки. Як навчання стало більш і більш трудомістким, я зламав його так, що це може бути зроблено на 8 віртуальних машин з використанням Amazon EC2. На локальній машині було зібрано результати.
Мій найвищий торговий пункт був Жовтень 2009, коли я заробив майже $100,000. Згодом я провів ще 4 місяці, які намагаються поліпшити свою програму, незважаючи на те, що прибуток знизився щомісяця. На жаль, я відчуваю, що я спробував всі мої найкращі ідеї, тому що все, що я не допоміг мені.
Я почав думати в новому напрямку. Я написав листи до 6 різних торгових компаній, які спеціалізуються на високочастотній торгівлі, і попросили, якщо вони хочуть купити свою програму і орендувати мене за свою роботу. Немає відповіді. Тоді я мав ідеї для нових стартапів, які я хотів би працювати, тому я дав її.
Зареєструватися: Я опублікував цю посаду на Hacker News, де він став дуже популярним. Я просто говорю, що я не намагаюся захистити людей, які намагаються зробити це самостійно. Вам потрібна команда найрозумніших колег з великою кількістю навичок, щоб просто спробувати конкурувати з кимось на ринку. Вже тоді, коли я пишу свою програму, боки були рідко успішними.
У верхній частині сторінки [в оригінальній пошті — приблизно. Перекладач] є коментар, в якому є такі вирази, як «управління статистикою», і я називався одним з «надійних інвесторів», про які реальні кванти [квантас / квантас – у російському перекладі практика використовують як варіанти перекладу – близько. перекладач] кажуть, що вони «зберігаються». Це дуже незручний коментар, просто далеко від реальності. Проте, на своїй статті є цікаві коментарі.
Примітка 2: Я опублікував список відповідей на запитання, які я отримав від трейдерів, які прочитали цю статтю.
Джерело: habrahabr.ru/company/itinvest/blog/211642/
Як я зробив $ 500K від машинного навчання та високочастотної торгівлі - частина 1
Кремль не потребує України і Казахстану - Росія має намір завоювати місяць і Марс