使用MPLFINANCE 打造一個互動的顯示股票線圖工具(4模組化)[QuantTradingwithPython_4]

更新於 發佈於 閱讀時間約 14 分鐘
投資理財內容聲明


raw-image


本來模組化這件事;打算在我們完成股票池工作之後再來談的。沒想到這幾天,已經有一些朋友反應;大概因為端午節的關係,提前磕了太多粽子,導致有點消化不良。所以左思右想之後,決定提前先上一下模組化的部分。目的在於簡化工作。我們討論系列文章的目的,或許跟大家介紹許多一般比較少用的Python套件。但是Python的一些基本語法,在網路或我們周遭,已經有太多大神打造了許許多多深入淺出的課程。所以這不是我們要的重點。一路以來,總喜歡跟大家傳遞一些簡單的概念;很多事情大家把它擰成複雜了。那樣生活和學習就不好玩了。所以我們的系列文章,最終目的是想讓大家藉著這一系列文章下來後所成立的許多小工具,形成一個真正實用的量化平台;並協助簡化交易,以及方便的修正自己的交易策略。在未來。能夠使用最少行的程式敘述,方便地去建立自己的交易策略。

那就話不多說;直接上菜。不過今天沒有程式執行的畫面,因為執行出來的畫面跟上一篇文章的結果是一樣的。這一期的重點,是放在它精簡後的程式碼上面。我們把上一篇大家反應有點長的程式碼,濃縮成剩下面的這幾行程式碼。這下子簡單有了,精簡了;但是保證效果一樣好。




from stock_chart import StockChart

StkList= ['AAPL', 'NVDA', 'TSLA','2330.TW','2317.TW']

chart = StockChart(['AAPL', 'NVDA', 'TSLA','2330.TW','2317.TW'], '2023-01-01', '2023-06-17')

chart.show()




就是簡化成最後的這五行。不過如果現在就急著把它貼上自己的程式編輯環境去執行;它肯定是不會理你的。所以先靜下心來;坐好板凳,聽我先解釋吧。

首你會看到第一行引入的東西就有點不一樣了。

from stock_chart import StockChart

這是因為趁著月黑風高四下無人的時候,我把原來的一段重要程式碼包裝成了一個模組。它就是這一行引入當中的stock_chart.py模組。大家可以從等一下的解說當中直接拷貝程式碼,利用文字編輯工具去生成。或者可以用以下的網址;直接下載。

點我下載

下載完成之後,可以使用文字編輯器或者Python的開發環境直接開啟。順利的話,應該它的內容如下。

import yfinance as yf

import mplfinance as mpf

import ipywidgets as widgets

from IPython.display import display, clear_output




class StockChart:

    def __init__(self, codes, start_date, end_date):

        self.codes = codes

        self.start_date = start_date

        self.end_date = end_date

        self.data = None




        # Create a dropdown widget for the stock code

        self.code_dropdown = widgets.Dropdown(

            options=self.codes,

            value=self.codes[0],

            description='Stock Code:',

            disabled=False,

        )




        # Download the initial data

        self.download_data(self.code_dropdown.value)




        # Create an IntSlider widget for setting the number of days to display

        self.days_slider = widgets.IntSlider(

            value=5,

            min=5,

            max=len(self.data),

            step=1,

            description='Days:',

            disabled=False,

            continuous_update=False,

            orientation='horizontal',

            readout=True,

            readout_format='d'

        )




        # Create a button widget for submitting the input

        self.submit_button = widgets.Button(

            description='Plot Chart',

            disabled=False,

            button_style='', # 'success', 'info', 'warning', 'danger' or ''

            tooltip='Click to plot chart',

            icon='check' # (FontAwesome names without the `fa-` prefix)

        )




        # Attach the click event handler to the button

        self.submit_button.on_click(self.on_submit_button_clicked)




        # Attach the change event handler to the dropdown

        self.code_dropdown.observe(self.on_code_dropdown_change)




    def download_data(self, code):

        self.data = yf.download(code, start=self.start_date, end=self.end_date)




    def on_submit_button_clicked(self, b):

        # Get the input values

        code = self.code_dropdown.value

        days = self.days_slider.value




        # Set the candlestick colors and style

        my_color = mpf.make_marketcolors(up='r', down='g', edge='inherit', wick='inherit', volume='inherit')

        my_style = mpf.make_mpf_style(marketcolors=my_color, figcolor='(0.82, 0.83, 0.85)', gridcolor='(0.82, 0.83, 0.85)')




        # Clear the previous chart

        clear_output(wait=True)

        

        # Plot the candlestick chart

        mpf.plot(self.data.tail(days), type='candle', volume=True, style=my_style, title=str(code), figsize=(8, 5))

        

        # Redisplay the input widgets and button

        display(self.code_dropdown, self.days_slider, self.submit_button)




    def on_code_dropdown_change(self, change):

        if change['type'] == 'change' and change['name'] == 'value':

            self.download_data(change['new'])




    def show(self):

        # Display the input widgets and button initially

        display(self.code_dropdown, self.days_slider, self.submit_button)

