场景:如何在投研端回测一个期权双卖策略
双卖策略:
期权双卖策略指的是同时卖出认购期权(看涨期权)和认沽期权(看跌期权)。如果这两者的行权价格相同,则该策略被称为跨式策略(Straddle);如果行权价格不同,则被称为勒式策略(Strangle)。这两种策略都是期权卖方常用的方法。这类策略特别适用于预期市场未来将处于区间震荡的状态。
具体而言,卖出看涨期权反映了投资者对标的资产价格上涨的否定预期;而卖出看跌期权则反映了对标的资产价格下跌的否定预期。在市场预期价格将维持在一个相对稳定的区间内波动的情况下,直接买卖标的期货合约可能难以获得利润。此时,采用期权双卖策略能够为投资者提供另一种选择,尤其是对于商品市场而言。
一:计算方法:
在期权指标数据系列第一篇帖子里,我们学到了如何使用投研端vba的方式生成指标。
详情请见 :(期权指标数据系列---期权VBA获取认购认沽基础行情数据的方法(1)(附代码!!)
这篇帖子我们讲一下如何利用取到的数据,生成一个策略并进行回测。在上一篇帖子里,我们取到了认购认沽的虚值一档价格,行情标的的中文名称,该标的的认购认沽的昨收价格,接下来,我们继续取一些公式所需要的数据,计算出每天的收益,累计加和起来生成回测收益图。(以上证50ETF为例)
1.取到上证50ETF昨收价格,用来计算每日收益率
//使用函数callstock取得该数据
bdc:=callstock('',vtclose,-1,0),nodraw;
2.算出每日的认购认沽的收益率
卖出认购每日收益:=-1*(认购合约价今收-认购合约价昨收)/bdc,nodraw;
卖出认沽每日收益:=-1*(认沽合约价今收-认沽合约价昨收)/bdc,nodraw;
<font color = red>收益率计算方式解释:</font>
<font color = red>乘以-1:因为这里是卖出期权,所以当期权价格上涨时,卖方实际上是亏损的;而当期权价格下跌时,卖方则是盈利的。因此,乘以-1是为了反转收益的方向,使得正值表示盈利,负值表示亏损。</font>
<font color = red>卖出期权需缴纳保证金,可以近似的认为,卖出一份期权占用一份标的现货的保证金。则相应的日收益率为,期权价格变化量/现货价格。</font>
二:回测方法:
1.取得期权行权日到今日的交易日个数,使用函数getexerciseinterval
mm:=month();
jj:=weekday();
xx:=getexerciseinterval('',1),noaxis;
2.算出当天的综合收益,并画出累计收益图
cj: 卖出认购每日收益+卖出认沽每日收益,nodraw;
ab1:sum(cj,0),colorgreen;
3.匹配收益图到具体的某一日期
M:=BARSLAST(date<>REF(date,1))+1,noaxis;
dt:ab1-ref(ab1,m),nodraw;
ym:=BARSLAST(year<>REF(year,1))+1,noaxis;
lh:ab1-ref(ab1,ym),nodraw;
三:回测效果:
四:代码分享:
// 第一步: 获取认购和认沽的实值一档最新价
bb:getoptcodebyno('','C',1,-1,-1,1,0,6);//-1,-1(最稳)//1,1//1,-1//(-1,1最好)
ss:getoptcodebyno('','P',1,-1,-1,1,0,6);
// 第二步:获取期权的中文名称
bbss0:STKNAME(bb);
ssss0:STKNAME(ss);
// 第三步:获取该标的的认沽、认购合约价昨收格
认沽合约价昨收:callstock(ss,vtclose,-1,-1),nodraw;
认沽合约价今收:callstock(ss,vtclose,-1,0),nodraw;
bdc:=callstock('',vtclose,-1,0),nodraw;
认购合约价昨收:callstock(bb,vtclose,-1,-1),nodraw;
认购合约价今收:callstock(bb,vtclose,-1,0),nodraw;
//
卖出认购每日收益:=-1*(认购合约价今收-认购合约价昨收)/bdc,nodraw;
卖出认沽每日收益:=-1*(认沽合约价今收-认沽合约价昨收)/bdc,nodraw;
//回测部分
mm:=month();
jj:=weekday();
xx:=getexerciseinterval('',1),noaxis;
cj:卖出认购每日收益+卖出认沽每日收益,nodraw;
ab1:sum(cj,0),colorgreen;
M:=BARSLAST(date<>REF(date,1))+1,noaxis;
dt:ab1-ref(ab1,m),nodraw;
ym:=BARSLAST(year<>REF(year,1))+1,noaxis;
lh:ab1-ref(ab1,ym),nodraw;
不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!
欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。
只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”