(2022.09.02 Fri)
pair trading可以使用多種方法實(shí)現(xiàn)交易驱富,包括
- 最小化偏差平方和法則(最小距離法)(Gatev,Goetzmann ,Rouwenhorst(1999))
- 協(xié)整理論方法(Vidyamurthy(2004))
- 隨機(jī)價(jià)差模型方法(Elliott,Van Der Hoek,Malcolm(2005))
這里列舉整理了協(xié)整的方法屏箍。
Co-integration
首先了解平穩(wěn)性绘梦。
平穩(wěn)性(stationarity)是一個(gè)序列在時(shí)間推移中保持穩(wěn)定不變的性質(zhì),也就是它的均值和方差保持不變铣除,這樣可以方便地在序列上應(yīng)用一些統(tǒng)計(jì)技術(shù)谚咬。
一個(gè)平穩(wěn)的序列是圍繞著一個(gè)長期均值在波動(dòng)的序列,非平穩(wěn)序列的長期均值是變動(dòng)的尚粘。
舉一個(gè)應(yīng)用的例子择卦,如果某個(gè)資產(chǎn)的價(jià)格序列(或者兩個(gè)序列的價(jià)差)是平穩(wěn)的,那么當(dāng)它在偏離了其均值后郎嫁,人們可以期待價(jià)格會(huì)在未來的某一個(gè)時(shí)間回歸這個(gè)均值秉继。我們可以借助這個(gè)性質(zhì)進(jìn)行投資從而獲利。假設(shè)一只股票的長期均值是9元泽铛,而現(xiàn)在的價(jià)值是8元尚辑。如果經(jīng)過檢驗(yàn),我們認(rèn)為這個(gè)股票的歷史序列具有平穩(wěn)的性質(zhì)盔腔,并且假設(shè)這個(gè)平穩(wěn)性是能保持的杠茬,就可以買入這只股票,等待未來它的價(jià)格回歸9元弛随,從而獲得1元的利潤瓢喉。
現(xiàn)實(shí)中,絕大多數(shù)的股票價(jià)格都是非平穩(wěn)的舀透。想利用平穩(wěn)特性獲利就需要協(xié)整關(guān)系(cointegration)栓票。如果兩組序列是非平穩(wěn)的,但它們的線性組合可以得到一個(gè)平穩(wěn)序列愕够,則這兩組時(shí)間序列數(shù)據(jù)具有協(xié)整性走贪,我們同樣可以把統(tǒng)計(jì)性質(zhì)用到這個(gè)組合的序列上來。之所以會(huì)出現(xiàn)價(jià)差平穩(wěn)的特性惑芭,是因?yàn)槟承┙鹑跁r(shí)間序列受到了共同經(jīng)濟(jì)因素影響坠狡,表現(xiàn)出趨同性。
需要注意强衡,協(xié)整關(guān)系并不是相關(guān)關(guān)系(correlation)擦秽。
舉個(gè)例子,兩組時(shí)間序列數(shù)據(jù)(股價(jià))未必是平穩(wěn)的漩勤,但它們的價(jià)差(線性組合)可能是平穩(wěn)的,則我們可以根據(jù)這個(gè)差的平穩(wěn)性進(jìn)行投資獲利:當(dāng)兩只股票的價(jià)差過大缩搅,根據(jù)平穩(wěn)性我們預(yù)期價(jià)差會(huì)收斂越败,因此買入低價(jià)的股票,賣空高價(jià)的股票硼瓣,等待價(jià)格回歸的時(shí)候進(jìn)行反向操作從而獲利究飞。
平穩(wěn)性檢驗(yàn)
(就是取兩個(gè)標(biāo)的置谦,然后相關(guān)性檢驗(yàn)->序列單整檢驗(yàn)->同階單整的進(jìn)行協(xié)整檢驗(yàn)->取相關(guān)性系數(shù)、均值和標(biāo)準(zhǔn)差計(jì)算兩只標(biāo)的目前的價(jià)差值->價(jià)差值符合開倉平倉條件的亿傅,做相應(yīng)操作媒峡。)
平穩(wěn)性可以分為嚴(yán)平穩(wěn)(strictly stationary)和弱平穩(wěn)(或叫協(xié)方差平穩(wěn),covariance stationary等)兩種葵擎。嚴(yán)平穩(wěn)是指一個(gè)序列始終具有不變的分布函數(shù)谅阿,而弱平穩(wěn)則是指具序列有不變的常量的描述性統(tǒng)計(jì)量。嚴(yán)平穩(wěn)和弱平穩(wěn)性質(zhì)互不包含酬滤;但如果一個(gè)嚴(yán)平穩(wěn)序列的方差是有限的签餐,那么它是弱平穩(wěn)的。我們一般所說的平穩(wěn)都是指弱平穩(wěn)盯串。在時(shí)間序列分析中氯檐,通常通過單位根檢驗(yàn)(unit root test)來判斷一個(gè)過程是否是弱平穩(wěn)。平穩(wěn)的時(shí)間序列應(yīng)該會(huì)在某固定值附近隨機(jī)震蕩体捏,該現(xiàn)象稱為均值回歸(mean-reversion)冠摄。
一個(gè)常見的單位根檢驗(yàn)方法是Dickey-Fuller test,大致思路如下:假設(shè)被檢測的時(shí)間序列滿足自回歸模型
几缭,其中α為回歸系數(shù)河泳,
為噪聲的隨機(jī)變量。若經(jīng)過檢驗(yàn)奏司,發(fā)現(xiàn)
乔询,則可以肯定序列是平穩(wěn)的。在Dickey Fuller Test的基礎(chǔ)上韵洋,還有衍生出來的augmented Dickey-Fuller test竿刁,考慮了序列的滯后性。
ADF檢測平穩(wěn)性代碼搪缨。
from statsmodels.tsa.stattools import adfuller
import numpy as np
import pandas as pd
adf_test = adfuller(timesequence, autolag='AIC')
adf_test_output = pd.Series(dftest[0:4],index=['Test Statistic','p-value','#Lags Used','Number of Observations Used'])
for key,value in adf_test[4].items():
adf_test_output['Critical Value (%s)' % key] = value
print(adf_test_output)
這里的p值越小食拜,協(xié)整關(guān)系越強(qiáng)。
from statsmodels.tsa.stattools import coint
_, pvalue, _ = coint(timesequence1, timesequence2)
實(shí)例
import numpy as np
import pandas as pd
import seaborn
import statsmodels
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import coint
構(gòu)造兩組數(shù)據(jù)副编,每組數(shù)據(jù)長度為100负甸。第一組數(shù)據(jù)為100加一個(gè)向下趨勢項(xiàng)再加一個(gè)標(biāo)準(zhǔn)正態(tài)分布。第二組數(shù)據(jù)在第一組數(shù)據(jù)的基礎(chǔ)上加30痹届,再加一個(gè)額外的標(biāo)準(zhǔn)正態(tài)分布呻待。有:
其中為趨勢項(xiàng),
和
為無相關(guān)性的正態(tài)隨機(jī)變量队腐。
np.random.seed(100)
x = np.random.normal(0, 1, 500)
y = np.random.normal(0, 1, 500)
X = pd.Series(np.cumsum(x)) + 50
Y = X + y + 10
for i in range(500):
X[i] = X[i] - i/10
Y[i] = Y[i] - i/10
plt.plot(X); plt.plot(Y);
plt.grid(1)
plt.xlabel("Time"); plt.ylabel("Price");
plt.legend(["X", "Y"]);
價(jià)格走勢不穩(wěn)定蚕捉,但是其價(jià)差穩(wěn)定,如圖
plt.plot(Y-X);
plt.axhline((Y-X).mean(), color="red", linestyle="--");
plt.grid(1)
plt.xlabel("Time"); plt.ylabel("Price");
plt.legend(["Y-X", "Mean"]);
一個(gè)可能的交易策略柴淘,在不允許做空的市場中
當(dāng)價(jià)差序列為時(shí):賣高價(jià)迫淹,買低價(jià)秘通。
當(dāng)價(jià)差序列為時(shí):買高價(jià),賣低價(jià)敛熬。
其中的系數(shù)可適當(dāng)調(diào)整肺稀。
Reference
1 【量化課堂】協(xié)整的直觀認(rèn)識(shí),聚寬
2 配對(duì)交易应民,倔強(qiáng)的小DB话原,知乎
3 量化策略原理:基于協(xié)整理論的配對(duì)交易,蘇什么來著瑞妇,知乎