Maison >développement back-end >Tutoriel Python >Comment créer des graphiques financiers complexes à l'aide du code Python ?
La prolifération des programmes et des technologies appliquées à la finance est inévitable, et la croissance ne semble jamais décliner. L’une des parties les plus intéressantes de la programmation appliquée est l’interprétation et la visualisation de données boursières historiques ou en temps réel.
Maintenant, pour visualiser des données générales en python, des modules comme matplotlib, seaborn, etc. entrent en jeu, cependant, lorsqu'il s'agit de visualiser des données financières, Plotly sera le premier choix car il fournit des fonctions intégrées avec des visuels interactifs. Ici, je voudrais présenter un héros méconnu qui n'est rien de plus qu'une bibliothèque frère de la bibliothèque mplfinance matplotlib.
Nous savons tous à quel point le package matplotlib est polyvalent et peut facilement tracer tout type de données. Même des graphiques financiers comme des chandeliers peuvent être dessinés à l'aide du package matplotlib, mais nous devons repartir de zéro.
Récemment, j'ai appris qu'il existe un module distinct appelé mplfinance dédié à la création de visualisations financières avancées. Dans cet article, nous examinerons de plus près cette bibliothèque Python et explorerons ses capacités pour générer différents types de graphiques.
L'importation des packages requis dans notre environnement python est une étape essentielle. Dans cet article, nous avons besoin de trois packages, ce sont des pandas pour traiter les trames de données, des requêtes pour appeler l'API et extraire des données boursières, et mplfinance pour créer des graphiques financiers. Pour ceux d'entre vous qui n'ont pas encore installé ces packages, copiez ce code dans votre terminal :
pip install pandas pip install requests pip install mplfinance
Après avoir terminé l'installation des packages, il est temps de les importer dans notre environnement python.
import pandas as pd import requests import mplfinance as mf
Maintenant, nous avons importé tous les packages nécessaires. Extrayons les données boursières historiques d'Amazon à l'aide du point de terminaison API fourni par 12data.com[1]. En attendant, une note sur 12data.com : 12data est l'un des principaux fournisseurs de données de marché avec un grand nombre de points de terminaison API pour tous les types de données de marché. Interagir avec l'API fournie par Twelve Data est très simple et dispose de l'une des meilleures documentations jamais créées. Assurez-vous également d'avoir un compte sur 12data.com, alors seulement vous aurez accès à votre clé API (un élément important pour extraire des données à l'aide de l'API).
def get_historical_data(symbol, start_date): api_key = 'YOUR API KEY' api_url = f'https://api.twelvedata.com/time_series?symbol={symbol}&interval=1day&outputsize=5000&apikey={api_key}' raw_df = requests. get(api_url).json() df = pd.DataFrame(raw_df['values']).iloc[::-1].set_index('datetime').astype(float) df = df[df.index >= start_date] df.index = pd.to_datetime(df.index) return df amzn = get_historical_data('AMZN', '2021-01-01') amzn.tail()
Sortie :
Description du code
La première chose que nous faisons est de définir une fonction appelée 'get_historical_data' qui commence par le symbole boursier ("symbole") et le date de début des données historiques (« start_date ») comme paramètres.
Dans la fonction, nous définissons la clé API et l'URL et les stockons dans leurs variables respectives.
Ensuite, nous utilisons la fonction 'get' pour extraire les données historiques au format JSON et les stocker dans la variable 'raw_df'. Après avoir effectué un peu de nettoyage et de formatage des données JSON brutes, nous les renvoyons sous la forme d'un Pandas DataFrame vide.
Enfin, nous appelons la fonction créée pour extraire les données historiques d'Amazon à partir du début de 2021 et les stocker dans la variable "amzn".
Le graphique OHLC est un graphique à barres qui montre les prix d'ouverture, haut, bas et de clôture pour chaque période.
Les graphiques OHLC sont utiles car ils affichent quatre points de données majeurs sur une période donnée, de nombreux traders considérant le cours de clôture comme le plus important. Cela aide également à montrer une dynamique croissante ou décroissante. Lorsque l'ouverture et la fermeture sont éloignées, la performance est forte ; lorsque l'ouverture et la fermeture sont proches, la performance est indécise ou faible.
High et Low affichent la fourchette complète des prix pour la période, aidant à évaluer la volatilité1[2]. Maintenant, pour créer un graphique OHLC à l'aide de mplfinance, il suffit d'une seule ligne de code :
mf.plot(amzn.iloc[:-50,:])
Dans le code ci-dessus, nous appelons d'abord la fonction plot où nous découpons les données Amazon OHLC que nous avons extraites plus tôt dans les 50 dernières lectures, Le but est simplement de rendre le schéma plus clair afin que les éléments soient visibles. La seule ligne de code ci-dessus produira un résultat qui ressemble à ceci :
Graphique OHLC
Les traders utilisent des graphiques en chandeliers pour déterminer les mouvements de prix possibles en fonction des modèles passés. Les chandeliers sont utiles lors du trading car ils affichent quatre niveaux de prix (ouverture, clôture, haut et bas) tout au long de la période spécifiée par le trader.
La partie la plus intéressante de ce type de graphique est qu'il aide également les traders à lire le sentiment, qui est le principal moteur du marché lui-même2[3]. Pour générer un graphique en chandeliers à l'aide de mplfinance, il nous suffit d'ajouter un autre paramètre qui est le tracé des paramètres de type de la fonction et la bougie y est mentionnée. Le code ressemble à ceci :
mf.plot(amzn.iloc[:-50,:], type = 'candle')
Le code ci-dessus générera un graphique en chandeliers comme celui-ci :
烛台图
砖形图( Renko chart)是一种使用价格变动构建的图表,而不是像大多数图表那样同时使用价格和标准化时间间隔。该图表看起来像一系列砖块,当价格移动指定的价格金额时会创建一个新砖块,并且每个块都与前一个砖块成 45 度角(向上或向下)。Renko 图表的主要用途是过滤掉噪音并帮助交易者更清楚地看到趋势,因为所有小于框大小的运动都被过滤掉 3[4] 。
据我所知,mplfinance 是唯一提供 Renko 图表的 Python 库,也是我们接下来要看到的,这就是为什么这个包在金融可视化方面具有强大优势的原因。现在要创建一个 Renko,我们只需要在函数renko的type参数中指定plot。Renko 图表的代码如下所示:
mf.plot(amzn, type = 'renko')
我们还可以向plot函数添加一个额外的参数,该参数是根据renko_params我们的需要和其他类似类型修改砖块大小的参数,但我更喜欢默认的。上面的代码生成了一个看起来像这样的砖形图:
砖形图
点数图,简称 P&F 图,类似于 Renko 图,它在不考虑时间流逝的情况下绘制资产的价格走势。与其他一些类型的图表(例如烛台)相反,烛台标志着资产在设定的时间段内的变动程度,而 P&F 图表使用由堆叠的 X 或 O 组成的列,每个列代表一定数量的价格变动。X 代表价格上涨,而 O 代表价格下跌。当价格反转反转量 4[5] 时,会在 O 之后形成新的 X 列或在 X 之后形成新的 O 列。
支持点数图的函数在其他地方找不到,只能在 mplfinance 库中找到,而且它还使我们可以通过仅pnf在函数的type参数中指定来创建图表的过程更容易plot。代码如下所示:
mf.plot(amzn, type = 'pnf')
点数图
mplfinance 包不仅限于生成不同类型的图表,还使我们能够通过添加简单移动平均线 (SMA) 和交易量等附加指标使这些图表更具洞察力。对于那些不知道这两者的人来说,成交量是交易者在特定时间范围内买卖的股票数量,而简单移动平均线 (SMA) 只不过是特定时间段的平均价格。它是一种技术指标,广泛用于创建交易策略。
用 matplotlib 绘制这些数据需要一千年,而 mplfinance 允许我们只用一行代码就可以完成这项任务。除了type参数之外,我们只需要引入另外两个参数,一个是mav我们必须指定每个 SMA 的回溯期的参数,另一个是volume我们必须提到的参数,True 如果我们想将成交量图添加到我们的图表中,或者False 我们不想。这两个指标的代码如下所示:
mf.plot(amzn, mav = (10, 20), type = 'candle', volume = True)
可以通过两种方式修改和试验上述代码。第一种方法显然是尝试不同类型的图表。在上述代码中,我们提到我们的图表类型是烛台,但你可以将其更改为 OHLC、Renko 甚至 P&F 图表,并观察每个图表及其两个附加指标的外观。下一个方法是使用mav我们可以添加任意数量的具有不同回顾期的 SMA的参数。上述代码的输出如下所示:
如果你想知道如何保存这些财务可视化中的任何一个,只需添加另一个参数,savefig即你只需提及其文件名的参数,其余部分将被处理。假设你想保存上面的图,那么你必须遵循的代码如下所示:
mf.plot(amzn, mav = (10, 20), type = 'candle', volume = True, savefig = 'amzn.png')
这就是你为保存精彩的财务可视化所需要做的全部工作。很容易,对吧?
在我看来,与Plotly或Altair等库相比,mplfinance是绘制金融数据最强大的库。本文只是简单介绍了使用mplfinance可以实现的功能,但是这个了不起的库附带了许多新特性。它允许我们添加自定义的技术指标数据,并与实际的图表一起绘制,我们可以自定义整个模板,甚至图表中的每一个元素,添加趋势线,等等。
这个库最好的部分是它的易用性,并帮助我们用一行代码生成高级的财务可视化。虽然像Plotly这样的包有创建这些图表的内置函数,但不可能在一行代码中完成。
mplfinance现在唯一的缺点是它糟糕的文档,这使得人们甚至不知道这个包是关于什么的。文档是一个至关重要的方面,当涉及到开源项目时,文档应该被认为是至关重要的。特别像mplfinance这样的关键和有用的项目必须有清晰文档,对其提供的工具和功能有明确的解释。
到这里,你看完了这篇文章。如果你忘记了图表的代码,不要担心,最后我提供了完整的源代码。你也可以收藏本文,等需要用到的时候再查看。
import pandas as pd import requests import mplfinance as mf # Extracting stock data def get_historical_data(symbol, start_date): api_key = 'YOUR API KEY' api_url = f'https://api.twelvedata.com/time_series?symbol={symbol}&interval=1day&outputsize=5000&apikey={api_key}' raw_df = requests.get(api_url).json() df = pd.DataFrame(raw_df['values']).iloc[::-1].set_index('datetime').astype(float) df = df[df.index >= start_date] df.index = pd.to_datetime(df.index) return df amzn = get_historical_data('AMZN', '2021-01-01') amzn.tail() # 1. OHLC Chart mf.plot(amzn.iloc[:-50,:]) # 2. Candlestick Chart mf.plot(amzn.iloc[:-50,:], type = 'candle') # 3. Renko Chart mf.plot(amzn, type = 'renko') # 4. Point and Figure Chart mf.plot(amzn, type = 'pnf') # 5. Technical chart mf.plot(amzn, mav = (10, 20), type = 'candle', volume = True) # 6. Plot customization mf.plot(amzn, mav = (5, 10, 20), type = 'candle', volume = True, figratio = (10,5), style = 'binance', title = 'AMZN STOCK PRICE', tight_layout = True) # 7. Saving the plot mf.plot(amzn, mav = (5, 10, 20), type = 'candle', volume = True, figratio = (10,5), style = 'binance', title = 'AMZN STOCK PRICE', tight_layout = True, savefig = 'amzn.png')
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!