Лесно създаване и внедряване на уеб приложения за технически анализ на финансови данни

Здравейте. Тази статия е подготвена, за да направи технически анализ на финансови данни с език на Python и да конвертира кода, който написахме, в интерактивно уеб приложение.

Техническият анализ е най-лесният начин за разбиране на финансови данни за акции, валути или различни видове данни от финансови времеви редове. Повечето програмисти или изследователи на данни използват езика на Python, за да правят основен анализ на финансови данни, защото е много лесен за използване.

В допълнение към кода за финансов анализ, искам да ви покажа как бързо и лесно да конвертирате бележник на Python в уеб приложение. Може да е полезно за някой, който не знае как да програмира във вашия екип.

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

Това не е инвестиционен съвет. Просто искам да покажа как да прегледаме финансовите данни, използвайки най-използваните технически индикатори на езика на Python.

Mercuryе мощен инструмент за преобразуване на приложение за наука за данни, изградено на бележник на Python, в интерактивно уеб приложение. В тази статия създавам приложение за анализ на финансови данни, използвайки финансови индикатори на бележник на Python, като го преобразувам в уеб приложение, използващо mercury, и го внедрявам в безплатна дино услуга Heroku за използване в мрежата. Мисля, че инструментът ще бъде много полезен за разработчиците на Python или за всеки, който знае езика на Python, работещ по теми от науката за данни, и ще опрости бързите анализи. В края на тази публикация ще имате табло за управление, което да покажете на всеки, който не разбира от програмиране.

От друга страна, ще научите как да:

  • изчислете някои технически индикатори и ги визуализирайте за финансови данни на езика на Python,
  • създайте табло за управление в Jupyter Notebook или Visual Studio код Jupyter разширение,
  • конвертирайте бележник в динамично уеб приложение с Mercury,
  • разположете базирано на преносим компютър приложение за табло за управление на Heroku free dyno.

Технически анализ и индикатори

Пълзящи средни (MA)

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

## calculate 7days, 14days, 21days moving averages
techAnalysis=finData[["Close"]]
if ma_7d:
    techAnalysis["ma_7d"]=techAnalysis["Close"].rolling(5).mean()
if ma_14d:
    techAnalysis["ma_14d"]=techAnalysis["Close"].rolling(14).mean()
if ma_21d:
    techAnalysis["ma_21d"]=techAnalysis["Close"].rolling(21).mean()

В този код 7-дневни, 14-дневни и 21-дневни подвижни средни се изчисляват върху данните „Затваряне“.

MACD

Индикаторът MACD е трендов индикатор, който се наблюдава по отношение на два различни варианта на цените. Получава се чрез изваждане на 26-дневната експоненциална пълзяща средна от 12-дневната експоненциална пълзяща средна. Сигналът в индикатора MACD се използва като тригер за покупка и продажба.
На езика на Python индикаторът MACD може да изчислява по следния начин. Използвах този начин в моето приложение с живак. Това е доста прост и ефективен начин за изчисляване на MACD на езика на Python.

# calculate MACD 
if "MACD" in indicators:
   k = techAnalysis['Close'].ewm(span=12, adjust=False,              min_periods=12).mean()
   d = techAnalysis['Close'].ewm(span=26, adjust=False, min_periods=26).mean()
   macd=k-d
   macd_s = macd.ewm(span=9, adjust=False, min_periods=9).mean()
   macd_h = macd - macd_s
   techAnalysis['macd_h'] = techAnalysis.index.map(macd_h)
   techAnalysis['macd_s'] = techAnalysis.index.map(macd_s)

В този код изчислихме MACD индикатор, MACD сигнал и MACD хистограми и ги записахме в techAnalysis рамката с данни.

RSI (индекс на относителна сила)

Индексът на относителната (относителна) сила (RSI) е индикатор, който предоставя прогнози за посоката на краткосрочния и средносрочен тренд, изчислен чрез сравняване на затварящите стойности на съответния период с предишните затварящи стойности на периода. Може да ни бъде много полезно да разберем кога инвеститорите ще продават или купуват.
В този код използвах модула pandas_ta за изчисляване на RSI. Това е доста прост и кратък начин да направите това в Python.

