美文网首页
pair trading(cointegration), 202

pair trading(cointegration), 202

作者: Mc杰夫 | 来源:发表于2022-09-01 12:40 被阅读0次

    (2022.09.02 Fri)
    pair trading可以使用多种方法实现交易,包括

    • 最小化偏差平方和法则(最小距离法)(Gatev,Goetzmann ,Rouwenhorst(1999))
    • 协整理论方法(Vidyamurthy(2004))
    • 随机价差模型方法(Elliott,Van Der Hoek,Malcolm(2005))

    这里列举整理了协整的方法。

    Co-integration

    首先了解平稳性。

    平稳性(stationarity)是一个序列在时间推移中保持稳定不变的性质,也就是它的均值和方差保持不变,这样可以方便地在序列上应用一些统计技术。

    一个平稳的序列是围绕着一个长期均值在波动的序列,非平稳序列的长期均值是变动的。

    举一个应用的例子,如果某个资产的价格序列(或者两个序列的价差)是平稳的,那么当它在偏离了其均值后,人们可以期待价格会在未来的某一个时间回归这个均值。我们可以借助这个性质进行投资从而获利。假设一只股票的长期均值是9元,而现在的价值是8元。如果经过检验,我们认为这个股票的历史序列具有平稳的性质,并且假设这个平稳性是能保持的,就可以买入这只股票,等待未来它的价格回归9元,从而获得1元的利润。

    现实中,绝大多数的股票价格都是非平稳的。想利用平稳特性获利就需要协整关系(cointegration)。如果两组序列是非平稳的,但它们的线性组合可以得到一个平稳序列,则这两组时间序列数据具有协整性,我们同样可以把统计性质用到这个组合的序列上来。之所以会出现价差平稳的特性,是因为某些金融时间序列受到了共同经济因素影响,表现出趋同性。

    需要注意,协整关系并不是相关关系(correlation)。

    举个例子,两组时间序列数据(股价)未必是平稳的,但它们的价差(线性组合)可能是平稳的,则我们可以根据这个差的平稳性进行投资获利:当两只股票的价差过大,根据平稳性我们预期价差会收敛,因此买入低价的股票,卖空高价的股票,等待价格回归的时候进行反向操作从而获利。

    平稳性检验

    (就是取两个标的,然后相关性检验->序列单整检验->同阶单整的进行协整检验->取相关性系数、均值和标准差计算两只标的目前的价差值->价差值符合开仓平仓条件的,做相应操作。)

    平稳性可以分为严平稳(strictly stationary)和弱平稳(或叫协方差平稳,covariance stationary等)两种。严平稳是指一个序列始终具有不变的分布函数,而弱平稳则是指具序列有不变的常量的描述性统计量。严平稳和弱平稳性质互不包含;但如果一个严平稳序列的方差是有限的,那么它是弱平稳的。我们一般所说的平稳都是指弱平稳。在时间序列分析中,通常通过单位根检验(unit root test)来判断一个过程是否是弱平稳。平稳的时间序列应该会在某固定值附近随机震荡,该现象称为均值回归(mean-reversion)。

    一个常见的单位根检验方法是Dickey-Fuller test,大致思路如下:假设被检测的时间序列Y_t满足自回归模型Y_t=αY_t−1+ε_tY_t=αY_t−1+ε_t,其中α为回归系数,ε_t为噪声的随机变量。若经过检验,发现α<1,则可以肯定序列是平稳的。在Dickey Fuller Test的基础上,还有衍生出来的augmented Dickey-Fuller test,考虑了序列的滞后性。

    ADF检测平稳性代码。

    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值越小,协整关系越强。

    from statsmodels.tsa.stattools import coint 
    _, pvalue, _ = coint(timesequence1, timesequence2) 
    

    实例

    import numpy as np
    import pandas as pd
    import seaborn
    import statsmodels
    import matplotlib.pyplot as plt
    from statsmodels.tsa.stattools import coint
    

    构造两组数据,每组数据长度为100。第一组数据为100加一个向下趋势项再加一个标准正态分布。第二组数据在第一组数据的基础上加30,再加一个额外的标准正态分布。有:
    X_t=100+γ_t+ε_t
    Y_t=X_t+30+μ_t
    其中γ_t为趋势项,ε_tμ_t为无相关性的正态随机变量。

    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"]);
    
    price trend

    价格走势不稳定,但是其价差稳定,如图

    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"]);
    
    pair trading: price gap

    一个可能的交易策略,在不允许做空的市场中
    当价差序列为mean + \sigma时:卖高价,买低价。
    当价差序列为mean - \sigma时:买高价,卖低价。

    其中\sigma的系数可适当调整。

    Reference

    1 【量化课堂】协整的直观认识,聚宽
    2 配对交易,倔强的小DB,知乎
    3 量化策略原理:基于协整理论的配对交易,苏什么来着,知乎

    相关文章

      网友评论

          本文标题:pair trading(cointegration), 202

          本文链接:https://www.haomeiwen.com/subject/sowenrtx.html