(三十二)保证金与基差风险

保证金余额和追加额的计算

  有一家基金公司在2019年1月2日购买了3000万元的沪深300指数基金,当时沪深300指数恰好为3000点,该公司想运用在2019年3月到期的沪深300指数期货IF1903进行空头套保。假定国内一家期货公司提供的沪深300股指期货初始保证金比率是15%,维持保证金为400万,根据沪深300股指期货结算价数据列出该基金公司2019年1月2日至2月28日的保证金账户余额变化表,哪些交易日基金公司会收到追加保证金通知?

  由本例可以看出期货交易的杠杆风险:该基金公司仅用15%*3000万=450万的资金就可以开展3000万元的期货交易,期货价格每变动1%,基金公司就要承担30万元的收益或亏损,收益率为±30/450=±6.67%。

  step1:导入1月2日至2月28日的沪深300股指期货IF1903合约的结算价格数据(可从tushare下载):

import numpy as np
import pandas as pd
data=pd.read_excel('C:/Desktop/IF1903(2019年1月至2月).xlsx',index_col=0)
data.head()
Out[1]: 
            IF1903结算价
交易日期                 
2019-01-02     2966.4
2019-01-03     2962.4
2019-01-04     3033.0
2019-01-07     3057.2
2019-01-08     3054.6

  step2:计算累积盈亏、每日盈亏数据:

initial=4500000;F0=30000000;P0=3000;maintain=4000000
accu_r=-F0*(data/P0-1)
accu_r.columns=['累积盈亏']
daily_r=accu_r-accu_r.shift(1)#shift(1)表示上一行的数据
daily_r.iloc[0]=accu_r.iloc[0]
daily_r.columns=['每日盈亏']
df=pd.concat([data,daily_r,accu_r],axis=1)
df.head()
Out[2]: 
            IF1903结算价   每日盈亏   累积盈亏
交易日期                                     
2019-01-02     2966.4  336000.0  336000.0
2019-01-03     2962.4   40000.0  376000.0
2019-01-04     3033.0 -706000.0 -330000.0
2019-01-07     3057.2 -242000.0 -572000.0
2019-01-08     3054.6   26000.0 -546000.0

  step3:计算保证金账户余额、保证金追加额数据列。基本逻辑是,如果某天margin account ≤ 400万,该天的余额追加为450万,否则余额就是上一天的账户余额加上今天的每日盈亏:

account=pd.DataFrame(np.zeros_like(daily_r),index=df.index)
call=pd.DataFrame(np.zeros_like(daily_r),index=df.index)
margin=pd.concat([account,call],axis=1)
margin.columns=['account','call']
margin['account'].iloc[0]=(daily_r.iloc[0]+initial).values
for i in range(len(df)-1):
	if margin['account'].iloc[i]<=maintain:
		margin['call'].iloc[i]=initial-margin['account'].iloc[i]
		margin['account'].iloc[i]=initial	
	else:
		pass
	margin['account'].iloc[i+1]=(daily_r.iloc[i+1]+margin['account'].iloc[i]).values
margin.head()
Out[12]: 
              account      call
交易日期                           
2019-01-02  4836000.0       0.0
2019-01-03  4876000.0       0.0
2019-01-04  4170000.0       0.0
2019-01-07  4500000.0  572000.0
2019-01-08  4526000.0       0.0
margindata=pd.concat([df,margin],axis=1)
#把元转换成万元看得更清楚
margindata.iloc[:,1:]=margindata.iloc[:,1:].apply(lambda x:x/10000)
margindata
Out[13]: 
           IF1903结算价 每日盈亏 累积盈亏 account call
