使用TA_lib打造交易策略(TA_lib輕探3)[QuantTradingwithPython_7]

閱讀時間約 11 分鐘
  • 文內如有投資理財相關經驗、知識、資訊等內容,皆為創作者個人分享行為。
  • 有價證券、指數與衍生性商品之數據資料,僅供輔助說明之用,不代表創作者投資決策之推介及建議。
  • 閱讀同時,請審慎思考自身條件及自我決策,並應有為決策負責之事前認知。
  • 方格子希望您能從這些分享內容汲取投資養份,養成獨立思考的能力、判斷、行動,成就最適合您的投資理財模式。


raw-image


使用TA_lib打造一個交易策略實用工具(TA_lib輕探3之趨勢青紅燈)

在上一篇文章當中;我們已經順利的,把股價當中所發現的吞噬K線形態。標示,在圖形當中。對我這個圖形極簡偏執狂來說,已經是在滿意得不得了了。但自己知道,許多朋友們,還是喜歡看到習慣的紅綠色來標示;上漲或下跌的方向。所以在這期的文章當中,就嘗試著來完成這個任務。一樣的;按照國際慣例,先把完成的樣子走起。讓客倌們瞧瞧。就先上個熟悉的三連拍吧!

 

raw-image

 

raw-image

 

raw-image


先來個前期劇情提要。要把從上次文章完結的工作進度,跨越到最篇文章所呈現的內容;事實上,當中有2個重要的問題要解決。第一個是上期中;事實上。我們只用到了向上的箭頭。所以先必須要找到如何設定向下的箭頭?然後第2個才是。標上綠色與紅色箭頭的重點。還是讓我們先來看看原始碼吧?


import yfinance as yf

import talib

import mplfinance as mpf

import pandas as pd

%matplotlib notebook

# 下載TSLA股票的資料

symbol = "TSLA"

data = yf.download(symbol, start="2023-01-01", end="2023-07-10")

# 計算吞噬K線組合

engulfing = talib.CDLENGULFING(data['Open'], data['High'], data['Low'], data['Close'])

data['Engulfing'] = engulfing

# 找出吞噬K線組合的日期

engulfing_dates = data.index[engulfing != 0]

bearish_engulfing_dates = data.index[engulfing == -100]

bullish_engulfing_dates = data.index[engulfing == 100]

# 在吞噬K線組合的日期上標示紅色向上箭頭和綠色向下箭頭

data['UpArrow'] = pd.Series(index=data.index, dtype='float64')

data.loc[bullish_engulfing_dates, 'UpArrow'] = data.loc[bullish_engulfing_dates, 'Low'] - 2

up_apd = mpf.make_addplot(data['UpArrow'], type='scatter', markersize=60, marker='^', panel=0, color='red')

data['DownArrow'] = pd.Series(index=data.index, dtype='float64')

data.loc[bearish_engulfing_dates, 'DownArrow'] = data.loc[bearish_engulfing_dates, 'High'] + 2

down_apd = mpf.make_addplot(data['DownArrow'], type='scatter', markersize=60, marker='v', panel=0, color='green')

# 繪製K線圖和成交量

mpf.plot(data, type='candle', volume=True, title=symbol, ylabel='Price', addplot=[up_apd, down_apd])

# 輸出報表

data.to_csv('report.csv')

接下來讓我佔點篇幅,將程式原始碼再顯示一次。這樣方便讓我們來做分段的解說。

import yfinance as yf

import talib

import mplfinance as mpf

import pandas as pd

%matplotlib notebook

# 下載TSLA"股票的資料

symbol = "TSLA"

data = yf.download(symbol, start="2023-01-01", end="2023-07-10")

# 計算吞噬K線組合

engulfing = talib.CDLENGULFING(data['Open'], data['High'], data['Low'], data['Close'])

data['Engulfing'] = engulfing

# 找出吞噬K線組合的日期

engulfing_dates = data.index[engulfing != 0]

bearish_engulfing_dates = data.index[engulfing == -100]

bullish_engulfing_dates = data.index[engulfing == 100]

raw-image

相信程式碼到這裡,該對大家都不會感到非常的陌生。到目前為止,我們完成了股票代碼設定。以及限定時間長度的資料下載。然後啟動了TaLib,來幫我們篩選出符合條件的股票K線形態。在這裡,仍然選擇目標是吞噬圖形。最後那一段;將篩選出來的結果分類,最終將它區分成三類;分別是不為零的?100。跟--100的部分。並將這3個結果的獲得日期,分別儲存在3個數列當中。有興趣的朋友。可以去看看這3個數列所儲存的內容。

