【Python】【MACD策略】逐行程式碼教程

閱讀時間約 8 分鐘
  • 文內如有投資理財相關經驗、知識、資訊等內容,皆為創作者個人分享行為。
  • 有價證券、指數與衍生性商品之數據資料,僅供輔助說明之用,不代表創作者投資決策之推介及建議。
  • 閱讀同時,請審慎思考自身條件及自我決策,並應有為決策負責之事前認知。
  • 方格子希望您能從這些分享內容汲取投資養份,養成獨立思考的能力、判斷、行動,成就最適合您的投資理財模式。
Python的語法雖然比起Multicharts跟TradingView,它是比較難的
不過它絕對是值得我們花時間學習的語法!
在金融量化領域
Python是全世界最廣泛被使用的量化交易語法
在其他軟體應用領域
Python依然是非常實用非常具有商業價值的程式語言!
那回到我們的主題
我們依然先來介紹這個MACD策略的原理以及公式
(這部分將直接複製MC跟TV的MACD公式介紹,已經了解的朋友可以直接跳過)

MACD的公式及原理
快線:12根價格指數平均線
慢線:26根價格指數平均線
macd: 快線-慢線
signal: 9根的macd指數平均線
柱狀體:macd-signal
MACD最原始的策略
當柱狀體由負值轉正,我們做多
當柱狀體由正值轉負,我們做空
但隨著時代的演進,MACD的運用早已變幻莫測
但我們今天先以原始型態來做介紹

接著進入我們的主題【Python語法逐行解說】
首先我們先了解這次語法的主體大綱,然後再去深入解析程式碼
第一步,我們利用Python的模組yfinance取得Apple股價的歷史資料
接著我們在用模組pandas整理在yfinance取得的資料
並建立MACD所需的數據
之後再以pandas模組的內建運算方法去做回測
最後算出這個原始的MACD策略在Apple股價上,能獲得多少報酬率!?

import pandas as pd
import yfinance as yf
這段程式碼是載入(import)所需要的Python模組
這個策略,我們需要的模組是pandas和yfinance
import..as..是把模組名稱改成自己方便編寫跟閱讀的簡稱
我們把pandas簡稱pd,yfinance簡稱yf
yoAPL = yf.download('AAPL', period='1mo', interval='1H')
這段程式碼是用yf模組內建的dowload方法取得apple股價的歷史數據
並儲存於我們自己取名的"yoAPL"物件
第一個參數AAPL是apple股票的名稱
第二個參數period是歷史資料的期間,我們取一個月
第三個參數interval是取得K棒期間,我們這個範例取一小時K線
yoAPL['EMA12'] = yoAPL['Close'].ewm(span=12, adjust=False).mean()
yoAPL['EMA26'] = yoAPL['Close'].ewm(span=26, adjust=False).mean()
yoAPL['MACD'] = yoAPL['EMA12'] - yoAPL['EMA26']
yoAPL['Signal'] = yoAPL['MACD'].ewm(span=9, adjust=False).mean()
這一段我們建立MACD數據
這裡我們要先了解,從yf下載下來的歷史資料,它的資料格式就是pandas格式
所以我們可以直接用pandas內建整理資料的方法去做整理運算
第一段以及第二段我們建立12根以及26根的指數平均
yoAPL['EMA12']yoAPL['EMA26']語法是在歷史數據列(column)
增加兩列,分別稱作EMA12以及EMA26
yoAPL['Close'].ewm(span=12, adjust=False).mean()
這段語法是指,我們用每根小時K棒收盤價Close
用內建方法ewm計算指數平均span參數是指往回取12根k棒數據
adjust參數是指,False會給最原始的指數平均公式數據
設定True則會給予"變形"的指數平均公式
這是pandas的貼心變形,它會把指數平均數據"數量"變得跟算數平均"數量"一樣
以方便我們去跟算術平均做比較,這個部分比較複雜
不太了解的朋友可以先有個概念就好!
接著我們讓快線減快線,取得macd值
在用與上述相同的語法計算macd的9根指數平均,計算出signal值
我們的柱狀體則是macd值減去signal值
yoAPL['Position'] = 0
yoAPL.loc[aapl['MACD'] > yoAPL['Signal'],'Position'] = 1
yoAPL.loc[aapl['MACD'] < yoAPL['Signal'],'Position'] = -1
這段程式碼我們依然使用pandas方法新增一列position並預設為0
之後我們利用pandas模組loc方法取得特定位置(location)數據
loc邏輯是先取row(行)在取column(列)
我們先選取macd值大於signal值的行,即柱狀體大於0
將以上這些行的position列由0寫為1
在選取macd值小於signal值的行,即柱狀體小於0將這些position列寫為-1
1即進多單,-1即進空單
(這是一個簡單範例,我們先排除柱狀體為0的情況,剛好這次的示範也沒有0值)
yoAPL['Returns'] = yoAPL['Close'].pct_change() * yoAPL['Position'].shift(1)
print('Total returns:', (yoAPL['Returns'] + 1).cumprod()[-1] )
接著我們依然利用pandas模組新建一個新的列(column)稱Returns
yoAPL['Close'].pct_change()是指
收盤價的百分比變化(percentage change)
yoAPL['Position'].shift(1)則是將進場訊號往後移一個位置
這是由於我們在每一個柱狀體成立訊號的時候,都是會在下一根K棒進場
比如,如果目前這根K棒還沒有跑完,我們就不會知道到底訊號最後會不會成立
所以在目前這根K棒訊號成立之後,我們會在下一根進場
如此一來,我們就計算了每次進場以及持有的報酬
最後,我們用Python語法print()輸出最後結果
第一個參數是我們要打出來的字"Total returns:"
第二個參數則是我們要輸出的最終計算的值
yoAPL['Returns'] + 1).cumprod()[-1]
我們來解釋這個值,將每一個Close的百分比變化+1
比如Returns是0.05就會變成1.05,而Returns是-0.03則會變成0.97
最後我們利用cumprod()函數將所有加1後的Returns值全部相乘
[-1]則是取得最新的相乘數據,即是全部最終相乘的報酬率
這樣我們就成功取得了我們欲計算的回測結果
那,我們就來看一下最後的結果吧!
MACD策略執行結果
Total returns: 0.9904832194015957
這個0.99048..就是我們運用MACD策略去回測蘋果股價的結果
最近一個月的期間,並用小時K棒的運算,得到0.99意即-1%的報酬率

