Прогнозирането на цените на акциите беше интересна задача, нали? Data Science за търговия е във възход и се развива много бързо. От последните 3-4 седмици научавам за финансите и се опитвам да разширя уменията си в областта на науката за данните към финансите, за да се опитам да разбера как търговията се автоматизира и прави печеливша от много от тези фирми за алгоритмична търговия.

Онзи ден попаднах на това как може да се използва актьорско-критично подсилващо обучение и написах статия за същото, снощи си помислих да направя нещо по-просто и да видя как работи, тъй като е известно, че по-простите методи работят доста добре за повечето хора разбрах, че съм изследвал достатъчно неща, за да си изцапам ръцете и да опитам нещо, за да създам алгоритъм, който, надявам се, може да генерира някаква печалба. Да, всички знаем, че RL е добър и невероятен и какво ли още не, но простите методи и технически индикатори във финансите работят доста добре за хората в търговията от дълго време, така че защо да не го съчетаете с машинно обучение, за да направите нещо полезно и се надяваме, печеливш.

Това е доста лесно за проследяване и може да генерира прилични резултати, номоля, прочетете по-долу отказа от отговорност, преди да продължите с тази статия.

Отказ от отговорност — каквото и да пиша тук и целият код, който виждате в моето репо в GitHub, е от мое собствено проучване и проучване. Не нося отговорност за загуби, които може да понесете, използвайки този код за извършване на реални сделки. Силно ви препоръчвам да НЕ използвате това за реална търговия. Целта на това е да споделя всичко, което научих през последните няколко седмици.

Какви са тези технически показатели?

Според Investopedia,

Техническите индикатори са евристични или математически изчисления, базирани на цената, обема или отворения интерес на ценна книга или договор, използвани от търговци, които следват технически анализ.

Накратко, това са набор от математически и статистически техники, използвани от търговците, които им помагат да решат своята търговска стратегия. В тази статия ще преминем през най-фундаменталните и основни и ще видим, че те могат да генерират добри функции, които можем да подадем към нашия SVM класификатор, за да предвидим дали трябва да купуваме или продаваме.

Да, правилно чухте, опитах се да го разглеждам като проблем с двоичната класификация, а не като проблем с регресията, за да предскажа действителните цени на акциите, за да опростя нещата, а SVM има тенденция да работи доста добре за сценарии за класификация като този, регресия/прогнозиране на цените могат да бъдат постигнати по-добре с помощта на модели на времеви серии, като например LSTM мрежа.

Ние използваме 1, за да обозначим покупка, ако се предвижда цената да се повиши, и 0 като продажба, ако се предвижда спад на цената.

Ще използваме TA-Libи Pandasза изчисляване на повечето от тези технически индикатори. И така, да започваме. Целият код може да бъде намерен в моето хранилище на GitHub.

Технически индикатори, използвани като функции:

  1. Обикновена подвижна средна
  • Ежедневните финансови данни могат да бъдат шумни. Можем да използваме подвижната средна, за да получим повече сигнал, а не шум от данните. Основната концепция тук е да предоставите прозорец от зададен период от време и след това да го използвате, за да изчислите вашата обобщена статистика (означава в този случай)
  • За нашия случай сме взели предвид проста 5-дневна пълзяща средна и 10-дневна пълзяща средна като наши характеристики.

2. Подвижно стандартно отклонение

  • Това е точно подобна концепция на подвижната средна, обобщената статистика в крайна сметка е стандартно отклонение вместо средна стойност, останалото всичко останало е напълно същото. Отново взехме предвид както 5-дневен, така и 10-дневен прозорец за изчисляване на подвижното стандартно отклонение. Едно много често срещано приложение са лентите на Болинджър,които се използват за идентифициране на променливостта на акциите и са още един технически индикатор за изследване.

3. Експоненциално претеглена пълзяща средната

  • EWMA придава по-голяма тежест на по-скорошни стойности във времевата серия и е много по-добър вариант от обикновените подвижни средни, поради следните факти —

(i) По-малките размери на прозореца в SMA водят до повече шум, отколкото сигнал.

(ii) SMA винаги ще изостава от размера на прозореца.

(iii) SMA никога няма да достигне пълния пик на данните поради осредняването.

(iv) Екстремни стойности/отклонения могат значително да изкривят SMA.

EWMA се отървава от някои от тези слабости на SMA и понякога е по-добър избор.

3. Индекс на относителна якоста

  • RSI е осцилаторен индикатор с диапазон от 0 до 100.
  • Математическото уравнение за изчисляване на RSI е дадено като -

  • Обикновено използваме 14-дневен период за изчисляване на RSI, въпреки че това може да варира в зависимост от специфичните изисквания.
  • По-малък период ще генерира по-висока честота на сигнали за покупка/продажба и малко от тях могат да бъдат грешни.
  • По-високият брой периоди ще генерира по-ниска честота на сигнали за покупка/продажба с голяма вероятност за изключване на някои от истинските възможности за покупка/продажба.
  • Обикновено стойност на RSI над 70 се счита за свръхкупена, докато стойност под 30 се счита за свръхпродадена.
  • Праговете на RSI може би са 80 и 20 за горните случаи в случай на бичи и мечи пазари съответно (диаграми на Google Candlesticks, за да научите повече за тях).

