這篇文章中,我們將用 pandas 來做一個簡易的加密貨幣交易訊號!
Pandas 是一個資料處理用的 Package,專門用來做資料處理,你可以想像它是 python 裡面的 excel,可以產生並且處理各式各樣的表格!
Pandas 操作介紹
承接著上一篇文章,我們繼續在 google colab 上進行程式的實驗此時的 df
已經是歷史資料:
就是一個 pandas.DataFrame
物件,這個物件就像是 excel 表格一樣,有很多的行跟列,每一個列都可以簡單的呼叫出來。以我們的例子,每一列都是一個時間序列:
df.Close
由上圖可知,每一列也是一種物件,叫做 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()
上圖中,我們將BTCUSDT
的歷史紀錄 與兩條均線畫出來,會發現,時間跨度太大,導致價格跟均線看不清楚,我們可以額外 zoom in 選取「某年」來觀察,可以使用中括號來選取時間範圍:
df.Close['2020'].plot()
sma1['2020'].plot()
sma2['2020'].plot()
假如短週期均線 sma1
超過 長週期 sma2
-> 做多,反之做空。
要怎麼做出這樣的訊號呢?我們可以用不等式來進行!
不等式條件
不等式,就是所謂的「大於等於小於」,我們假如將兩條時間序列做不等式運算,在這兩條時間序列中,每一個元素會被一一拿出來比對,並且產生出新的「布林」時間序列:
condition = sma1 > sma2
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))
你會發現兩者相差一天,所以在做策略時,我會傾向於,將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()
以上這張圖我用 -1 顯示:賣出訊號,而 1 是買進訊號!當我們將 True False 轉換成 int 時,會轉換成「1」跟「0」的數值。
製作策略
然而我們怎麼知道,照著這個交易訊號操作,實際的績效是怎麼樣呢?下一個單元中:回測,會教大家怎麼用 backtesting 這個 package,來實做回測,模擬這個策略的績效,敬請期待!
如果喜歡我們的文章,也歡迎參考我們最新募資的線上課程「用 Python 理財:打造加密貨幣實戰策略」,在線上課程中,我們會更有系統、更完整地教您如何從無到有,打造10種加密貨幣實戰策略,並且能夠自動化雲端交易!有興趣的話,可以點此觀看課程介紹影片喔!