Много научни статии обхващат прогнозирането на финансови времеви редове, но само малък брой от тях говорят за приложението в реална стратегия за търговия. През повечето време изследването дава само показателите за ефективност на модела (точност, RMSE, …), но без да се опитва да го трансформира в печеливша стратегия. Когато говорим за финансови времеви редове, говорим за стохастични процеси, което означава, че се занимава с много случайност. Поради тази причина е нереалистично да се очаква получаване на точност, подобна на тази, получена в много други приложения на Deep Learning. Така че, не очаквайте да получите 80% точност, когато прогнозирате, че пазарът ще върви нагоре или надолу за даден времеви хоризонт. Известно е, че прогнозирането на финансови времеви редове е една от най-трудните задачи в машинното обучение. Целта е вместо да се опитвате да намерите модел, който може да ви даде малко предимство в сравнение с чисто произволно предположение или с чиста стратегия Купи и Задръж, когато говорим за фондовия пазар. Има също така много неща, за които трябва да се внимава по отношение на обработката на данни, когато се прилага машинно обучение към финансови времеви редове. Ако сте начинаещ в тази област на изследване или ако получите добри показатели от модела си, но лоши реални търговски резултати, можете да прочетете нашия документ, обхващащ тази тема Обработка на данни за финансови времеви редове за машинно обучение, може да ви помогне да разберете какво е се обърка. В продължение на години и в сътрудничество с две френски инженерни училища, CentralSupelec и Polytechnique, Lusis AI Department работи върху прогнози за финансови времеви редове от гледна точка на приложими стратегии за търговия. В тази статия и в бъдещите, читателят ще намери някои методи и резултати, които могат да му помогнат много при собственото му изследване. Но тъй като много повече, отколкото във всяка друга област, работеща търговска стратегия, базирана на изкуствен интелект, може директно да се трансформира в пари, така че очевидно никога няма да разкрием най-важните неща, позволяващи възпроизвеждането на нашите модели. Ако откриете възпроизводим модел с много добри показатели където и да е в документ, внимавайте и направете собствено проучване и тест преди да инвестирате в него.

Прогнозиране на GBPUSD тенденция в рамките на деня

В тази статия ние илюстрираме приложението на Deep Learning за изграждане на стратегия за търговия. Първо създаваме и оценяваме модел, предвиждащ тенденциите в рамките на деня на GBPUSD. След това тестваме стратегия, базирана единствено на прогнозите на модела, преди да я накараме да работи в реално време. Набор от данни: GBPUSD едночасови OHLC данни между 11.04.2011 г. и 30.01.2018 г., така че представлява 41 401 едночасови OHLC ленти за около 7 години данни. Набор за обучение: 2011–2014. Набор за валидиране: 2015. Тестови набор: 2016– Етикет за 2018 г.: Цена на затваряне нагоре/надолу N бара по-късно, нашият предиктор е класификатор

Обучение — Валидиране — Тестови периоди на 1H GBPUSD След като определим етикета, трябва да проверим съотношението на класовете Up и Down в популацията. Намирането на небалансирани етикети означава, че ще трябва да ги балансираме отново или да използваме друг показател, различен от точността. Тук открихме 50,3% от Up, за 49,7% от клас Down, така че точността е надежден показател за оценка на нашия модел. Тук, от съображения за поверителност, няма да споменаваме следното: хоризонт на прогнозиране (N ленти) размер на времевите отрязъци, използвани като вход за характеристиките на модела (сурови или производни) ние използваме филтри или всякаква друга предварителна обработка, приложена точен модел хиперпараметри Но ще покажем, че изненадващо един прост модел може да се представи добре.

Моделът

В повечето случаи, когато говорим за прогнози за времеви серии, първо мислим за използването на LSTM или CNN 1D. Тук искахме първо да оценим MLNN, за да го сравним с другите двама. Но след проучване открихме начин да направим този модел достатъчно точен, за да изградим стратегия за търговия с него. Следната диаграма илюстрира MLNN, подобен на този, който използваме:

MLNN Изходният слой на модела има две единици, една за Up и една за Down клас. Той използва функция за активиране softmax. Функцията на загуба е категорична кръстосана ентропия. Защо използваме такъв изход на множество единици с softmax вместо единична единица със сигмоидно активиране? Причината е, че улеснява създаването на общи функции за тестване на различни модели с етикети, имащи повече от два класа. Най-простият случай е Up/Down/Neutral, но можем да имаме и повече нива Up и Down (силно, средно, слабо, …). Като цяло ние винаги създаваме набор от функции за производителност в началото, за да направим вариациите на моделите по-лесни и по-бързи за изграждане и тестване. Това ускорява много итерациите. След това можем да концентрираме усилията си върху най-важните неща, самия модел и неговите показатели за представяне. Относно другата точка, която можем да разкрием, функцията за активиране на плътните слоеве е tanh, ние използваме adam optimizer и отпадащи слоеве за регулиране. Обучаваме модела на 500 епохи с размер на партидата 64, след което получаваме следните резултати:

Загуба и точност при обучение и валидиране Функцията за загуба няма нищо общо с това, което обикновено получаваме в много други приложения за дълбоко обучение. Имайте предвид, че финансовите пазари са много шумен контекст, където можем да очакваме само малко предимство. Можем да наблюдаваме, че загубата се подобрява леко до 300 епохи, след което започва да се движи нагоре. Това показва, че има известно пренастройване. Има няколко начина за борба с пренастройването, включително: Получаване на повече данни: тук използваме само GBPUSD, не можем лесно да приложим техники за увеличаване на данните, както се намират в класификаторите на изображения. Обърната картина на котка все още е котка, но това не е толкова просто за финансовите времеви серии. Всяка малка модификация на данни може да доведе до много различни ситуации, никога не можем да сме сигурни, че етикетът ще бъде същият, отколкото за оригиналната последователност. Улавянето на по-дълга история или добавянето на данни от други валутни двойки може да помогне Опростяване на модела: това често е най-ефективният начин за борба с пренастройването, преди да използвате регулация, тук вече е направено Регулация: тук запазихме отпадането само след тестване на L1 и L2 регулация Ранно спиране: не го използваме за момента, тъй като трябва да уловим най-добрите показатели около дадена епоха (тук някъде между 250 и 350), а не само точна епоха като 300. Тъй като методът не съществува първоначално в Keras, трябва да внедрим персонализиран. И така, тук вече направихме два от тези подходи и преди да експериментираме с повече данни, проверяваме точността и виждаме, че правим по-добри резултати от произволно предположение с 0,56 в набора за валидиране. За някои епохи моделът дори се справяше по-добре с точност, надвишаваща 0,6, но преди да се опитаме да го получим с оптимално ранно спиране, искаме първо да проверим как се държи стратегия за търговия, базирана на този предиктор. Така че го тестваме обратно.

Ретро тестване

Ние тестваме модела за 3 години данни, които не са били използвани за обучение, т.е. между 2015 г. и началото на 2018 г. Стратегията, изградена от модела, е много проста. Ние просто купуваме, когато моделът прогнозира възходящ тренд и продаваме на късо, когато моделът прогнозира низходящ тренд. За да оценим чистата производителност на модела, ние не задаваме стоп загуба или тейк печалба. Ние просто затваряме позицията N ленти след влизането, където N е прогнозният хоризонт. Ние също така не задаваме никакъв спред за първия бектест, за да получим необработените показатели. Всички резултати по-долу са изразени в пипсове. За да го получим, използваме търговски размер от 10 000 GBP, така че всеки пипс представлява 1 USD. Започваме със сметка от 10 000 USD. Преди да говорим за ливъридж, всеки бектест трябва първо да започне със сделки без ливъридж, за да се оцени рискът, който може да бъде поет.

Само една дума за съотношението на качеството. Няма да го намерите в литературата, тъй като това е патентована формула. Намерете описанието по-долу, извлечено от документацията на Lusis Backtest Engine.

Определение на съотношението на качеството Тези първи резултати изглеждат много добри. Също така наблюдаваме, че средната загуба при печалба е по-висока от спреда, който обикновено се наблюдава при GBPUSD при добри брокери, който обикновено е под 0,8 пипса. Най-голямата наблюдавана губеща сделка е намаляла със 156 пипса, така че 1,56% от първоначалния капитал и максималното усвояване е 4%. Като справка, в търговската общност често се препоръчва от големи автори да не се търгува стратегия, надвишаваща 30% усвояване и никога да не се рискува повече от 2% на сделка. Тук нашите показатели вече са под тези две граници. На финансовия пазар и особено на Форекс всички делнични дни не са еквивалентни като риск и поведение. Така че нека проверим приходите и разходите за ден от седмицата.