交易日期                                               
2019-01-02     2966.4   33.6   33.6    483.6    0.0
2019-01-03     2962.4    4.0   37.6    487.6    0.0
2019-01-04     3033.0  -70.6  -33.0    417.0    0.0
2019-01-07     3057.2  -24.2  -57.2    450.0   57.2
2019-01-08     3054.6    2.6  -54.6    452.6    0.0
2019-01-09     3091.4  -36.8  -91.4    415.8    0.0
2019-01-10     3082.8    8.6  -82.8    424.4    0.0
2019-01-11     3098.8  -16.0  -98.8    408.4    0.0
2019-01-14     3073.2   25.6  -73.2    434.0    0.0
2019-01-15     3130.4  -57.2 -130.4    450.0   73.2
2019-01-16     3133.0   -2.6 -133.0    447.4    0.0
2019-01-17     3125.6    7.4 -125.6    454.8    0.0
2019-01-18     3175.4  -49.8 -175.4    405.0    0.0
2019-01-21     3190.6  -15.2 -190.6    450.0   60.2
2019-01-22     3149.4   41.2 -149.4    491.2    0.0
2019-01-23     3146.6    2.8 -146.6    494.0    0.0
2019-01-24     3170.8  -24.2 -170.8    469.8    0.0
2019-01-25     3201.2  -30.4 -201.2    439.4    0.0
2019-01-28     3191.0   10.2 -191.0    449.6    0.0
2019-01-29     3204.8  -13.8 -204.8    435.8    0.0
2019-01-30     3188.8   16.0 -188.8    451.8    0.0
2019-01-31     3201.4  -12.6 -201.4    439.2    0.0
2019-02-01     3254.8  -53.4 -254.8    450.0   64.2
2019-02-11     3306.6  -51.8 -306.6    450.0   51.8
2019-02-12     3328.4  -21.8 -328.4    428.2    0.0
2019-02-13     3406.0  -77.6 -406.0    450.0   99.4
2019-02-14     3416.2  -10.2 -416.2    439.8    0.0
2019-02-15     3355.4   60.8 -355.4    500.6    0.0
2019-02-18     3446.0  -90.6 -446.0    410.0    0.0
2019-02-19     3437.2    8.8 -437.2    418.8    0.0
2019-02-20     3449.4  -12.2 -449.4    406.6    0.0
2019-02-21     3449.0    0.4 -449.0    407.0    0.0
2019-02-22     3509.8  -60.8 -509.8    450.0  103.8
2019-02-25     3744.6 -234.8 -744.6    450.0  234.8
2019-02-26     3719.2   25.4 -719.2    475.4    0.0
2019-02-27     3675.8   43.4 -675.8    518.8    0.0
2019-02-28     3677.0   -1.2 -677.0    517.6    0.0

  可见该基金公司的空头套保大部分都是在亏损状态,最终亏损了677万,期间追加了8次保证金。

基差风险

  对于商品期货来说,基差=现货价格-期货价格;对于金融期货来说,基差=期货价格-现货价格(不同文章和教材定义不同)。下面以沪深300股指期货IF1812合约为例,计算其上市首日2018年4月23日至最后交易日12月21日基差。

IF_HS.head()
Out[14]: 
            IF1812合约结算价  沪深300指数收盘价
交易日期                               
2018-04-23       3669.4   3766.3257
2018-04-24       3753.0   3843.4886
2018-04-25       3743.6   3828.7015
2018-04-26       3672.6   3755.4941
2018-04-27       3686.8   3756.8765
basis=IF_HS.iloc[:,0]-IF_HS.iloc[:,1]
zerobasis=pd.DataFrame(np.zeros_like(basis),index=basis.index)
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
plt.plot(zerobasis,'r--',label='0基差线')#有index的数据自动画在x轴
plt.plot(basis,'k-',label='基差')
plt.xlabel('日期')
plt.ylabel('基差')
plt.legend()
plt.grid()

在这里插入图片描述
  可见该期货合约的基差大部分时间为负,并且在7月至10月初期间基差明显走强,接近到期日时收敛于0。

  在股指期货的多头套期保值中,套期保值者到期时需要买入现货并同时卖出期货合约方式对原来的期货多头头寸进行平仓。因此,当基差增强,也就是现货价格相对更低而期货价格相对更高时,套期保值者通过买低卖高就可以获利;反之当基差减弱时,套期保值者通过买高卖低则会出现能亏损。同理在空头套期保值中,当基差减弱时更有利。

  为尽可能减小套期保值中的基差风险,一是尽量选择期货合约到期日在现货交易日之后、且离现货交易日最近的合约作为套期保值合约(基差小),二是通过观察基差的变化来动态调整套保策略(stack and roll)。

发布了37 篇原创文章 · 获赞 4 · 访问量 2476

猜你喜欢

转载自blog.csdn.net/hzk427/article/details/104338650