自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用一行Python代碼創(chuàng)建高級財務圖表

開發(fā) 后端
今天帶大家一起學習一個小眾,但很厲害的可視化庫mplfinance,一起掌握最靈活的python庫來創(chuàng)建漂亮的金融可視化。

介紹

編程和技術應用于金融領域的激增是不可避免的,增長似乎從未下降。應用編程的最有趣的部分之一是歷史或實時股票數據的解釋和可視化。

現(xiàn)在,為了在 python 中可視化一般數據,matplotlib、seaborn 等模塊開始發(fā)揮作用,但是,當談到可視化財務數據時,Plotly 將成為首選,因為它提供了具有交互式視覺效果的內置函數。在這里我想介紹一個無名英雄,它只不過是 mplfinance 庫 matplotlib 的兄弟庫。

我們都知道 matplotlib 包的多功能性,并且可以方便地繪制任何類型的數據。即使像燭臺這樣的金融圖表也可以使用 matplotlib 包繪制,但我們必須從頭開始。

最近,我開始知道有一個名為 mplfinance 的單獨模塊,專門用于創(chuàng)建高級金融可視化。在本文中,我們將深入研究這個 Python 庫,并探索其生成不同類型圖表的功能。

導入包

將所需的包導入到我們的 python 環(huán)境中是一個必不可少的步驟。在本文中,我們需要三個包,它們是處理數據幀的 Pandas、調用 API 和提取股票數據的requests,以及創(chuàng)建金融圖表的 mplfinance。對于尚未安裝這些軟件包的人,請將此代碼復制到你的終端中:

pip install pandas  
pip install requests
pip install mplfinance

完成安裝包后,是時候將它們導入到我們的 python 環(huán)境中了。

import pandas as pd
import requests
import mplfinance as mf

提取股票數據

現(xiàn)在,我們已經導入了所有必要的包。讓我們使用12data.com[1]提供的 API 端點拉取亞馬遜的歷史股票數據。在此之前,12data.com上的一條說明:12data是領先的市場數據提供商之一,擁有適用于所有類型市場數據的大量 API 端點。與十二數據提供的 API 交互非常容易,并且擁有有史以來最好的文檔之一。此外,請確保你在12data.com上擁有一個帳戶,只有這樣,你才能訪問你的 API 密鑰(使用 API 提取數據的重要元素)。

Python實現(xiàn)

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()

輸出:

代碼說明

我們做的第一件事是定義一個名為'get_historical_data'的函數,該函數以股票代碼('symbol')和歷史數據的開始日期('start_date')為參數。

在函數內部,我們定義了 API 密鑰和 URL,并將它們存儲到各自的變量中。

接下來,我們使用'get'函數以 JSON 格式提取歷史數據并將其存儲到 'raw_df'變量中。在對原始 JSON 數據進行一些清理和格式化處理之后,我們以一個空的 Pandas DataFrame 的形式返回它。

最后,我們調用 created 函數來拉取亞馬遜從 2021 年初開始的歷史數據,并將其存儲到"amzn"變量中。

OHLC圖

OHLC 圖表是一種條形圖,顯示每個時期的開盤價、最高價、最低價和收盤價。

OHLC 圖表很有用,因為它們顯示了一段時間內的四個主要數據點,許多交易者認為收盤價是最重要的。它也有助于顯示增加或減少的動量。開合相距較遠時表現(xiàn)強勁,開合相近時則表現(xiàn)優(yōu)柔寡斷或動能弱。

最高價和最低價顯示了該時期的完整價格范圍,有助于評估波動性1[2]?,F(xiàn)在要使用 mplfinance 創(chuàng)建一個 OHLC 圖表,只需一行代碼:

mf.plot(amzn.iloc[:-50,:])

在上面的代碼中,我們首先調用該plot函數,并在其中將我們之前提取的 Amazon OHLC 數據切片為最后 50 個讀數,這樣做的目的只是使圖表更清晰,以便元素可見。上面的單行代碼將產生如下所示的輸出:

OHLC圖表

燭臺圖

交易者使用燭臺圖根據過去的模式確定可能的價格變動。燭臺在交易時很有用,因為它們在交易者指定的整個時間段內顯示四個價格點(開盤價、收盤價、最高價和最低價)。

這種類型的圖表最有趣的部分是它還可以幫助交易者閱讀情緒,這是市場本身的首要驅動因素 2[3]。要使用 mplfinance 生成燭臺圖,我們只需添加另一個參數,即函數的type參數plot并candle在其中提及。代碼如下所示:

mf.plot(amzn.iloc[:-50,:], type = 'candle')

上面的代碼將生成一個如下所示的燭臺圖表:

燭臺圖

磚形圖

磚形圖( Renko chart)是一種使用價格變動構建的圖表,而不是像大多數圖表那樣同時使用價格和標準化時間間隔。該圖表看起來像一系列磚塊,當價格移動指定的價格金額時會創(chuàng)建一個新磚塊,并且每個塊都與前一個磚塊成 45 度角(向上或向下)。Renko 圖表的主要用途是過濾掉噪音并幫助交易者更清楚地看到趨勢,因為所有小于框大小的運動都被過濾掉 3[4] 。

據我所知,mplfinance 是唯一提供 Renko 圖表的 Python 庫,也是我們接下來要看到的,這就是為什么這個包在金融可視化方面具有強大優(yōu)勢的原因?,F(xiàn)在要創(chuàng)建一個 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參數中指定來創(chuàng)建圖表的過程更容易plot。代碼如下所示:

mf.plot(amzn, type = 'pnf')

點數圖

添加更多信息

mplfinance 包不僅限于生成不同類型的圖表,還使我們能夠通過添加簡單移動平均線 (SMA) 和交易量等附加指標使這些圖表更具洞察力。對于那些不知道這兩者的人來說,成交量是交易者在特定時間范圍內買賣的股票數量,而簡單移動平均線 (SMA) 只不過是特定時間段的平均價格。它是一種技術指標,廣泛用于創(chuàng)建交易策略。

用 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可以實現(xiàn)的功能,但是這個了不起的庫附帶了許多新特性。它允許我們添加自定義的技術指標數據,并與實際的圖表一起繪制,我們可以自定義整個模板,甚至圖表中的每一個元素,添加趨勢線,等等。

這個庫最好的部分是它的易用性,并幫助我們用一行代碼生成高級的財務可視化。雖然像Plotly這樣的包有創(chuàng)建這些圖表的內置函數,但不可能在一行代碼中完成。

mplfinance現(xiàn)在唯一的缺點是它糟糕的文檔,這使得人們甚至不知道這個包是關于什么的。文檔是一個至關重要的方面,當涉及到開源項目時,文檔應該被認為是至關重要的。特別像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')

責任編輯:龐桂玉 來源: Python技術
相關推薦

2016-12-02 08:53:18

Python一行代碼

2020-10-13 17:30:45

Python代碼內存

2022-04-09 09:11:33

Python

2024-12-19 14:00:00

2020-08-19 10:30:25

代碼Python多線程

2021-11-02 16:25:41

Python代碼技巧

2017-04-13 19:20:18

Python代碼并行任務

2020-09-28 12:34:38

Python代碼開發(fā)

2020-08-12 14:54:00

Python代碼開發(fā)

2014-02-12 13:43:50

代碼并行任務

2017-04-05 11:10:23

Javascript代碼前端

2020-01-10 22:56:56

Python圖像處理Linux

2024-05-31 13:14:05

2021-08-31 09:49:37

CPU執(zhí)行語言

2020-09-09 16:00:22

Linux進程

2023-11-10 09:41:44

Python代碼

2021-04-19 10:38:06

代碼開發(fā)工具

2022-02-23 14:37:48

代碼Pythonbug

2024-11-08 17:22:22

2023-01-12 08:07:03

Python代碼版權
點贊
收藏

51CTO技術棧公眾號