這是一個最基本的Python金融回測範例
Python能為金融量化做的,遠不止如此
之後也將繼續介紹許多Python實用金融量化範例
希望大家能敬請期待!

最後在另外附上這次我們處理的數據資料截圖
這樣能讓各位投資朋友更清楚的瞭解我們在整個策略上的計算過程
MACD策略csv

尚未註冊TrdingView的投資朋友歡迎使用Kevin專屬註冊連結:
享一個月免費試用Premium帳號,到期後可享50%的續約優惠!
(即使不續約,仍可繼續使用TradingView免費版功能)

⭐目前凱龍承接三大項業務,歡迎洽詢:
  1. 金融量化系列|凱龍下單機租用 & TradngView & MultiCharts 程式碼諮詢撰寫
  2. Line官方系列|凱龍Line官方模組租用 & Line官方機器人全系列諮詢架設
  3. 網站SaaS平台|凱龍雲端應用 & 網站SaaS平台諮詢架設
⭐凱龍Line官方:@979qbbfo
⭐凱龍官方網站:https://kevinwtf524.com/
avatar-img
19會員
17內容數
嗨!我是凱龍負責人Kevin - ⭐️凱龍金融量化(期貨程式交易看這裡!) 凱龍下單機 $545起/月 - ⭐️凱龍商城(餐飲業線上訂餐看這裡!) 凱龍訂餐模組 $690/月 - ⭐️專案客製(各類客製專案看這裡!) 金融量化策略撰寫、商家Line@機器人及各類網站客製架設 - ⭐凱龍官方Line:@979qbbfo
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
MACD 指標,原文名稱Moving Average Convergence & Divergence,透過計算一長一短的價格指數移動平均值間的差值,衍生出股票的買賣訊號。 MACD 上有快線、慢線、柱狀圖這三個區塊。 •快線($DIF) = 12 日 EMA – 26 日 EMA •慢線
Thumbnail
這篇文章探討了股票技術分析的基本概念,包括K線圖和移動平均線的定義和用途,以及型態學的應用。此外,文章也介紹了葛蘭碧八大法則的相關內容,並討論了其歷史和潛在侷限性。最後,文章提醒投資者要理解技術分析工具的原理,不依賴單一指標做出投資決策。
Thumbnail
市場上,MACD和RSI是兩種常見的量化交易策略,它們基於不同的技術指標,用於分析股票或其他金融工具的價格走勢,並據此做出決策。
Thumbnail
本文章介紹了股市中常用的技術指標,如相對強弱指標(RSI)、隨機指標(KD)、移動平均線(MA)、動力指標(MTM)、指數平滑異同移動平均線(MACD)、寶塔線。透過這些指標,讓投資者能夠更好地瞭解股票的買賣力道、價格趨勢以及逆勢操作的時機。
這篇文章介紹了多種趨勢指標,包括ADX、布林帶、信封、一目均衡表、移動平均線、拋物線和標準差。透過這些指標可以幫助分析股價趨勢和動向,提供交易建議和潛在投資機會。
在股市投資的世界裡,市場波動既是風險也是機會。許多投資者在面對市場的起伏時感到無所適從,不知道如何做出正確的投資決策。這時,一個有效的策略就成了投資者的秘密武器。今天,我們將深入探討28均線策略,看看它如何成為掌握市場波動的關鍵。 28均線策略簡介 28均線策略是一種基於技術分析的投資方法,
Thumbnail
移動平均線是投資初學者的良好起點,以計算收盤價的平均值為基礎,包括簡單移動平均線(SMA)和指數移動平均線(EMA)等。透過均線互動,可執行進出場策略,操作以日線為基準。風險在於即使無趨勢,仍會操作。建議改進方法是添加趨勢濾網,以提升準確度和報酬率。
Thumbnail
移動平均線(Moving Average,簡稱 MA)是金融技術分析中一種基礎且廣泛使用的工具,透過計算一定時期內的平均價格,以平滑價格數據,從而減少市場波動的隨機性,幫助投資者更清晰地看到價格趨勢。
Thumbnail
MACD指標是一個非常流行的技術指標,可用來分析股價的趨勢和動量。它的選股原則、優點和缺點都需要深入了解,才能充分利用它提供的訊號。如果您是投資人,建議使用MACD指標時搭配其他指標使用,以提高分析的精度和可靠性。
Thumbnail
前陣子被YT演算法推薦了這篇: 點我 大約整理了3個重點: MACD指標本身其實是代表多空強度大小,而非網路上常說的多空訊號。 在一個時間格局中用在小周期較合適。 MACD快線慢線和柱體分離時可以試著作為進場多空訊號。 在這裡先小小科普MACD算法 EMA(n)=(前一日EMA(n) ×
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
MACD 指標,原文名稱Moving Average Convergence & Divergence,透過計算一長一短的價格指數移動平均值間的差值,衍生出股票的買賣訊號。 MACD 上有快線、慢線、柱狀圖這三個區塊。 •快線($DIF) = 12 日 EMA – 26 日 EMA •慢線
Thumbnail
這篇文章探討了股票技術分析的基本概念,包括K線圖和移動平均線的定義和用途,以及型態學的應用。此外,文章也介紹了葛蘭碧八大法則的相關內容,並討論了其歷史和潛在侷限性。最後,文章提醒投資者要理解技術分析工具的原理,不依賴單一指標做出投資決策。
Thumbnail
市場上,MACD和RSI是兩種常見的量化交易策略,它們基於不同的技術指標,用於分析股票或其他金融工具的價格走勢,並據此做出決策。
Thumbnail
本文章介紹了股市中常用的技術指標,如相對強弱指標(RSI)、隨機指標(KD)、移動平均線(MA)、動力指標(MTM)、指數平滑異同移動平均線(MACD)、寶塔線。透過這些指標,讓投資者能夠更好地瞭解股票的買賣力道、價格趨勢以及逆勢操作的時機。
這篇文章介紹了多種趨勢指標,包括ADX、布林帶、信封、一目均衡表、移動平均線、拋物線和標準差。透過這些指標可以幫助分析股價趨勢和動向,提供交易建議和潛在投資機會。
在股市投資的世界裡,市場波動既是風險也是機會。許多投資者在面對市場的起伏時感到無所適從,不知道如何做出正確的投資決策。這時,一個有效的策略就成了投資者的秘密武器。今天,我們將深入探討28均線策略,看看它如何成為掌握市場波動的關鍵。 28均線策略簡介 28均線策略是一種基於技術分析的投資方法,
Thumbnail
移動平均線是投資初學者的良好起點,以計算收盤價的平均值為基礎,包括簡單移動平均線(SMA)和指數移動平均線(EMA)等。透過均線互動,可執行進出場策略,操作以日線為基準。風險在於即使無趨勢,仍會操作。建議改進方法是添加趨勢濾網,以提升準確度和報酬率。
Thumbnail
移動平均線(Moving Average,簡稱 MA)是金融技術分析中一種基礎且廣泛使用的工具,透過計算一定時期內的平均價格,以平滑價格數據,從而減少市場波動的隨機性,幫助投資者更清晰地看到價格趨勢。
Thumbnail
MACD指標是一個非常流行的技術指標,可用來分析股價的趨勢和動量。它的選股原則、優點和缺點都需要深入了解,才能充分利用它提供的訊號。如果您是投資人,建議使用MACD指標時搭配其他指標使用,以提高分析的精度和可靠性。
Thumbnail
前陣子被YT演算法推薦了這篇: 點我 大約整理了3個重點: MACD指標本身其實是代表多空強度大小,而非網路上常說的多空訊號。 在一個時間格局中用在小周期較合適。 MACD快線慢線和柱體分離時可以試著作為進場多空訊號。 在這裡先小小科普MACD算法 EMA(n)=(前一日EMA(n) ×