## RSI calculate
if "RSI" in indicators:
import pandas_ta as pta
techAnalysis["RSI"]=pta.rsi(techAnalysis["Close"],lenght="14")

Сега имаме колоната „RSI“ в рамката с данни techAnalysis.

Сила на звука

Данните за обема могат да използват индикатор. Той показва колко акции са сменили собственика си за определен период на пазарите. Данните за обема обикновено се използват от инвеститорите за тълкуване и потвърждаване на движенията на цените.
В това приложение данните за обема се добавят към последната диаграма, за да информират инвеститорите повече за цената m

Създайте Python среда и инсталирайте Mercury

Ако искате да работите с чиста среда, предлагам ви да създадете виртуална среда на Python и да работите с нея. Използвам пакета python virtualenv, за да създам виртуална среда на python.

python3 -m pip install virtualenv

След това нека създадем виртуална среда за този проект.

python -m venv my_env

Имаме среда и трябва да я активираме, за да я използваме с кода по-долу.

cd my_env
source bin/activate

my_env е активиран.

За да използвате използваните функции и модули на Python, трябва да инсталирате необходимите пакети по-долу.

matplotlib       
pandas                             
pandas-ta                             
numpy                             
pandas_datareader                             
requests                             
mplfinance                             
beautifulsoup4                             
mljar-mercury

Можете да копирате всички и да поставите във файлаrequirements.txt. След това можете да изпълните командата по-долу и лесно да инсталирате всички необходими пакети.

pip install -r requirements.text

Контролиране на сървъра на Mercury

Сега нека бързо контролираме сървъра на Mercury. Една проста команда е достатъчна, за да направите това.

mercury runserver — runworker

Нека проверим адресаhttps:127.0.0.1/8000 във вашия уеб браузър. Ако можете да видите страницата по-долу, сте го направили успешно.

За кодиране може да използва бележника на Jupyter или разширението срещу код Jupyter. Нещото, което трябва да се отбележи, е, че трябва да изберете ядрото на Jupyter my_envкогато използвате Jupyter notebook или vs код.

Ако не можете да видите my_env, трябва да добавите виртуалното ядро ​​към ядрата на Jupyter. За целта ще инсталирате пакета Jupyter чрез pip и ще добавите ядро ​​чрез ipykernelпакет. В my_env директория трябва да изпълните командите по-долу или да прочетете документите в споделената връзка.

python3 -m pip install jupyter ipykernel
python -m ipykernel install --user --name myenv"

Можете да проверите инсталираните ядра на Jupyter с командата по-долу.

Jupyter kernelspec list

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

Страхотен! Нека прегледаме моя код и лесно да го конвертираме в уеб приложение!!

Създайте бележник на Python за финансов анализ

Yahoo финанси

Yahoo finance е полезен уебсайт за лесно и бързо събиране на най-много финансови данни. Можете да получите безплатни исторически данни тук.

Използвам кода по-долу, за да събирам финансови данни от yahoo finance с python.

import pandas_datareader as dr
## date yyyy-dd-mm
start_date= "2015-01-01"
end_date=date.today()
finData=dr.data.get_data_yahoo(ticket,start=start_date,end=end_date)

Модулът pandas_datareader съдържа функцията get_data_yahooи можем лесно да събираме исторически данни.

Нека анализираме финансовите данни

В това приложение някои подвижни средни, MACD, RSI индикатори и данни за обем се използват за извършване на прост технически анализ на всякакви финансови данни.

Начертах диаграмата на свещите за последните N дни отваряне-затваряне-високо-ниско данни и тези индикатори в една диаграма. Всички кодове бяха изпратени в моето хранилище на GitHub и можете да прегледате кода в същността по-долу.

Преобразувайте бележника на Python в уеб приложение

Стъпка 1. Добавяне на YAML клетка — Mercury framework ви позволява да дефинирате приспособленията за бележника, като добавите YAML заглавка в началото на бележника.

Първо, трябва да добавите празна клетка в горната част на бележника на Python и да превключите типа клетка на raw, моля.

Това е под YAML файла, който използвах за приложението finAnalyzer-mercury. Той ще създаде джаджи в уеб приложението. Може да се използва в много типове джаджи с живак като избор, текст, плъзгач, диапазон, квадратче за отметка и др.

