用Python投資加密貨幣:交易策略訊號實做 (Part 3)

這篇文章中,我們將用 pandas 來做一個簡易的加密貨幣交易訊號!

Pandas 是一個資料處理用的 Package,專門用來做資料處理,你可以想像它是 python 裡面的 excel,可以產生並且處理各式各樣的表格!

Pandas 操作介紹

承接著上一篇文章,我們繼續在 google colab 上進行程式的實驗此時的 df 已經是歷史資料:

df 1 1

就是一個 pandas.DataFrame 物件,這個物件就像是 excel 表格一樣,有很多的行跟列,每一個列都可以簡單的呼叫出來。以我們的例子,每一列都是一個時間序列:

df.Close
series 1

由上圖可知,每一列也是一種物件,叫做 pd.Series,這種物件,就是一條序列,可以想像是excel的單一一列的意思。

製作簡易的加密貨幣均線策略

pd.Series有很多特別的功能,例如計算移動窗格,我們可以用:
pd.Series.rolling()
來產生移動窗格,並且用:
pd.Series.rolling().mean()
來產生這個移動窗格的平均數,從時間序列的角度,這個就是「均線」!

sma1 = df.Close.rolling(20).mean()
sma2 = df.Close.rolling(60).mean()

df.Close.plot()
sma1.plot()
sma2.plot()
sma plot

上圖中,我們將BTCUSDT的歷史紀錄 與兩條均線畫出來,會發現,時間跨度太大,導致價格跟均線看不清楚,我們可以額外 zoom in 選取「某年」來觀察,可以使用中括號來選取時間範圍:

df.Close['2020'].plot()
sma1['2020'].plot()
sma2['2020'].plot()
sma plot2019

接下來,我們來設計交易訊號,我們希望做一個簡單的均線策略:

假如短週期均線 sma1 超過 長週期 sma2 -> 做多,反之做空。

要怎麼做出這樣的訊號呢?我們可以用不等式來進行!

不等式條件

不等式,就是所謂的「大於等於小於」,我們假如將兩條時間序列做不等式運算,在這兩條時間序列中,每一個元素會被一一拿出來比對,並且產生出新的「布林」時間序列:

condition = sma1 > sma2
condition
condition

上圖中就是布林時間序列,每個時間點對映到「Ture」或是「False」,假如今天條件成立,也就是「sma1 > sma2」的話,該時間點對映到的就會是 True,反之則是 False。

因為我們是均線突破策略,要怎麼結合不等式,來產生均線突破條件呢?我們還需要:pd.Series.shift,這個功能。

調用「昨天」的價格 pd.Series.shift

pd.Series.shift是一個好用的function,可以將時間序列全部都往後延遲一天,例如以下的例子:

print(df.Close)
print(df.Close.shift(1))
shift

你會發現兩者相差一天,所以在做策略時,我會傾向於,將pd.Series.shift(n),當作是「n個時間單位前的價格」,這邊我們用的是 ‘4h’ 4小時的歷史價格,所以pd.Series.shift(1),就是4小時前,而pd.Series.shift(2),就是8小時前,以此類推。

假如我們只使用:pd.Series.shift(),n 不設定參數的話,pandas 會預設 n=1 喔!

結合上述的範例,產生策略訊號

我們希望的做出來的邏輯:
做多: 當(今天短週期均線 > 今天長週期均線) 且 (昨天短週期均線 < 昨天長週期均線)
做空: 當(今天短週期均線 < 今天長週期均線) 且 (昨天短週期均線 > 昨天長週期均線)

我們可以將上述中文,對映到以下的程式碼:

signal_long = (sma1 > sma2) & (sma1.shift() < sma2.shift())
signal_short = (sma1 < sma2) & (sma1.shift() > sma2.shift())

上述程式碼中的 & 就是「且」的意思。

我們可以將訊號繪製出來:

signal_long.astype(int).plot()
(-signal_short.astype(int)).plot()
signal

以上這張圖我用 -1 顯示:賣出訊號,而 1 是買進訊號!當我們將 True False 轉換成 int 時,會轉換成「1」跟「0」的數值。

製作策略

然而我們怎麼知道,照著這個交易訊號操作,實際的績效是怎麼樣呢?下一個單元中:回測,會教大家怎麼用 backtesting 這個 package,來實做回測,模擬這個策略的績效,敬請期待!

如果喜歡我們的文章,也歡迎參考我們最新募資的線上課程「用 Python 理財:打造加密貨幣實戰策略」,在線上課程中,我們會更有系統、更完整地教您如何從無到有,打造10種加密貨幣實戰策略,並且能夠自動化雲端交易!有興趣的話,可以點此觀看課程介紹影片喔!

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!