4. Уилямс %R

  • Това е индикатор за импулс, както и осцилатор,между -100 и 0
  • Математическото уравнение, което е доста очевидно за изчисляване на Williams R, е дадено като -

  • Отчитане над -20 обикновено се счита за свръхпокупка.
  • Отчитане под -80 обикновено се счита за свръхпродадено.
  • Отново горните стойности може леко да се различават за бичи и мечи пазари.
  • Накратко, той казва на търговеца къде текущата цена е спрямо най-високия връх през последните 14 периода (или който и да е избран период).

5. Параболичен SAR

  • Индикаторът Parabolic Stop and Reverse се използва за идентифициране на посоката на тренда на конкретен актив.
  • Представени от точки, под или над цената на актива, в зависимост от посоката, в която се движи цената.
  • Ако има възходящ тренд, тогава тези точки са под свещниците, ако има низходящ тренд, те са над диаграмата на свещниците.

6. ADX (среден насочен индекс)

  • Този конкретен индикатор се използва за определяне на силата на определена тенденция.
  • Ще пропусна изчислителната част, която може да бъде прочетена и разбрана много лесно „тук“, само за да бъда кратка тази статия и да стигна до същността.

Страхотно, вече знаем за куп технически индикатори, които можем да използваме, за да анализираме нашите данни за акциите на Reliance.

Защо да използвате SVM?

  • SVM е един от най-популярните алгоритми за машинно обучение, изключително популярен в края на 90-те години и доста прост и същевременно мощен (когато е съчетан с подходящото ядро) подход за справяне с проблеми с класификацията и регресията.
  • SVM могат да работят много добре, ако можем да намерим правилното ядро ​​и ако можем да намерим ядро, предназначено за конкретен домейн, то може да надмине повечето други техники и да даде феноменални резултати. Въпреки това, само за да опростим нещата, ние ще се придържаме към основните — линейно ядро, полиномиално ядро ​​и RBF ядро, което идва веднага от кутията в sklearn.
  • Хиперравнината се влияе само от опорните вектори, така че отклоненията имат по-малко влияние.
  • За начинаещи, които са нови и искат да знаят повече за това как работят SVM, можете да прочетете тази страхотна публикация в блог и ще разберете тънкостите на SVM за нула време.

Недостатъци на използването на SVM?

  • Обучението на SVM отнема много време и са изчислително много неефективни за работа с големи масиви от данни.
  • Времевата сложност на линеен SVM е приблизително O(n²).
  • Можем обаче да използваме мащабиране на функции, за да ги обучим по-бързо и да конвергираме функцията за загуба наистина по-бързо, следователно мащабирането на функции е важна част при работа със SVM.
  • Сложността по време на изпълнение обаче е O(k*d), зависима от броя на опорните вектори k,и d,размерността на нашите данни.
  • Намирането на подходящото ядро ​​може да бъде истинска болка и не е лесна задача.
  • Настройката на хиперпараметър в случай на SVM може да не е толкова опростена.

Постигнати резултати?

  • Можем да видим в бележника, че постигнахме следните резултати по отношение на данните за запасите на Reliance от 2009 г. до настоящата дата:

Линеен SVM — Точност: 51,43%

Базиран на полиномно ядро ​​SVM — Точност: 53,15%

Базиран на RBF-ядро SVM — Точност: 52%

  • Случайният модел имаше точност от 33% и можем да видим, че се справяме значително по-добре от произволния модел във всичките 3 случая.
  • Може би си мислите, че това не е страхотен резултат, напълно съгласен, но това е нещо, което току-що получихме, използвайки само 5-6 технически индикатора и това вероятно може да бъде подобрено много, за да се разработи напълно развит алгоритъм за търговия, което може много по-добре. По-долу са някои идеи, за които се сетих, за да подобря това и да го направя много по-добро. Но наистина трябва да оценим, че току-що използвахме някои от най-основните индикатори и чрез много кратък код на Python успяхме да постигнем приличен резултат.

Как можем да подобрим това?

  • Използвайте анализ на настроенията и новини за акции/акции на Reliance във вашето портфолио.
  • Използвайте по-голям брой технически индикатори (тъй като SVM работи добре с данни с големи размери, можете лесно да добавите повече функции, без да се тревожите много за проклятието на размерността).
  • Приложете същото към диверсифицирано портфолио от акции, а не към една акция.
  • Намерете ядро, специфично за домейн, което може да даде значителен тласък на производителността, т.е. ядро, което работи добре за данни за финанси/времеви серии, това изисква известно проучване.
  • Настройте фино съществуващата SVM архитектура (използвайте RandomSearch вместо GridSearch, за да улесните живота)
  • Интерпретирайте модела си с агностични техники на модела (като LIME), за да разберете всяко отклонение (ако съществува) и да разберете коя характеристика допринася повече за вашата прогноза.
  • Използвайте повече данни (дори повече от 10 години данни, но внимавайте да не използвате твърде много, защото използването на твърде много данни добавя повече шум, а не сигнал), за да получите много по-добри резултати, което разбира се идва с цената на повече време, необходимо за обучете SVM.
  • Опитайте други класификатори, като KNN, който може да бъде доста подобен на базирания на RBF SVM, за да видите дали има подобрение в производителността.

Целият код, свързан с тази публикация в блога, може да бъде намерен в това хранилище на GitHub.

Благодаря за четенето! Желая ви страхотен ден!