---
title: FinAnalyzer
author: noah
description: Technical analysis application for financial data
show-code: False
params:
   ticket:
      input: text
      label: yahoo finance ticket
      value: "^GSPC"
      row: 1
   year:
      input: range
      label: Select data range of year
      value: [2020,2022]
      min: 2017
      max: 2022
   lastndays:
      input: slider
      label: Select last n days for candlestick chart
      value: 30
      min: 7
      max: 200
   ma_7d:
      label: 7 days Moving averages
      input: checkbox
      value: true
   ma_14d:
      label: 14 days Moving averages
      input: checkbox
      value: true
   ma_21d:
      label: 21 days Moving averages
      input: checkbox
      value: true
   indicators:
      label: Select financial indicators
      input: select
      value: [MACD,RSI]
      choices: [MACD,RSI,Volume]
      multi: True
---

Необработената клетка ще създаде джаджите по-долу.

Стъпка 2. Присвояване на променлива — Трябва да създадем променливи със същото име с нашата YAML клетка и да присвоим първите стойности. В моя код присвоих първите стойности под YAML клетката.

ticket = "^GSPC"
year= [2020,2022]
ma_7d=True
ma_14d=True
ma_21d=True
indicators=["MACD","RSI"]
lastndays=30

Стъпка 3. Тест — За теста можем да използваме локален сървър на Mercury. Изпълнете кода по-долу и отворете https://127.0.0.1:8000адрес на вашия уеб браузър. Можете да покажете, че приложението работи на локалния сървър на Mercury.

Всеки път, когато актуализирате бележника, той автоматично ще се актуализира в Mercury

Стъпка 4. Разположете в Heroku Dyno — Таблото е готово, така че нека го разположим в Heroku.

Предполагам, че имате акаунт в Heroku и инсталиран инструмент Heroku Command Line (CLI). Но ако не сте го инсталирали, можете да проверите документите.

Нека влезем в инструмента Heroku-CLI:

 heroku login

Екранът за влизане в Heroku ще бъде отворен в браузъра ви по подразбиране и трябва да влезете по този начин.

След това нека създадем приложение Heroku, като изпълним:

heroku create finAnalzer-mercury

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

Ще трябва да добавим Procfile към нашия проект:

web: mercury runserver 0.0.0.0:$PORT --runworker

Нека зададем необходимите променливи на средата (.env) в дино:

heroku config:set ALLOWED_HOSTS=fin-analyzer-mercury.herokuapp.com
heroku config:set SERVE_STATIC=True
heroku config:set NOTEBOOKS=*.ipynb

Нека създадем файл setup.sh и зададем променливи на средата чрез командата по-долу:

heroku config:set $(cat .env | sed ‘/^$/d; /#[[:print:]]*$/d’)

Моето хранилище на GitHub е пример за вас. След тях сте готови да разположите приложението, като стартирате:

git push heroku main

И сега имам уеб приложение. Наличен е на връзката по-долу.



Между другото, ако натискате кодовете във вашето GitHub хранилище, но не трябва да натискате файла .env. Файлът е само Heroku dyno. Можете лесно да добавите своя .gitignore файл.

Заключение

В резултат на това използвахме Python, за да получим знания за финансовите данни с някои индикатори за технически анализ и mercury framework за преобразуването им в уеб приложение в тази публикация.

Хората използват много технически индикатори, за да получат информация за тенденциите, а ние използвахме някои индикатори, за да получим знания, за да интерпретираме данни като подвижни средни, MACD, RSI и обем тук. Мисля, че използването на интерактивно уеб приложение може да бъде много лесен начин за преглед на финансови данни и в тази публикация научихме как да създадем уеб приложение чрез код на бележник на Python.

Mercury е атрактивен инструмент за създаване на уеб приложение от файл на бележник с помощта на Python. Много е полезно да преобразувате бележник на Python в просто приложение за уеб табло. В края на краищата, приложението, написано с Python, може лесно да бъде внедрено на Heroku free dyno.

Ако във вашия екип има приятели, които не знаят програмирането на Python, можете да използвате този метод за тях. Те могат лесно да използват вашето приложение за наука за данни.

Моите кодове и Heroku файлове са налични тук.