# 在吞噬K線組合的日期上標示紅色向上箭頭和綠色向下箭頭

data['UpArrow'] = pd.Series(index=data.index, dtype='float64')

然後在這裡。我們創建了一個列。UpArrow向上的箭頭列。

data.loc[bullish_engulfing_dates, 'UpArrow'] = data.loc[bullish_engulfing_dates, 'Low'] – 2

然後在這個向上的箭頭列當中,如果當日多頭的吞噬圖形成立。那么我們存入當天最低價減2個價位的位置;這個數據就是未來我們要顯示箭頭的地方。

up_apd = mpf.make_addplot(data['UpArrow'], type='scatter', markersize=60, marker='^', panel=1, color='red')

這一段我們新增一個畫布"addplot"。提供我們繪圖參數便是向上箭頭的數據那一列。然後它顯示出來的形態是一種點狀圖"Scatter"。我們給它的大小設定,參數為60。顯示一個向上的箭頭。這次新增了一個參數,顏色color。我們將它設定。為紅色red。這便是紅色像張箭頭的設定部分。這裡有一箇。重要的就是panel。在這個例子當中,整個K線的顯示部分,它就是panel0;也就是主畫布。而顯示成交量的部分,便是panel1;它是一個Subplot。我稱它為子畫布。在這裡必須特別的來解說一下;我們的整個畫布在設定之後,並不是只能單獨的顯示。某一個圖形。它是一個層層堆疊上去的狀態Overlay。就好像我們可以在這個組畫布上面先畫上K線,然後可以再堆疊上去移動平均線。所以目前有2個畫布;一個是編號0的主畫布。與成交量的編號1子畫布。在程式語言的圈圈裡,一般大部分都是從零開始起算。

有興趣的朋友,可以嘗試將程式段裡面。顯示向上與向下箭頭的panel設定為。1或2。

up_apd = mpf.make_addplot(data['UpArrow'], type='scatter', markersize=60, marker='^', panel=1, color='red')

down_apd = mpf.make_addplot(data['DownArrow'], type='scatter', markersize=60, marker='v', panel=2, color='green')

那么我們的箭頭便不是顯示在主畫面上;應該會得到下面這樣的結果。在這裡就可以看到畫布編號,所佔的位置是哪些部分?


raw-image


data['DownArrow'] = pd.Series(index=data.index, dtype='float64')

data.loc[bearish_engulfing_dates, 'DownArrow'] = data.loc[bearish_engulfing_dates, 'High'] + 2

down_apd = mpf.make_addplot(data['DownArrow'], type='scatter', markersize=60, marker='v', panel=2, color='green')

這一段與上一段。剛好是完全相反的。也就是我們所要的顯示綠色箭頭向下的設定部分。首先把這個將來要標識的綠色向下箭頭,顯示在形態發生當日最高價格。往上2個價位部分。其它就跟紅色箭頭設定的都大同小異。現在終於知道了如何解決顯示兩種箭頭的方法。那就是不用花俏的方法,直接用新建立另一列數據的方式,來儲存這些資料。所以透過剛才所談的堆疊方式;未來在panel0上面,就是顯示K線向上箭頭與向下箭頭三種一起堆疊呈現。

# 繪製K線圖和成交量

mpf.plot(data, type='candle', volume=True, title=symbol, ylabel='Price', addplot=[up_apd, down_apd])

# 輸出報表

data.to_csv('report.csv')

後面這一部分。就是把我們所有的設定結果顯示在螢幕上。增加的只是最後一行;呼喚一個pandas的功能,將我們的篩選結果輸出為一個CSV的檔案。方便日後隨時可以調閱。


raw-image

在這篇文章當中。我們建立了許多的資料框以及數列。其中最重要的一個便是存放了絕大部分數據的data數據框Dataframe。這個也是我們輸出報表的內容。它的結構大概長了這個樣子。

 

raw-image


你也可以使用以下的指令來開啟這個檔案,並閱讀它。

rep = pd.read_csv('report.csv')

記得要先 import pandas as pd 喔!

那么今天就先討論到這裡。真摯的的謝謝您熱情的這一路以來的參與。並歡迎加入互動討論。祝您交易順利。早安,午安晚安。