Представления през делничните дни Тук 0 означава понеделник, а 4 означава петък. Можем лесно да видим, че петък е губещ ден. Така че нека просто добавим филтър в самата стратегия, за да го премахнем и да изпълним теста отново.

Тук веднага можем да видим подобрение на печалбите и загубите, средната загуба на печалба от търговия и максималното усвояване спадна до 3%. Кривата на собствения капитал също изглежда по-плавна. Най-губещата сделка изглежда все още доста висока при 151 пипса. Най-елементарната практика за нейното подобряване се състои в добавяне на stop loss към стратегията. Някои хора добавят и тейк печалби, но много автори смятат, че това е грешка. Най-добрите стратегии, следващи тенденцията, често правят своите печалби за годината само от няколко големи хода. Излизането от тях твърде рано никога не ви дава никакъв шанс да вземете големи печалби. За да намерите къде да поставите Stop Loss, нека да разгледаме диаграмата MAE/MFE, те съответно означават Максимално неблагоприятно отклонение и Максимално благоприятно отклонение. Той показва печалбите и загубите, постигнати от всяка печеливша и губеща сделка в сравнение с тяхната максимална потенциална загуба или печалба от отварянето им.

Тук можем да видим, че само няколко сделки бяха малки печеливши, когато техният MAE беше под около 50 пипса. Така че можем да кажем, че след достигане на потенциална загуба от 50 пипса почти няма шанс сделката да се възстанови и да стане печеливша. Но също така виждаме, че някои сделки, които са паднали с повече от 50 пипса, могат частично да възстановят загубата си, преди да бъдат затворени. Това означава, че такава стоп загуба не е задължително да подобри стратегията. Единственият начин да се уверите е да изпълните бектест.

Stop Loss от 50 пипса всъщност не подобрява стратегията, дори намалява някои от показателите, но също така имаме по-висок QR, което означава, че можем да получим още по-„търгуема“ крива на собствения капитал. Нашият Backtest Engine позволява стартирането на оптимизатор, за да се намери най-доброто разстояние за Stop Loss, което да се използва. Както и да е, за момента и тъй като разликата не е толкова голяма, предпочитаме първо да оценим 100% чист подход за дълбоко обучение. Сега добавяме спред от 0,8 пипса и пускаме бектеста отново, без спиране на загубата.

Стратегията остава печеливша и не се влияе толкова много от спреда. Затова решаваме да го стартираме в реално време с платформа за търговия.

Бягане в реално време

Ето резултатите в реално време в пипсове от началото на годината.

Резултатите все още са доста добри и стратегията все още е печеливша. Скорошният спад в края на юли идва от последните новини за Brexit. Това е много интересна ситуация, която ни даде някои идеи за тестване, за да подобрим представянето на модела.

Заключение и следващи стъпки

Тази статия обхваща създаването на стратегия за търговия, базирана на Deep Learning, и как постигнахме пълен процес на тестване, за да сме сигурни, че извън показателите за ефективност, моделът може да бъде печеливш за търговия в реално време. Следващите стъпки за нас сега са: Добавете повече данни, за да се опитате да подобрите точността Приложите същия модел към портфолио от инструменти Работете върху LSTM и CNN 1D модели, тъй като те са естественият избор за такъв проблем с времеви серии Работете върху хибридни подходи с множество входове Някои от тези работи вече са в ход. Благодаря ви, че прочетохте. Цялата работа в тази статия е извършена под JupyterLab с TensorFlow/Keras. Backtests бяха извършени с персонален двигател, създаден от автора по лиценз на MIT, първоначално в Golang, след това трансформиран в Python, специално за да се използва с модели за машинно обучение, идващи от TensorFlow, PyTorch или Scikit-Learn. Lusis подобри много този софтуер, като добави функция за автоматизирана търговия, която позволява да се изпълнява всяка стратегия в производствена система без никакви модификации. Понастоящем тази търговия в реално време може да работи с всеки брокер, използващ технологията на Lusis Trading Platform.