返回列表 发布新帖

期权指标数据系列---vba回测期权策略(2)(附代码!!)

312 0
发表于 2024-9-12 11:19:49 | 显示全部楼层 阅读模式

场景:如何在投研端回测一个期权双卖策略

双卖策略:

期权双卖策略指的是同时卖出认购期权(看涨期权)和认沽期权(看跌期权)。如果这两者的行权价格相同,则该策略被称为跨式策略(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;

三:回测效果:

image.png

四:代码分享:

// 第一步: 获取认购和认沽的实值一档最新价
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 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。

只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”

企业微信截图_17235220909173.png

回复

您需要登录后才可以回帖 登录 | 立即注册

主题

4

回帖

0

积分

0

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2024 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表