raw-image



avatar-img
7會員
19內容數
一個專為金融專業設計的專題。介紹量化交易的基本概念和使用Python進行量化交易策略開發的方法。專題涵蓋金融市場運作、技術分析,實例和代碼提供,幫助理解和應用不同的交易策略和指標。此外,介紹了回測工具的使用和風險管理技巧。本專題為對量化交易有興趣的讀者提供了全面的學習指南。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Parkson Dow的沙龍 的其他內容
在上一期文章中。我們使用TA_lib套件。來協助我們尋找隱藏在股票價格當中的特殊K線形態並把它尋找到的結果輸出到一個表格當中。雖然結果是以100。以及-100的簡明方式來呈現;
剛剛我們完成了第一個所需要的工具,用來顯示觀察的K線圖形。今天要進入一個全新的項目。既然我們已經將資料能夠順利的下載到本地端,便需要好好的來利用它。利用它來建立,所關注的股票池。
本來模組化這件事;打算在我們完成股票池工作之後再來談的。沒想到這幾天,已經有一些朋友反應;大概因為端午節的關係,提前磕了太多粽子,導致有點消化不良。所以左思右想之後,決定提前先上一下模組化的部分。目的在於簡化工作。我們討論系列文章的目的,或許跟大家介紹許多一般比較少用的Python套件、、
首先。先跟大家說一個令人振奮的消息。在這一篇文章當中。我們終於即將完成K線圖形顯示程式。這個未來會常常使用的小工具完工啦!就說興不興奮,高不高興。這段時間總算沒有白費;我們真的給鼓搗出了一些東西,這下子應該不只可以面對家鄉的父老了;都有一種榮歸故里的感覺。
嗨又見面了!接下來就繼續下去我們的程式互動之旅之旅.相信應該沒有人會以為我們用一個簡單的input,就交代了想要的互動功能.在這一篇當中將帶領大家,真正的體會,炫酷又好玩的Jupyter notebook互動功能.將程式介面提升到一個讓自己愛不釋手的檔次。
 大家好。很高興在這個新的部落格上面。有機會能再跟大家一起討論交易的兩三事。未來我們將在這個新的地方上面;與大家一步一步地,建立起屬於我們自己個性化的量化交易平臺;敬請期待。
