使用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
7會員
19內容數
一個專為金融專業設計的專題。介紹量化交易的基本概念和使用Python進行量化交易策略開發的方法。專題涵蓋金融市場運作、技術分析,實例和代碼提供,幫助理解和應用不同的交易策略和指標。此外,介紹了回測工具的使用和風險管理技巧。本專題為對量化交易有興趣的讀者提供了全面的學習指南。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Parkson Dow的沙龍 的其他內容
首先。先跟大家說一個令人振奮的消息。在這一篇文章當中。我們終於即將完成K線圖形顯示程式。這個未來會常常使用的小工具完工啦!就說興不興奮,高不高興。這段時間總算沒有白費;我們真的給鼓搗出了一些東西,這下子應該不只可以面對家鄉的父老了;都有一種榮歸故里的感覺。
嗨又見面了!接下來就繼續下去我們的程式互動之旅之旅.相信應該沒有人會以為我們用一個簡單的input,就交代了想要的互動功能.在這一篇當中將帶領大家,真正的體會,炫酷又好玩的Jupyter notebook互動功能.將程式介面提升到一個讓自己愛不釋手的檔次。
 大家好。很高興在這個新的部落格上面。有機會能再跟大家一起討論交易的兩三事。未來我們將在這個新的地方上面;與大家一步一步地,建立起屬於我們自己個性化的量化交易平臺;敬請期待。
首先。先跟大家說一個令人振奮的消息。在這一篇文章當中。我們終於即將完成K線圖形顯示程式。這個未來會常常使用的小工具完工啦!就說興不興奮,高不高興。這段時間總算沒有白費;我們真的給鼓搗出了一些東西,這下子應該不只可以面對家鄉的父老了;都有一種榮歸故里的感覺。
嗨又見面了!接下來就繼續下去我們的程式互動之旅之旅.相信應該沒有人會以為我們用一個簡單的input,就交代了想要的互動功能.在這一篇當中將帶領大家,真正的體會,炫酷又好玩的Jupyter notebook互動功能.將程式介面提升到一個讓自己愛不釋手的檔次。
 大家好。很高興在這個新的部落格上面。有機會能再跟大家一起討論交易的兩三事。未來我們將在這個新的地方上面;與大家一步一步地,建立起屬於我們自己個性化的量化交易平臺;敬請期待。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
