(三十)股指期货的交叉套保

计算最优套保比率

  交叉套保是指期货合约的标的资产与被套保资产不一致,比如某公司配置了上证180指数ETF基金,但是市场上没有上证180指数的期货合约,该公司只能选择沪深300指数期货、上证50指数期货或中证500指数期货来套保。

  最优套保比率也称为最小方差套保比率,记为h*,表示被套保资产价格变化一个单位需要多少份期货合约来对冲。构建线性方程∆S=α+h*×∆F+ε,其中∆S和∆F分别表示在套保期间内,被套保资产价格的变化和用于套保的期货价格变化。很多时候∆S和∆F用各自的日收益率数据来代替。根据线性回归的计算式可得h*=ρσsF=∆S/∆F,过程类似于求CAPM的β系数。

  假设某一基金公司配置了上证180指数ETF基金,该公司只能选择沪深300指数期货IF1812合约、上证50指数期货IH1812合约或中证500指数期货IC1812合约来套保,这三个合约的挂牌日均是2018年4月23日,最后交易日均是2018年12月21日,根据最优套保比率选择最合适的合约。

  step1:读入上证180指数ETF基金净值和三个期货合约结算价数据:

import numpy as np
import pandas as pd
data=pd.read_excel('C:/lenovo/Desktop/上证180ETF与期货合约.xlsx',index_col=0)
data.head()
Out[1]: 
            上证180ETF  IF1812  IC1812  IH1812
交易日期                                        
2018-04-23     3.218  3669.4  5524.0  2614.2
2018-04-24     3.278  3753.0  5681.8  2687.8
2018-04-25     3.261  3743.6  5677.4  2670.0
2018-04-26     3.216  3672.6  5598.8  2628.2
2018-04-27     3.217  3686.8  5612.6  2626.2

  step2:生成各自的日对数收益率序列:

SHre=np.log(data.iloc[:,0]/data.iloc[:,0].shift(1)).dropna()
IFre=np.log(data.iloc[:,1]/data.iloc[:,1].shift(1)).dropna()
ICre=np.log(data.iloc[:,2]/data.iloc[:,2].shift(1)).dropna()
IHre=np.log(data.iloc[:,3]/data.iloc[:,3].shift(1)).dropna()

  step3:以这三种期货合约的对数收益率数据作为自变量,上证180指数ETF对数收益率为因变量分别进行回归:

import statsmodels.api as sm
IF=sm.add_constant(IFre)
IC=sm.add_constant(ICre)
IH=sm.add_constant(IHre)
model1=sm.OLS(SHre,IF).fit()
model1.summary()
Out[3]: 
<class 'statsmodels.iolib.summary.Summary'>
"""
                            OLS Regression Results                            
==============================================================================
Dep. Variable:               上证180ETF   R-squared:                     0.946
Model:                            OLS   Adj. R-squared:                  0.946
Method:                 Least Squares   F-statistic:                     2854.
Date:                Fri, 14 Feb 2020   Prob (F-statistic):          3.31e-105
Time:                        17:35:06   Log-Likelihood:                 715.08
No. Observations:                 165   AIC:                            -1426.
Df Residuals:                     163   BIC:                            -1420.
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.0002      0.000      0.628      0.531      -0.000       0.001
IF1812         0.8735      0.016     53.419      0.000       0.841       0.906
==============================================================================
Omnibus:                        1.256   Durbin-Watson:                   2.687
Prob(Omnibus):                  0.534   Jarque-Bera (JB):                0.866
Skew:                           0.114   Prob(JB):                        0.648
Kurtosis:                       3.271   Cond. No.                         65.8
==============================================================================

  同理可得另外两种期货的线性回归模型结果,可决系数R2分别为0.72和0.929,最优套保比率分别为0.6657和0.922。若以R2最高的模型作为最优选择,那么IF1812合约作为套套保合约最合适,R2达到了0.946,最优套保比率为0.8735。可画图看一下拟合效果:

import matplotlib.pyplot as plt
plt.plot(IFre,model1.params[0]+model1.params[1]*IFre,'r-')
plt.scatter(IFre,SHre,marker='o')
plt.xlabel('IF1812')
plt.ylabel('SH180ETF')

在这里插入图片描述

套保最优期货合约数

  接下来计算套期保值者需要多少数量的期货合约进行套保操作。假设QS表示被套保的资产数量,QF表示一份期货合约的规模,N* 表示用于套保的最优期货合约份数,那么有N* ×QF×∆F=QS×∆S,代入h*=∆S/∆F得N*=h*QS/QF

  接上例,假定该基金公司在2018年12月28日按照收盘净值2.768元买入上证180指数ETF一亿元,同时用沪深300期货IF1901合约空头头寸(当日结算价为3003.6元)来套保,假定最优套保比率不变,求最优期货合约份数:

def n(h,qs,qf):
	return h*qs/qf
n(model1.params[1],100000000,3003.6*300)
Out[6]: 96.9344687900856

  因此要卖出IF1901合约97份。

套保组合的动态盈亏

  接上例,假定在套保完成后,随着基金净值和期货合约价格的变化,整体套保组合的效果也在发生改变,根据下表信息计算这三个交易日的套保组合盈亏情况:

日期2019年1月11日2019年1月14日2019年1月15日
基金净值(元)2.8362.8152.867
期货合约结算价3095.03069.43126.2
net0=2.768;N=97;F0=3003.6;Q=100000000
net=pd.Series([2.836,2.815,2.867])
F=pd.Series([3095.0,3069.4,3126.2])
for i in range(3):
	r=Q*((net[i]/net0)-1)-300*N*(F[i]-F0)#这时用一般收益率公式更合理
	print('第{}个交易日套保组合的累积盈亏为{:.2f}'.format(i+1,r))1个交易日套保组合的累积盈亏为-203092.602个交易日套保组合的累积盈亏为-216803.123个交易日套保组合的累积盈亏为8929.60

  可见最优套保比率的计算不是一劳永逸的,要想获得最佳的套期保值效果,可以考虑建立动态的套保模型比如DCC-GARCH、Copula等。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值