Heim >Backend-Entwicklung >Python-Tutorial >Wie erstelle ich komplexe Finanzdiagramme mit Python-Code?
Die Verbreitung von Programmen und Technologien im Finanzbereich ist unvermeidlich, und das Wachstum scheint nie nachzulassen. Einer der interessantesten Teile der angewandten Programmierung ist die Interpretation und Visualisierung historischer oder Echtzeit-Bestandsdaten.
Für die Visualisierung allgemeiner Daten in Python kommen nun Module wie Matplotlib, Seaborn usw. ins Spiel. Wenn es jedoch um die Visualisierung von Finanzdaten geht, ist Plotly die erste Wahl, da es integrierte Funktionen mit interaktiven Grafiken bietet. Hier möchte ich einen unbesungenen Helden vorstellen, der nichts anderes als eine Bruderbibliothek der MPLFinance-Bibliothek Matplotlib ist.
Wir alle wissen, wie vielseitig das Matplotlib-Paket ist und jede Art von Daten problemlos darstellen kann. Sogar Finanzdiagramme wie Candlesticks können mit dem Matplotlib-Paket gezeichnet werden, aber wir müssen bei Null anfangen.
Kürzlich habe ich erfahren, dass es ein separates Modul namens mplfinance gibt, das sich der Erstellung erweiterter Finanzvisualisierungen widmet. In diesem Artikel werfen wir einen tieferen Blick auf diese Python-Bibliothek und erkunden ihre Möglichkeiten zum Generieren verschiedener Diagrammtypen.
Der Import der erforderlichen Pakete in unsere Python-Umgebung ist ein wesentlicher Schritt. In diesem Artikel benötigen wir drei Pakete: Pandas zum Verarbeiten von Datenrahmen, Requests zum Aufrufen der API und Extrahieren von Bestandsdaten und mplfinance zum Erstellen von Finanzdiagrammen. Für diejenigen unter Ihnen, die diese Pakete noch nicht installiert haben, kopieren Sie diesen Code in Ihr Terminal:
pip install pandas pip install requests pip install mplfinance
Nachdem Sie die Installation der Pakete abgeschlossen haben, ist es Zeit, sie in unsere Python-Umgebung zu importieren.
import pandas as pd import requests import mplfinance as mf
Jetzt haben wir alle notwendigen Pakete importiert. Lassen Sie uns die historischen Bestandsdaten von Amazon mithilfe des von 12data.com bereitgestellten API-Endpunkts abrufen[1]. Bis dahin ein Hinweis auf 12data.com: 12data ist einer der führenden Marktdatenanbieter mit einer Vielzahl von API-Endpunkten für alle Arten von Marktdaten. Die Interaktion mit der von Twelve Data bereitgestellten API ist sehr einfach und verfügt über eine der besten Dokumentationen überhaupt. Stellen Sie außerdem sicher, dass Sie über ein Konto bei 12data.com verfügen. Nur dann haben Sie Zugriff auf Ihren API-Schlüssel (ein wichtiges Element zum Extrahieren von Daten mithilfe der 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()
Ausgabe:
Codebeschreibung
Als erstes definieren wir eine Funktion namens „get_historical_data“, die mit dem Aktiensymbol („symbol“) und dem beginnt Startdatum der historischen Daten ('start_date') als Parameter.
Innerhalb der Funktion definieren wir den API-Schlüssel und die URL und speichern sie in ihren jeweiligen Variablen.
Als nächstes verwenden wir die Funktion „get“, um die historischen Daten im JSON-Format zu extrahieren und in der Variablen „raw_df“ zu speichern. Nachdem wir die JSON-Rohdaten bereinigt und formatiert haben, geben wir sie als leeren Pandas DataFrame zurück.
Abschließend rufen wir die erstellte Funktion auf, um die historischen Daten von Amazon ab Anfang 2021 abzurufen und in der Variablen „amzn“ zu speichern.
OHLC-Diagramm ist ein Balkendiagramm, das die Eröffnungs-, Höchst-, Tiefst- und Schlusskurse für jeden Zeitraum anzeigt.
OHLC-Diagramme sind nützlich, weil sie vier wichtige Datenpunkte über einen bestimmten Zeitraum hinweg anzeigen, wobei viele Händler den Schlusskurs für den wichtigsten halten. Es hilft auch, zunehmende oder abnehmende Dynamik anzuzeigen. Wenn Eröffnung und Schluss weit voneinander entfernt sind, ist die Leistung stark; wenn Eröffnung und Schluss nahe beieinander liegen, ist die Leistung unentschlossen oder schwach.
Hoch und Tief zeigen die gesamte Preisspanne für den Zeitraum an und helfen so, die Volatilität einzuschätzen1[2]. Um nun mit mplfinance ein OHLC-Diagramm zu erstellen, ist nur eine Codezeile erforderlich:
mf.plot(amzn.iloc[:-50,:])
Im obigen Code rufen wir zunächst die Plot-Funktion auf, in der wir die zuvor extrahierten Amazon OHLC-Daten in die letzten 50 Messwerte aufteilen. Der Zweck besteht lediglich darin, das Diagramm klarer zu gestalten, damit die Elemente sichtbar sind. Die obige einzelne Codezeile erzeugt eine Ausgabe, die wie folgt aussieht:
OHLC-Diagramm
Händler verwenden Candlestick-Diagramme, um mögliche Preisbewegungen basierend auf vergangenen Mustern zu bestimmen. Candlesticks sind beim Handel nützlich, da sie über den vom Händler festgelegten Zeitraum hinweg vier Preispunkte (Eröffnungs-, Schluss-, Höchst- und Tiefstkurs) anzeigen.
Das Interessanteste an dieser Art von Diagramm ist, dass es Händlern auch hilft, die Stimmung zu erkennen, die der wichtigste Treiber des Marktes selbst ist2[3]. Um mit mplfinance ein Candlestick-Diagramm zu erstellen, müssen wir lediglich einen weiteren Parameter hinzufügen, nämlich den Typparameterplot der Funktion, in dem die Kerze erwähnt wird. Der Code sieht so aus:
mf.plot(amzn.iloc[:-50,:], type = 'candle')
Der obige Code generiert ein Candlestick-Diagramm wie folgt:
烛台图
砖形图( 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')
Das obige ist der detaillierte Inhalt vonWie erstelle ich komplexe Finanzdiagramme mit Python-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!