<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用一行Python代碼創(chuàng)建高級(jí)財(cái)務(wù)圖表

          共 6215字,需瀏覽 13分鐘

           ·

          2021-12-25 22:47

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


          大家好,我是龍哥!


          今天帶大家一起學(xué)習(xí)一個(gè)小眾,但很厲害的可視化庫(kù)mplfinance,一起掌握最靈活的python庫(kù)來創(chuàng)建漂亮的金融可視化。

          介紹

          編程和技術(shù)應(yīng)用于金融領(lǐng)域的激增是不可避免的,增長(zhǎng)似乎從未下降。應(yīng)用編程的最有趣的部分之一是歷史或?qū)崟r(shí)股票數(shù)據(jù)的解釋和可視化。

          現(xiàn)在,為了在 python 中可視化一般數(shù)據(jù),matplotlib、seaborn 等模塊開始發(fā)揮作用,但是,當(dāng)談到可視化財(cái)務(wù)數(shù)據(jù)時(shí),Plotly 將成為首選,因?yàn)樗峁┝司哂薪换ナ揭曈X效果的內(nèi)置函數(shù)。在這里我想介紹一個(gè)無名英雄,它只不過是 mplfinance 庫(kù) matplotlib 的兄弟庫(kù)。

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

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

          導(dǎo)入包

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

          pip?install?pandas?
          pip?install?requests
          pip?install?mplfinance

          完成安裝包后,是時(shí)候?qū)⑺鼈儗?dǎo)入到我們的 python 環(huán)境中了。

          import?pandas?as?pd
          import?requests
          import?mplfinance?as?mf

          提取股票數(shù)據(jù)

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

          當(dāng)然,你也可以使用云朵君之前介紹過的幾篇文章,也介紹了幾個(gè)常用獲取股票數(shù)據(jù)的方法:超級(jí)攻略!Pandas\NumPy\Matrix用于金融數(shù)據(jù)準(zhǔn)備

          Python實(shí)現(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()

          輸出:

          代碼說明

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

          在函數(shù)內(nèi)部,我們定義了 API 密鑰和 URL,并將它們存儲(chǔ)到各自的變量中。

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

          最后,我們調(diào)用 created 函數(shù)來拉取亞馬遜從 2021 年初開始的歷史數(shù)據(jù),并將其存儲(chǔ)到"amzn"變量中。

          OHLC圖

          OHLC 圖表是一種條形圖,顯示每個(gè)時(shí)期的開盤價(jià)、最高價(jià)、最低價(jià)和收盤價(jià)。

          OHLC 圖表很有用,因?yàn)樗鼈冿@示了一段時(shí)間內(nèi)的四個(gè)主要數(shù)據(jù)點(diǎn),許多交易者認(rèn)為收盤價(jià)是最重要的。它也有助于顯示增加或減少的動(dòng)量。開合相距較遠(yuǎn)時(shí)表現(xiàn)強(qiáng)勁,開合相近時(shí)則表現(xiàn)優(yōu)柔寡斷或動(dòng)能弱。

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

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

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

          OHLC圖表

          燭臺(tái)圖

          交易者使用燭臺(tái)圖根據(jù)過去的模式確定可能的價(jià)格變動(dòng)。燭臺(tái)在交易時(shí)很有用,因?yàn)樗鼈冊(cè)诮灰渍咧付ǖ恼麄€(gè)時(shí)間段內(nèi)顯示四個(gè)價(jià)格點(diǎn)(開盤價(jià)、收盤價(jià)、最高價(jià)和最低價(jià))。

          這種類型的圖表最有趣的部分是它還可以幫助交易者閱讀情緒,這是市場(chǎng)本身的首要驅(qū)動(dòng)因素?2[3]。要使用 mplfinance 生成燭臺(tái)圖,我們只需添加另一個(gè)參數(shù),即函數(shù)的type參數(shù)plotcandle在其中提及。代碼如下所示:

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

          上面的代碼將生成一個(gè)如下所示的燭臺(tái)圖表:

          燭臺(tái)圖

          磚形圖

          磚形圖( Renko chart)是一種使用價(jià)格變動(dòng)構(gòu)建的圖表,而不是像大多數(shù)圖表那樣同時(shí)使用價(jià)格和標(biāo)準(zhǔn)化時(shí)間間隔。該圖表看起來像一系列磚塊,當(dāng)價(jià)格移動(dòng)指定的價(jià)格金額時(shí)會(huì)創(chuàng)建一個(gè)新磚塊,并且每個(gè)塊都與前一個(gè)磚塊成 45 度角(向上或向下)。Renko 圖表的主要用途是過濾掉噪音并幫助交易者更清楚地看到趨勢(shì),因?yàn)樗行∮诳虼笮〉倪\(yùn)動(dòng)都被過濾掉?3[4]?。

          據(jù)我所知,mplfinance 是唯一提供 Renko 圖表的 Python 庫(kù),也是我們接下來要看到的,這就是為什么這個(gè)包在金融可視化方面具有強(qiáng)大優(yōu)勢(shì)的原因?,F(xiàn)在要?jiǎng)?chuàng)建一個(gè) Renko,我們只需要在函數(shù)renkotype參數(shù)中指定plot。Renko 圖表的代碼如下所示:

          mf.plot(amzn,?type?=?'renko')

          我們還可以向plot函數(shù)添加一個(gè)額外的參數(shù),該參數(shù)是根據(jù)renko_params我們的需要和其他類似類型修改磚塊大小的參數(shù),但我更喜歡默認(rèn)的。上面的代碼生成了一個(gè)看起來像這樣的磚形圖:

          磚形圖

          點(diǎn)數(shù)圖

          點(diǎn)數(shù)圖,簡(jiǎn)稱 P&F 圖,類似于 Renko 圖,它在不考慮時(shí)間流逝的情況下繪制資產(chǎn)的價(jià)格走勢(shì)。與其他一些類型的圖表(例如燭臺(tái))相反,燭臺(tái)標(biāo)志著資產(chǎn)在設(shè)定的時(shí)間段內(nèi)的變動(dòng)程度,而 P&F 圖表使用由堆疊的 X 或 O 組成的列,每個(gè)列代表一定數(shù)量的價(jià)格變動(dòng)。X 代表價(jià)格上漲,而 O 代表價(jià)格下跌。當(dāng)價(jià)格反轉(zhuǎn)反轉(zhuǎn)量?4[5]?時(shí),會(huì)在 O 之后形成新的 X 列或在 X 之后形成新的 O 列。

          支持點(diǎn)數(shù)圖的函數(shù)在其他地方找不到,只能在 mplfinance 庫(kù)中找到,而且它還使我們可以通過僅pnf在函數(shù)的type參數(shù)中指定來創(chuàng)建圖表的過程更容易plot。代碼如下所示:

          mf.plot(amzn,?type?=?'pnf')
          點(diǎn)數(shù)圖

          添加更多信息

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

          用 matplotlib 繪制這些數(shù)據(jù)需要一千年,而 mplfinance 允許我們只用一行代碼就可以完成這項(xiàng)任務(wù)。除了type參數(shù)之外,我們只需要引入另外兩個(gè)參數(shù),一個(gè)是mav我們必須指定每個(gè) SMA 的回溯期的參數(shù),另一個(gè)是volume我們必須提到的參數(shù),True?如果我們想將成交量圖添加到我們的圖表中,或者False?我們不想。這兩個(gè)指標(biāo)的代碼如下所示:

          mf.plot(amzn,?mav?=?(10,?20),?type?=?'candle',?volume?=?True)

          可以通過兩種方式修改和試驗(yàn)上述代碼。第一種方法顯然是嘗試不同類型的圖表。在上述代碼中,我們提到我們的圖表類型是燭臺(tái),但你可以將其更改為 OHLC、Renko 甚至 P&F 圖表,并觀察每個(gè)圖表及其兩個(gè)附加指標(biāo)的外觀。下一個(gè)方法是使用mav我們可以添加任意數(shù)量的具有不同回顧期的 SMA的參數(shù)。上述代碼的輸出如下所示:

          保存圖片

          如果你想知道如何保存這些財(cái)務(wù)可視化中的任何一個(gè),只需添加另一個(gè)參數(shù),savefig即你只需提及其文件名的參數(shù),其余部分將被處理。假設(shè)你想保存上面的圖,那么你必須遵循的代碼如下所示:

          mf.plot(amzn,?
          ????????mav?=?(10,?20),?
          ????????type?=?'candle',?
          ????????volume?=?True,?
          ????????savefig?=?'amzn.png')

          這就是你為保存精彩的財(cái)務(wù)可視化所需要做的全部工作。很容易,對(duì)吧?

          寫在最后

          在我看來,與Plotly或Altair等庫(kù)相比,mplfinance是繪制金融數(shù)據(jù)最強(qiáng)大的庫(kù)。本文只是簡(jiǎn)單介紹了使用mplfinance可以實(shí)現(xiàn)的功能,但是這個(gè)了不起的庫(kù)附帶了許多新特性。它允許我們添加自定義的技術(shù)指標(biāo)數(shù)據(jù),并與實(shí)際的圖表一起繪制,我們可以自定義整個(gè)模板,甚至圖表中的每一個(gè)元素,添加趨勢(shì)線,等等。

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

          mplfinance現(xiàn)在唯一的缺點(diǎn)是它糟糕的文檔,這使得人們甚至不知道這個(gè)包是關(guān)于什么的。文檔是一個(gè)至關(guān)重要的方面,當(dāng)涉及到開源項(xiàng)目時(shí),文檔應(yīng)該被認(rèn)為是至關(guān)重要的。特別像mplfinance這樣的關(guān)鍵和有用的項(xiàng)目必須有清晰文檔,對(duì)其提供的工具和功能有明確的解釋。

          到這里,你看完了這篇文章。如果你忘記了圖表的代碼,不要擔(dān)心,最后我提供了完整的源代碼。你也可以收藏本文,等需要用到的時(shí)候再查看。

          完整代碼

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

          參考資料

          [1]?

          12data.com:?https://twelvedata.com/

          [2]?

          1:?https://www.investopedia.com/terms/o/ohlcchart.asp

          [3]?

          2:?https://www.investopedia.com/trading/candlestick-charting-what-is-it

          [4]?

          3:?https://www.investopedia.com/terms/r/renkochart.asp

          [5]?

          4:?https://www.investopedia.com/terms/p/pointandfigurechart.asp


          推薦閱讀

          1. 3行Python代碼!識(shí)別圖片中的任意語(yǔ)言文字

          2. 整理了 65 個(gè) Matplotlib 案例,拿來即用!

          3. 王力宏的瓜到底有多大?我用Python分析的明明白白


          瀏覽 126
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色操逼视频 | 91av在线免费 | 国产日韩视频在线观看 | 日韩淫色电影 | 日韩人妻精品在线 |