[量化投資基本功] 什麼是乖離率? 如何在pthon中回測乖離率指標效果?

在財經節目中,常常會聽到乖離過大這麼名詞。究竟什麼是乖離? 乖離指標可靠嗎? 如何在Python裡計算乖離率並進行驗證? 本支影片將帶大家一起認識乖離率!

什麼是乖離率?

從下面公式中,我們可以發現,乖離率所衡量的就是現行股價與均線的差異程度。一般來說,市場投資人對乖離率的用法會假設在股價有一個均數回歸的情況。然而,值得注意的是,當趨勢出來時(大飆股或大跌股),這個方法就會失靈(或是說要容忍相當大的損失)。

$$Bias=\frac{P-MA}{MA}$$

正乖離: 乖離率為正,意即股價>平均線
負乖離: 乖離率為負,意即股價<平均線

一般來說,當乖離率過大,我們會認為股價在不久的將來將會反轉。舉例來說,當負乖離過大,以乖離率觀點而言,隱含著行情在不久的將來即將反彈。然而市場是否真有這樣的現象?就讓我們一起用python來檢視看看吧!

乖離率Python實作

接下來,讓我們看看在Python裡該如何實作乖離率。在這邊,我們簡單用一個case來進行指標的驗證。假設負乖離超過10%,我們進場並持有一個月後的投資報酬會是如何呢?

資料準備

這裡我們可以準備欲投資的標的,檢視乖離率在這些標的上的表現。當然,程式運行前需先引入運算及繪圖套件。

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

data=pd.read_csv('00690.csv')
data.set_index(pd.to_datetime(data['Date'],format='%Y/%m/%d'),inplace=True)
data.drop('Date',axis=1,inplace=True)
data.head()

參數設定

在這邊我們主要有3個參數,分述如下:

1.移動平均(MA): 在技術分析中,季線代表生命線,因此我們這邊會以60日線當作參考。當然各位也可以依照自己的需求選擇合適的移動平均線。

2.乖離率門檻值: 從前面敘述我們知道當乖離”過大”時,在不久的將來股價可能會反轉。然而這個所謂的”過大”到底是多大呢? 在量化投資中,我們一定要給一個明確的指示,在此就是透過門檻值的設定來達成。這邊我們姑且設定為10%,都是可以修改的。

3.持有期間: 同樣的,從前面敘述我們知道當乖離過大時,在”不久的將來”股價可能會反轉,但我們並不知道是否真的會反轉,或是究竟反轉多久。因此,我們可以藉由衡量當我們在乖離過大時進場,持有一段時間後的報酬大概長什麼樣子,來評估指標是否有效。

MA=60
Threshold=-0.15
hold_period=40

進行回測

在這邊,我們可以簡單回測當標的負乖離超過10%時,我們進場買入並持有20天後的投資報酬。同時,我們也可以快速檢視這個個策略出現次數、勝率以及最大損失。詳細過程可參考影片。另外,因為我們早以把重要的參數寫在外面,因此我們可以很方便的修改均線、門檻值及持有天數的數值,用以測試不同情境下該標的的表現。另外,我們亦可以新增或修改條件,看到不同策略下的表現!

df=data.copy()
df['MA']=df['Price'].rolling(MA).mean()
df['Bias']=df['Price']/df['MA']-1
df['temp']=df['Price'].pct_change(hold_period)
df['return']=list(df['temp'].dropna())+[None]*(len(df)-len(df['temp'].dropna()))
df.dropna(inplace=True)
result=df[(df['Bias']<Threshold)]

print('出現次數: ', len(result))
print('平均報酬率: ',result['return'].mean()*100)
print('勝率: ', len(result[result['return']>0])/len(result))
print('最大損失: ',result['return'].min())

今天,我們認識了乖離率,並學會如何在Python中檢驗乖離率指標的有效性!準備你有興趣的標的,動手檢驗看看吧!

程式檔案,歡迎下載Github

Share

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *