使用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



7會員
19內容數
一個專為金融專業設計的專題。介紹量化交易的基本概念和使用Python進行量化交易策略開發的方法。專題涵蓋金融市場運作、技術分析,實例和代碼提供,幫助理解和應用不同的交易策略和指標。此外,介紹了回測工具的使用和風險管理技巧。本專題為對量化交易有興趣的讀者提供了全面的學習指南。
留言0
查看全部
發表第一個留言支持創作者!
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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
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)預測為例 既有手動資料分析的挑戰: 電信公司與上千萬個客戶簽約,因此顧客資料量龐大,難以分析 需有專業人員進行複雜的數據建模,導致人力、時間、工具成本昂貴,無法彈性擴展應用 新進人員需要時間訓練,無法快速上手 分析目的:     使用過