在上一期文章中。我們使用TA_lib套件。來協助我們尋找隱藏在股票價格當中的特殊K線形態並把它尋找到的結果輸出到一個表格當中。雖然結果是以100。以及-100的簡明方式來呈現;
剛剛我們完成了第一個所需要的工具,用來顯示觀察的K線圖形。今天要進入一個全新的項目。既然我們已經將資料能夠順利的下載到本地端,便需要好好的來利用它。利用它來建立,所關注的股票池。
本來模組化這件事;打算在我們完成股票池工作之後再來談的。沒想到這幾天,已經有一些朋友反應;大概因為端午節的關係,提前磕了太多粽子,導致有點消化不良。所以左思右想之後,決定提前先上一下模組化的部分。目的在於簡化工作。我們討論系列文章的目的,或許跟大家介紹許多一般比較少用的Python套件、、
首先。先跟大家說一個令人振奮的消息。在這一篇文章當中。我們終於即將完成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
AI的輔助工具對於工作效率的提升有著深遠的影響。 然而,隨著AI在職場中的使用變得越來越普遍,相對的,因此產生的職場糾紛也愈發頻繁。有時候,我們不得不依賴法律的力量,以確保公平且有序的工作環境。 使用AI協助工作時,這是避免職場糾紛的3大策略: 策略1 - AI的生成結果還需人類把關:在使用AI協助
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
Obsidian真的徹底改變了我與知識互動的方式 Obsidian鼓勵的卡片筆記,讓我將知識可以分割成小小塊的卡片,又保留卡片之間的連結。 小塊卡片將知識細化,變得很容易消化,讓我即使只有1分鐘也能思考一些東西。 在Obsidian實踐了22個月的知識細化卡片筆記法, 底層原理1 - 更靈活交替「碎
Thumbnail
提詞自由寫作(Prompted Freewriting) 是一種創新的寫作方法,以模板和提示來引導我們展開想像,激發寫作創意! 嘗試提詞自由寫作4個月後,我獲得了以下3大收穫: 收穫1 - 快速點燃內心的想像力:透過自己寫過的筆記、發表的文章,以及欣賞他人的佳作,作為寫作的提示,讓我在寫作過程中不斷
Thumbnail
Obsidian的強大連結筆記功能,不僅改變了我的知識管理方式,同時也重新塑造了我對寫作過程的理解。 在使用Obsidian的過程中,我漸漸體會到寫作過程中的三個重要層面,它們分別是: 體悟1 - 預寫階段:跨越觀點的融合:透過Obsidian的連結筆記,我能深入了解他人觀點,並將其納入我的文章框架
Thumbnail
「啊,我想到…..」 你是不是常常有很多念頭,但沒有記錄下來,就不見了? 我從16年前,高中的時候,就從書上認識到「紀錄的重要性」。 紀錄不但幫我們整理思緒,累積經驗,更能成為寫作的素材! 下面三個工具,是我這16年來持續實驗,目前認為最棒最棒的三個靈感捕捉器
Thumbnail
Obsidian是我用過最好用的個人知識管理軟體。 Obsidian跟其他PKM軟體比起來,「連結筆記」的能力非常的強。 而Obsidian這種強調筆記連結的軟體天性,在過去22個月裡面,重新定義了我與知識互動的方式。 在這22個月與Obsidian 朝日相處的經驗裡,這是幫助我成為一個更好的知識工
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
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
AI的輔助工具對於工作效率的提升有著深遠的影響。 然而,隨著AI在職場中的使用變得越來越普遍,相對的,因此產生的職場糾紛也愈發頻繁。有時候,我們不得不依賴法律的力量,以確保公平且有序的工作環境。 使用AI協助工作時,這是避免職場糾紛的3大策略: 策略1 - AI的生成結果還需人類把關:在使用AI協助
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
Obsidian真的徹底改變了我與知識互動的方式 Obsidian鼓勵的卡片筆記,讓我將知識可以分割成小小塊的卡片,又保留卡片之間的連結。 小塊卡片將知識細化,變得很容易消化,讓我即使只有1分鐘也能思考一些東西。 在Obsidian實踐了22個月的知識細化卡片筆記法, 底層原理1 - 更靈活交替「碎
Thumbnail
提詞自由寫作(Prompted Freewriting) 是一種創新的寫作方法,以模板和提示來引導我們展開想像,激發寫作創意! 嘗試提詞自由寫作4個月後,我獲得了以下3大收穫: 收穫1 - 快速點燃內心的想像力:透過自己寫過的筆記、發表的文章,以及欣賞他人的佳作,作為寫作的提示,讓我在寫作過程中不斷
Thumbnail
Obsidian的強大連結筆記功能,不僅改變了我的知識管理方式,同時也重新塑造了我對寫作過程的理解。 在使用Obsidian的過程中,我漸漸體會到寫作過程中的三個重要層面,它們分別是: 體悟1 - 預寫階段:跨越觀點的融合:透過Obsidian的連結筆記,我能深入了解他人觀點,並將其納入我的文章框架
Thumbnail
「啊,我想到…..」 你是不是常常有很多念頭,但沒有記錄下來,就不見了? 我從16年前,高中的時候,就從書上認識到「紀錄的重要性」。 紀錄不但幫我們整理思緒,累積經驗,更能成為寫作的素材! 下面三個工具,是我這16年來持續實驗,目前認為最棒最棒的三個靈感捕捉器
Thumbnail
Obsidian是我用過最好用的個人知識管理軟體。 Obsidian跟其他PKM軟體比起來,「連結筆記」的能力非常的強。 而Obsidian這種強調筆記連結的軟體天性,在過去22個月裡面,重新定義了我與知識互動的方式。 在這22個月與Obsidian 朝日相處的經驗裡,這是幫助我成為一個更好的知識工
Thumbnail
長時間接觸3C產品有逐漸年輕化及普遍化的趨勢,3C產品所帶來的健康危害,是不容忽視的課題。過度近距離長時間使用3C產品,眼睛不自覺用力,易導致眼軸拉長及近視度數快速加深,嚴重時會導致黃斑部傷害,增加視網膜剝離及失明的風險!
Thumbnail
以電信公司離網分析 (churn rate)預測為例 既有手動資料分析的挑戰: 電信公司與上千萬個客戶簽約,因此顧客資料量龐大,難以分析 需有專業人員進行複雜的數據建模,導致人力、時間、工具成本昂貴,無法彈性擴展應用 新進人員需要時間訓練,無法快速上手 分析目的:     使用過