你是否也在日常生活中尋找改進空間? 刻意保留那些關於"什麼有意義"的思考,你將能提升生活品質並找到更好的方法! 下面是3個我使用子彈筆記20+天後,獲得守護靈光一閃的想法的3個最佳實踐:
Thumbnail
Google對Windows、Mac和Linux使用者發佈Chrome 99.0.4844.84,修補已被利用的高風險(0-day vulnerability)零日漏洞。 CVE-2022-1096是一個匿名安全研究員報告的Chrome V8 JavaScript引擎中的高嚴重類型混淆(Type C
Thumbnail
作為開發人員,您可能想知道是否需要博客。老實說,我寫博客已經有一段時間了,我只能告訴你,在你的網站上擁有一個博客有很大的好處。假設您有一個網站,您在該網站上擁有投資組合併銷售產品或服務。您如何為您的網站帶來更多流量,以便潛在的招聘人員或客戶能夠發現您的產品或服務? 先決條件 項目設置 文章正文
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
你也是敏感肌、或是敏弱肌,平常皮膚容易泛紅或是過敏?或是你是痘痘肌,用了很多產品但都沒有改善嗎? 以下為三個我使用過的胺基酸洗面乳推薦 第一個: BHK's 溫和胺基酸洗面乳 第二個: rill®川 30%日本溫和保濕胺基酸洗面乳 第三個: UNT 氨基酸保濕潔顏霜 總結
Thumbnail
無論您是計劃舉辦生日派對、婚禮、週年紀念、貿易展覽還是公司活動,營造一個優雅而富麗的backdrop印刷對於空間至關重要。仍然不確定是否投資backdrop?您將了解為什麼需要創它的原因以及它如何影響您的場合! 1)提升任何活動的主題和裝飾 2)背景隱藏了場地的不完美之處 3)多種顏色、材料和款式
Thumbnail
自從接案生活以來,我大概有4分之一的案子是從Tasker出任務來的 4分之3是從PRO360達人網來的,我覺得還可以 是因為收入的部份,2個月的收入 也分布差不多。 但接案真的要很努力,才有機會可以增加收入, 比上班更要加倍努力。 二個月我共服務了很多客戶,我覺得兩邊的客戶,讓我的感受不太一樣
房東太太幫我安裝永佳樂後,到現在差不多快三個月左右了吧~ 來分享一下使用的心得XD 其實覺得跟在家用凱擘的感覺差不多,沒什麼太大的問題(我的標準就是能看順暢就好 哈哈) 除了放長假回家以外,幾乎每天都會看電視睡覺,說實在的除了廣告一樣都很多以外,真的沒什麼差XD(凱擘、永佳樂) 想看甚麼都有,早點下
Thumbnail
現在,讓我們再一次看看Apple會不會在Mac上拋棄「過時」的Intel x86系列處理器,而改用自家設計的ARM架構晶片。這個過程聽起來好像很不錯,然而如果在2006年要做很容易,在2021年就不是那麼簡單了。
Thumbnail
以電信公司離網分析 (churn rate)預測為例 既有手動資料分析的挑戰: 電信公司與上千萬個客戶簽約,因此顧客資料量龐大,難以分析 需有專業人員進行複雜的數據建模,導致人力、時間、工具成本昂貴,無法彈性擴展應用 新進人員需要時間訓練,無法快速上手 分析目的:     使用過
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
你是否也在日常生活中尋找改進空間? 刻意保留那些關於"什麼有意義"的思考,你將能提升生活品質並找到更好的方法! 下面是3個我使用子彈筆記20+天後,獲得守護靈光一閃的想法的3個最佳實踐:
Thumbnail
Google對Windows、Mac和Linux使用者發佈Chrome 99.0.4844.84,修補已被利用的高風險(0-day vulnerability)零日漏洞。 CVE-2022-1096是一個匿名安全研究員報告的Chrome V8 JavaScript引擎中的高嚴重類型混淆(Type C
Thumbnail
作為開發人員,您可能想知道是否需要博客。老實說,我寫博客已經有一段時間了,我只能告訴你,在你的網站上擁有一個博客有很大的好處。假設您有一個網站,您在該網站上擁有投資組合併銷售產品或服務。您如何為您的網站帶來更多流量,以便潛在的招聘人員或客戶能夠發現您的產品或服務? 先決條件 項目設置 文章正文
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
你也是敏感肌、或是敏弱肌,平常皮膚容易泛紅或是過敏?或是你是痘痘肌,用了很多產品但都沒有改善嗎? 以下為三個我使用過的胺基酸洗面乳推薦 第一個: BHK's 溫和胺基酸洗面乳 第二個: rill®川 30%日本溫和保濕胺基酸洗面乳 第三個: UNT 氨基酸保濕潔顏霜 總結
Thumbnail
無論您是計劃舉辦生日派對、婚禮、週年紀念、貿易展覽還是公司活動,營造一個優雅而富麗的backdrop印刷對於空間至關重要。仍然不確定是否投資backdrop?您將了解為什麼需要創它的原因以及它如何影響您的場合! 1)提升任何活動的主題和裝飾 2)背景隱藏了場地的不完美之處 3)多種顏色、材料和款式
Thumbnail
自從接案生活以來,我大概有4分之一的案子是從Tasker出任務來的 4分之3是從PRO360達人網來的,我覺得還可以 是因為收入的部份,2個月的收入 也分布差不多。 但接案真的要很努力,才有機會可以增加收入, 比上班更要加倍努力。 二個月我共服務了很多客戶,我覺得兩邊的客戶,讓我的感受不太一樣
房東太太幫我安裝永佳樂後,到現在差不多快三個月左右了吧~ 來分享一下使用的心得XD 其實覺得跟在家用凱擘的感覺差不多,沒什麼太大的問題(我的標準就是能看順暢就好 哈哈) 除了放長假回家以外,幾乎每天都會看電視睡覺,說實在的除了廣告一樣都很多以外,真的沒什麼差XD(凱擘、永佳樂) 想看甚麼都有,早點下
Thumbnail
現在,讓我們再一次看看Apple會不會在Mac上拋棄「過時」的Intel x86系列處理器,而改用自家設計的ARM架構晶片。這個過程聽起來好像很不錯,然而如果在2006年要做很容易,在2021年就不是那麼簡單了。
Thumbnail
以電信公司離網分析 (churn rate)預測為例 既有手動資料分析的挑戰: 電信公司與上千萬個客戶簽約,因此顧客資料量龐大,難以分析 需有專業人員進行複雜的數據建模,導致人力、時間、工具成本昂貴,無法彈性擴展應用 新進人員需要時間訓練,無法快速上手 分析目的:     使用過