# Example usage:

chart = StockChart(['AAPL', 'NVDA', 'TSLA'], '2023-01-01', '2023-06-11')

chart.show()




這裡大部份的內容,擷取自上篇文章中的程式碼。其中的一些差別就是在包裝這個模組的時候,我們把一些函式集合起來做成了類別class。注意到最後的四行。這是一段註解如何使用的說明。也就是我們之前,所謂簡化後的執行程式碼。如果你不是經由剛才下載點所得到的檔案,現在完全可以把這段程式碼複製粘貼到自己的文字編輯器當中;之後將它另存為stock_chart.py;它的效果是完全一樣的。對了,請注意它的大小寫。我們這些重點在於介紹如何使用它。首先使用這個模組,我們必須先Import它。所以回到簡化後程式碼第一行。

from stock_chart import StockChart 這一行的。引入跟一般模組的引入沒有什麼不同。現在所要談的重點是;平時大概都是透過pip來安裝套件,然後在程式書寫當中直接瀟灑的import就完事了。但是在今天這個例子當中,我們這個模組。並不是透過安裝來的,所以有些狀況必須要先解釋一下。

首先,以及最重要的;便是要確定自己的Python程式,在import的敘述之後,可以順利地尋找到這個模組;不然的話就做白工了。

所以這個檔案的安放位置在這裡是非常重要的事情。必須先知道Python可以從哪裡去尋找到。對於這個檔案,一般來說它有3個地方可以尋找到。

第一種方法最簡單。就是把這個模組,跟我們的執行程式碼放在同一個目錄底下。如此在做引入動作之後,Python便可以直接找到檔案。這也是最簡便的方法。第二種其實跟第一種是類似的;應該是一種概念的延伸。就是把這個檔案放置在我們Windows系統設定的路徑當中。可以在命令模式CMD底下輸入echo %path% 來顯示目前系統當中所設定的路徑。這些路徑也應該都在系統與Python的掌控之中。第三,最後一種方式。應該是最正統的吧?就是把這個模組放在跟我們一般pip安裝套件之後所放的目錄在一起。要如何知道Python的環境下路徑設定如何呢?可以輸入以下的這個代碼。

import sys

print(sys.path)

執行這段代碼之後,應該會回應許多的路徑。當然這些路徑也都可以放置,Python也都可以找到。其中有一個特殊名稱的路徑,也就是剛剛說的幾乎所有安裝後套件放置的地方。以我的電腦為例。我的Anaconda是安裝在C:\\AnaConda3目錄之下,所以它對應的路徑應該是。C:\\AnaConda3\\lib\\site-packages 理論上把模組放在這裡,應該是最正確的吧?反正不管你安裝的是哪種版本的開發環境。在安裝目錄之下,尋找\lib\site-packages 這個目錄位置應該就八九不離十了。

當把我們的模組放置到了對的地方以後;執行簡化後的那五行程式,就可以順利的產生,跟上篇文章一樣的工作畫面。在順利引入模組之後,便可以做一些常規的查詢;比如dir或者是StockChart.然後按tab鍵,都可以看到一些這個套件的資訊。好了。今天就簡單的對將程式模組化,以及如何引入使用的方法;做一個介紹。最後在這裡祝大家端午節闔家安康;佳節愉快。我們下次見。

對了,最後跟大家說明一下;返台之後發現台灣的物價,飛漲到幾乎不認識它的程度。所以提醒各位好朋友;如果對我們的極限交易法課程有興趣的,請儘快與我洽詢預訂上課時間。因為實在沒有辦法支招了,很可能決定調漲幾年來都未曾調整過的課程價格。在此,非常抱歉!提前跟大家預告一下。感謝您的理解。與長時間以來對課程的支持。祝大家交易順利。




raw-image








留言
avatar-img
留言分享你的想法!
avatar-img
Parkson Dow的沙龍
8會員
19內容數
一個專為金融專業設計的專題。介紹量化交易的基本概念和使用Python進行量化交易策略開發的方法。專題涵蓋金融市場運作、技術分析,實例和代碼提供,幫助理解和應用不同的交易策略和指標。此外,介紹了回測工具的使用和風險管理技巧。本專題為對量化交易有興趣的讀者提供了全面的學習指南。
Parkson Dow的沙龍的其他內容
2023/12/19
本期這篇文章。將迎來我們建構股票池工具的收官之作。依照慣例,追劇的每一季結尾,代表著總要對每一季階段性的故事做一個交代。然後也必須要適時的加入一些念想。
Thumbnail
2023/12/19
本期這篇文章。將迎來我們建構股票池工具的收官之作。依照慣例,追劇的每一季結尾,代表著總要對每一季階段性的故事做一個交代。然後也必須要適時的加入一些念想。
Thumbnail
2023/12/18
首先、本來想在這一邊做一個收官,用來結束我們創建股票池工具的階段工作。如此也可以讓我們展開往後的策略設計,以及回測的工作。
Thumbnail
2023/12/18
首先、本來想在這一邊做一個收官,用來結束我們創建股票池工具的階段工作。如此也可以讓我們展開往後的策略設計,以及回測的工作。
Thumbnail
2023/12/18
技術文件   # Pattern Recognition Functions 形態識別    ### CDL2CROWS - Two Crows > 函數名:CDL2CROWS   名稱:Two Crows 兩隻烏鴉   簡介:三日K線模式,第一天長陽,第二天高開收陰,
Thumbnail
2023/12/18
技術文件   # Pattern Recognition Functions 形態識別    ### CDL2CROWS - Two Crows > 函數名:CDL2CROWS   名稱:Two Crows 兩隻烏鴉   簡介:三日K線模式,第一天長陽,第二天高開收陰,
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
  接上一篇,看來花花綠綠的東西跟我們是無望了。對原本接下來的計畫也只好做一些改變。所以衹能把我們的程式碼,重新移動到了7月7號那篇文章的進度NBLOG_20230707使用TA_LIB(PANDAS_TA) 打造一個交易策略實用工具(2TA_LIB輕探之馬克快來。
Thumbnail
  接上一篇,看來花花綠綠的東西跟我們是無望了。對原本接下來的計畫也只好做一些改變。所以衹能把我們的程式碼,重新移動到了7月7號那篇文章的進度NBLOG_20230707使用TA_LIB(PANDAS_TA) 打造一個交易策略實用工具(2TA_LIB輕探之馬克快來。
Thumbnail
墨菲定律說。要什麼不一定來什麼;但不要什麼就一定會來什麼。自從幾個月前過完28歲的生日之後,有一天在洗手臺上面發現了一根掉落的白髮,就暗示的事情不會那麼的簡單。
Thumbnail
墨菲定律說。要什麼不一定來什麼;但不要什麼就一定會來什麼。自從幾個月前過完28歲的生日之後,有一天在洗手臺上面發現了一根掉落的白髮,就暗示的事情不會那麼的簡單。
Thumbnail
在上一篇文章當中;我們已經順利的,把股價當中所發現的吞噬K線形態。標示,在圖形當中。對我這個圖形極簡偏執狂來說,已經是在滿意得不得了了。但自己知道,許多朋友們,還是喜歡看到習慣的紅綠色來標示;上漲或下跌的方向。
Thumbnail
在上一篇文章當中;我們已經順利的,把股價當中所發現的吞噬K線形態。標示,在圖形當中。對我這個圖形極簡偏執狂來說,已經是在滿意得不得了了。但自己知道,許多朋友們,還是喜歡看到習慣的紅綠色來標示;上漲或下跌的方向。
Thumbnail
本來模組化這件事;打算在我們完成股票池工作之後再來談的。沒想到這幾天,已經有一些朋友反應;大概因為端午節的關係,提前磕了太多粽子,導致有點消化不良。所以左思右想之後,決定提前先上一下模組化的部分。目的在於簡化工作。我們討論系列文章的目的,或許跟大家介紹許多一般比較少用的Python套件、、
Thumbnail
本來模組化這件事;打算在我們完成股票池工作之後再來談的。沒想到這幾天,已經有一些朋友反應;大概因為端午節的關係,提前磕了太多粽子,導致有點消化不良。所以左思右想之後,決定提前先上一下模組化的部分。目的在於簡化工作。我們討論系列文章的目的,或許跟大家介紹許多一般比較少用的Python套件、、
Thumbnail
首先。先跟大家說一個令人振奮的消息。在這一篇文章當中。我們終於即將完成K線圖形顯示程式。這個未來會常常使用的小工具完工啦!就說興不興奮,高不高興。這段時間總算沒有白費;我們真的給鼓搗出了一些東西,這下子應該不只可以面對家鄉的父老了;都有一種榮歸故里的感覺。
Thumbnail
首先。先跟大家說一個令人振奮的消息。在這一篇文章當中。我們終於即將完成K線圖形顯示程式。這個未來會常常使用的小工具完工啦!就說興不興奮,高不高興。這段時間總算沒有白費;我們真的給鼓搗出了一些東西,這下子應該不只可以面對家鄉的父老了;都有一種榮歸故里的感覺。
Thumbnail
嗨又見面了!接下來就繼續下去我們的程式互動之旅之旅.相信應該沒有人會以為我們用一個簡單的input,就交代了想要的互動功能.在這一篇當中將帶領大家,真正的體會,炫酷又好玩的Jupyter notebook互動功能.將程式介面提升到一個讓自己愛不釋手的檔次。
Thumbnail
嗨又見面了!接下來就繼續下去我們的程式互動之旅之旅.相信應該沒有人會以為我們用一個簡單的input,就交代了想要的互動功能.在這一篇當中將帶領大家,真正的體會,炫酷又好玩的Jupyter notebook互動功能.將程式介面提升到一個讓自己愛不釋手的檔次。
Thumbnail
在上一篇文章中,我們學會了如何繪製最新的分鐘圖,讓我們了解最新一日的個股股價變化,不過有時分鐘圖太過細小,並無法了解到個股整體的趨勢狀況,這時我們就必須要使用到日線圖,因此,今天我們就來學習如何繪製日線圖吧!!
Thumbnail
在上一篇文章中,我們學會了如何繪製最新的分鐘圖,讓我們了解最新一日的個股股價變化,不過有時分鐘圖太過細小,並無法了解到個股整體的趨勢狀況,這時我們就必須要使用到日線圖,因此,今天我們就來學習如何繪製日線圖吧!!
Thumbnail
股價是股票匯集各式因素所組成的視覺圖,因此今天我們就來學學如何畫製個股的最新分鐘圖,讓你能夠一鍵輕鬆看到當日最新股價走勢圖,我們就開始來教學吧!!
Thumbnail
股價是股票匯集各式因素所組成的視覺圖,因此今天我們就來學學如何畫製個股的最新分鐘圖,讓你能夠一鍵輕鬆看到當日最新股價走勢圖,我們就開始來教學吧!!
Thumbnail
使用pandas,透過TWStock_2的資料,計算下列三種常用的技術指標 1. 移動平均線 2. 指數移動平均線 3. MACD 首先連接資料庫,然後我們只取"成交股數 , 開盤價 , 最高價 , 最低價 , 收盤價" 這5個columns代入新的tsmc( 名稱 ) code如下 參考連結如下
Thumbnail
使用pandas,透過TWStock_2的資料,計算下列三種常用的技術指標 1. 移動平均線 2. 指數移動平均線 3. MACD 首先連接資料庫,然後我們只取"成交股數 , 開盤價 , 最高價 , 最低價 , 收盤價" 這5個columns代入新的tsmc( 名稱 ) code如下 參考連結如下
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News