量化交易:迷茫、转变、自创……关于我的期权交易演进之路(上)

任何投资交易之路,从来都不轻松,期权交易更是如此。

今天为你分享一位期权量化交易者的期权成长历程,带你体会一个人做交易如果要从“弯路”找到自己真正的目标与方向,需要经历一些什么,同时也为你分享一些期权量化交易的知识,祝开卷有益!

 

1、2018年以前

我最早是在加拿大开始做期权交易的,但当时主要都是围绕对股票和指数基金的保护,主要理论依据都是定价公式。

得益于我金融工程科班出身,很快熟练了BSM, Binomial,Monte Carlo这些公式的具体应用。后来回国自己开了期权账户,一开始做的时候资金很少,Volatility Tax很低,外加市场有效性很差,我一直做的非常顺利。

其实这个期间我最大的收获反而是股票和期货方面,控制风险,减少赌方向,推算盈亏后果,研究波动率规律,控制仓位等等,这些思路被延续到了我后面做期权的理念中。

小结:这个阶段的我,其实跟现在很多所谓的期权“高手”,“老师”,“师傅”是一个交易level的,我会做所有酷炫的图,懂所有的模型,在外行的人面前讲得头头是道。现在回头看看,我当时只是个理论派做题家,沙雕一个罢了。

 

2、2018年:第一次转变与艰难的“自创”

 

我遇到的第一个难题是把管理资金翻了10倍之后,由于是纯期权合成策略,Volatiliy Tax,价格延时,滑点等问题一下子都变得非常明显了。

我开始意识到:

1、不是每个品种,合约,策略都可以用的,完全可以出现买卖双方都亏的贡献智商税情景,而这些问题在资金少的时候,是很容易被掩盖的;

2、各种对冲方式在不同场景下存在效率差别。

我当时买了很多书,包括各种所谓的波动率交易的,甚至机器学习的,为了细化研究策略,我甚至把所有的高阶希腊字母的对冲方式做了量化和细分研究,多亏了好友宋博士,本文的另一位作者,帮我排除了这些错误方向,让我少买了很多烂书,也少走了很多弯路。

这期间我看过的质量比较高的书:

Uncle Bob's Money,Profiting with Iron Condor Options,Trading Options at Expiration,Think Like an Option Trader

好书侧重的是从实践中总结出有insight的东西,而不是纯粹理论,公式,毕竟,金融工程只是手段,不是目的。

当然了,iron condor,diagonal,calendar这些教科书式的策略,其实不太容易在50ETF等品种上持续赚到钱。它们反而更加适合作为各种场景下的参照指标来计算。为了便于计算这些场景,做一个性价比评估。我把我的看盘方法,与上述四本书相结合,做了一个评估计算系统。

 

Theta计算体系

我最早以Theta方向为参照物,通过计算iron condor, diagonal, calendar, spread等组合,对全T价表做了4*16=64个输入,用于评估合约建仓性价比,做辅助策略筛选。虽然经过了重重改良,依然有4+2+2+6=14种结果。

我最早的分析系统:

  

期权组合理论上有无数种,但实践当中其实每个细分场景真正适合的很少,所以这个系统虽然很繁琐,没有办法在即时交易环节帮上太多的忙(如果在交易环节使用,我只能等到行情趋向平稳的时候),但是给我每天复盘起到了莫大的帮助,帮我从多个维度发现了很多新的现象和计算方向。帮我成批剔除了很多不实用的对冲方式。

但是这里面有个矛盾点,我自己在之前的交易过程中,是不太喜欢使用theta这个参数,虽然理论上合约必然到期,但是它太容易受到gamma, vega方向的影响了,简单地说gamma的脉冲行为,vega的长期影响都远远大于theta。我操盘当中有个小窍门,就是单独把时间价值拿出来,计算我是不是theta友好,这点给我接下来的改进埋下了伏笔。

一个“大胆”的想法:

有天我突然有了个启发,虽然我们知道地球并非宇宙中心,但其实地心说,日心说也能用,只是以不同的东西作为观察的参照物,哪个场景下更加方便就用哪个好了。那么我何不在我的计算体系里面,也来个地心说向日心说的演进呢。

思来想去,我把vega做了我的新的参照物(当时我也想过把gamma作为参照物更好,但是我知道用现有的期权公式来观测Gamma方向是相当差劲的,而vega方向的观测方法比较多,于是折中了一下)

 

Vega计算体系

我终于决心把时间价值和Theta按照我的交易习惯来重新定义。

python代码  

def PutTimevalue(OptionSpot, St, K):
    Timevalue = max((OptionSpot - max(K - St, 0)), 0.0001)
    return Timevalue


def CallTimevalue(OptionSpot, St, K):
    Timevalue = max((OptionSpot - max(St - K, 0)), 0.0001)
    return Timevalue

 

python代码

def PutTheta(OptionSpot, St, K, Mmonte):
    Theta = PutTimevalue(OptionSpot, St, K)/Mmonte
    return Theta


def CallTheta(OptionSpot, St, K, Mmonte):
    Theta = CallTimevalue(OptionSpot, St, K)/Mmonte
    return Theta

 

这俩简单公式,其实称不上什么创新,毕竟是我交易中一直沿用至今的口算方法。但是它却开启了我自创计算公式的第一步。

我改用Vega方向作为Benchmark,缩减成只要6+8=14个行情数据输入,8行参数输出结果。

在交易流程我也有了很大的革新,分为行情分析(一周),期限分析(当天),当期曲面分析(交易时段)三个环节复杂度递减。不但使得我的交易系统越来越实用,也帮我发现了更多的巧算(口算)方法。比如我之前常说的0.3delta,0.1delta就是这个阶段被发现的。

我当时基于Vega对场景做的一级划分:

 

 

 

 

 

虽然我知道比如高阶导数是对交易几乎没有用处的,但是我不敢彻底摒弃,还是放着作为备用结果参数作为参考。

 

 

 

 

 

 

小结:这个阶段,我终于迈出了从Q Quant到P Quant转变的第一步,但是我整体还是挺“怂”的,只敢拿现有的东西做些结构和应用上的创新。

 

3、2019年上半年:迷茫中探索

我开始更多依赖数据统计。

这期间最让我感到焦虑的是,我在期权层面上没有了可供学习的对象。我非常喜欢看书,翻Qiang查阅资料,和同行交流,但我已经很难再找到,那么能够获得insight的信息了。(唯一算得上insight的信息就是回过头去重读塔勒布的几本著作)

我开始加大实践操作的各种常识,用实践来指导演进,这期间好友宋博士再次给了我很大的鼓舞,每次探讨交流帮我一起细心挖掘我逻辑上的漏洞和钻牛角尖的地方。

我一直在寻求把gamma作为参照的做法,毕竟期权是需要主动管理的,虽然操作中可以简化,可以低频率,但是观测方法上一定要灵敏。可是一直没有很好的进展。期间,我开始把数据库应用到Vega计算体系上。并且交易体系的演进做了一个划分。

我当时是这样认知整条路径的,现在回头看看,当时对风险收益的认知是非常局限和狭隘的。

我2019年3月的认知:

 

 

 

期间走的弯路:

我甚至还对高阶希腊字母继续抱有最后一丝希望,再次做了些深入探索。其实是徒劳。因为定价公式本身都是漏洞极多的,高阶希腊字母作为它的导数,难不成能更加实用?完全是扯X。

 

 

 

这也让我自信大胆地摒弃了很多并不实用的计算方式,做了更多的创新。

 

Vega计算体系下的行情参数

 

 

这过程当中也让我有了一个灵感,我意识到了,完全可以把gamma, vega, theta以矢量的方式,统一在一个计算方法里,未来可以在某一天彻底摆脱掉这种漏洞百出的计算方式。我当时甚至激动的一时脑残,把自己的微信名字改叫Vectortrader。

我在巧算上也有了一个启发:当合约到期最后两周,当月时间价值OTM处会与次月发生倒置现象,即当期的时间价值/到期日,反而小于次月的,而且这个区域会从最外围的OTM往ATM蔓延,从观测的角度,“正常”的时间价值区域会发生向内坍缩。

时间价值向内坍缩现象:

 

 

 

当然这个现象,并不意味着做反向日历价差来套利之类的,而是它能够很有效地帮助发现非对称性套利机会。我在它的基础上,与我的量化计算体系,先前的巧算方法相结合,发现了一大堆新的巧算技巧,我的巧算方法数量上翻了四倍。这也让我后来的交易不再只局限于做卖波动率外加保护了,我在long gamma,long vega上掌握了很多交易技巧。

而且我也意识到了iv计算本身的缺陷,那就是momentum问题,不一定波动率高位short,低位long,事实上我也有相当多的long vega策略是在高波做的,short vega在低波做的,采用momentum的分析作为一级原则,把iv作为次一级原则会更好。

但我依然没有很好的解决计算gamma风险的问题,我被迫用了很多辅助手段,单独计算gamma风险,直到把gamma的风控区间约减到下图的样子。

Gamma风控图:

 

 

 

除此外,我还做了些针对场景的计算,毕竟有些品种由于保证金,流动性等问题,就适合交易那么几种策略。

 

 

 

 

 

 

 

但是我的交易模块已经越来越简化和实用了,它只有几个输出值。后来采用了gamma为benchmark的计算方法,更是可以进一步把负责辅助交易的模块,约简成4个输入,4个输出。

 

 

小结:这个阶段,我从赚Theta的钱,风控Vega, Gamma,转变到了赚Theta, Vega的钱,集中风控Gamma。我的交易也不再拘泥于特定形式了,而是以系统流程为第一位,微观操作越来越倾向于执行和应变。但最重要的收获是,我做了一系列自创,同时巧算方面有了相当大的进步,让我后面的演进速度得到了极大的提升。

 

4、2019年下半年:极简主义与拿来主义

我换了个工作,让我的交易环境一下子变得相当恶劣,因为那个公司的工作强度非常大,而且网关上对交易软件是拦截的。我被迫使用手机为部分客户操盘,但这还不是最大难题。

真正坑爹的是,我有一个客户,他的开户券商只有PC端,而且这家券商的行情软件很渣,我不仅完全不能参考,还要反复确认是否下单正确,否则会进入的合约与下单结果不一致!

我只能用向日葵远程控制系统,连接宋博士的计算机操盘,同时一边打开我的手机核对行情,然后再在我公司的电脑上输入参数计算。我微操层面,从原来每一步都是在10秒以内可以完成的迅速看盘下单检查的这个流程,变成了2分钟以上。

我意识到了,虽然我之前在对冲层面,老在摸索antifragile,但我的整个操作流程,还是非常fragile的。我被迫对我的整个流程进行了简化重构。得益于巧算方法的成熟,我把量化的复杂计算流程,全部搬到了复盘这一块,只需要中午收盘运行一次,下午收盘再复盘一次即可,我会直接在这个流程计算出所有我操作中可能遇到的需要调仓,或者建新仓,平旧仓的条件。

这个更改,对我来说是革命性的,我到现在我的微操层面就是结合我推演的所有场景的应对策略,执行,看盘口算,加Plan B(Plan B其实也是我在复盘的时候提前计算好的)。但本质上也遵循了我自己的发展轨迹,这一路我确实让复盘功能更加丰富,更加具备对下一步的指导意义,从而让操盘越来越注重巧算,执行和应对。

虽然这时我的计算里面,已经几乎100%是自己自创的公式了,但是有很多重复造轮子的地方,并不利于整体的改善,我干脆拿来主义,把一些市场上现有的,成熟的计算方式,重新拿回来替代掉我DIY的影响整体效率的部分。

比如对实际波动率的计算,还有分析行情盘面,我扔掉了我所有的计算公式,干脆直接在通达信上用布林带和SAR和编写简易的技术指标。

 

通达信代码:

主要有三个周期参数,短期ST(Short Term),中期MT,长期LT,默认按照20天,90天,365天来设置

几行代码,已经相当相当的简单了。

RR:=LN(CLOSE/REF(CLOSE,1));

RVSQ:=252*10000*SUM(POW(RR,2),MT)/MT;

HVC:SQRT(RVSQ),COLORBLUE;

HVH:HHV(HVC,LT),COLORRED;

HVM:MA(HVC,LT),COLORGREEN;

HVL:LLV(HVC,LT),COLORMAGENTA;

 

 

然后我把这些行情嵌入到我的vega计算里,整个代码一下子变得简洁和实用多了。

python代码

def PutVega(OptionSpot, St, K, T, r, Vol, Mmonte, NOS):
    dt = T / Mmonte
    SMonte = np.zeros((Mmonte + 1, NOS))
    SMonte[0] = St
    for lb in range(1, Mmonte + 1):
        SMonte[lb] = SMonte[lb - 1] * np.exp((r - 0.5 * Vol ** 2) * dt +
                                             Vol * np.sqrt(dt) * np.random.standard_normal(NOS))
    TimeValue = PutTimevalue(OptionSpot, St, K)
    Vega = (sum(SMonte[-1] < (min(K, St)-TimeValue))) / NOS
    return Vega


def CallVega(OptionSpot, St, K, T, r, Vol, Mmonte, NOS):
    dt = T / Mmonte
    SMonte = np.zeros((Mmonte + 1, NOS))
    SMonte[0] = St
    for lb in range(1, Mmonte + 1):
        SMonte[lb] = SMonte[lb - 1] * np.exp((r - 0.5 * Vol ** 2) * dt +
                                             Vol * np.sqrt(dt) * np.random.standard_normal(NOS))
    TimeValue = CallTimevalue(OptionSpot, St, K)
    Vega = (sum(SMonte[-1] > (max(St, K)+TimeValue))) / NOS
    return Vega

 

虽然我继续把它命名为Vega,但它已经不再充当对冲参数这个职责了,而是Vega方向的整体的行情观测指标。

 

 

 

 

然后我自然推导出了基于Gamma的计算方式。

 

Gamma计算体系

简而言之,我把Gamma收益类比做贷款投机买房,Gamma梯形区间就相当于一二线城市,当月ATM就相当于一线城市核心区域的房子,虽然最有价值,但是很贵,很容易被price in,边缘地区方式虽然很便宜,但是没有价值。不过区别在于,我的利息相当高,并且我在期间内很容易血本无归(全部支付成利息)。

当然,Gamma的运动特征具有脉冲性质,大部分时候gamma是被完全浪费掉转化为theta的,偶尔会一次性集中的位移大爆发,我直接在实际波动率的计算基础上做个简单改进,对单次位移本身做一个指标进行统计。

计算出期间内的平均位移MOVEM,最高位移MOVEH,和最小位移 MOVEL。

代码依然采用极其的简单。

通达信代码:

MOVE:ABS(CLOSE-REF(CLOSE,ST)),COLORBLUE;

MOVEH:HHV(MOVE,MT),COLORRED;

MOVEM:MA(MOVE,MT),COLORBLUE;

MOVEL:LLV(MOVE,MT),COLORMAGENTA;

 

 

这些Move参数的结果塞入到PutGamma,CallGamma的公式里。

 

python代码

 

def PutGamma(OptionSpot, St, K, Move, Mmonte):
    PnL = 0.5*(max(Move - max(St - K, 0), 0) - min(OptionSpot, Move))
    Gamma = max(PnL/PutTheta(OptionSpot, St, K, Mmonte), 0)
    return Gamma

def CallGamma(OptionSpot, St, K, Move, Mmonte):
    PnL = 0.5*(max(Move - max(K - St, 0), 0) - min(OptionSpot, Move))
    Gamma = max(PnL/CallTheta(OptionSpot, St, K, Mmonte), 0)
    return Gamma

图片

图片

 

 

 

 

 

 

 

复盘用的图也相当简化:

 

 

 

 

行情图上,我只需要看这些简单指标就够了。

 

 

连接执行步骤的输出上更是做了进一步的精简和优化

 

 

 5、总结一下我的交易特点

不断演进

我从小就有较强的危机意识,当然,也可以说我比较焦虑,比较怂,喜欢未雨绸缪。我相信投机交易是零和游戏,有人赢必然有人输,期权上也是一样的。而我也比较“幸运”,每次行情出现更大危机前,我刚好提前完成了一整轮的迭代升级,反而没有沦落到遭受市场毒打的地步。但这反而更让我每次都觉得,幸好自己没有不思进取,反而更加鞭策我去完善自己的交易系统和决策流程。

注重巧算和简化

我早期尝试过机器学习,但是后来在实践和论证中把它搁置了。简单的说,我认为在不完全掌握期权交易机理的前提下,除非发明出比你还懂期权的强人工智能,否则是不可能量化和高频的。在深刻理解各种普通到极端情况的交易方式之后,而通过不断的简化,优化流程,发现巧算方法,自然能够逐步逐步的把交易条件变得非常的简单重复无脑,过度到机器决策。

注重流程的分工

期权交易时在应对能力,交易经验,先手优势更加重要,因此我把这个环节需要的量化全部搬到了分析和复盘环节,交易时候只负责看盘,巧算和执行。

偏保守

虽然我的交易理念迭代非常快,但是我基本上采用的都是我上一个阶段稳定使用过很长时间的旧的交易方式。在测试新的交易方式的时候,我往往只会先从自己账户开始,1/5,1/4然后再以更加保守的方式,用到客户的管理流程里去。

后记,Gamma计算体系完成之后的事:

2019年12月:Gamma计算体系检验效果良好,开始全部用在我和客户的仓位管理中。

2020年1月:我玩德州扑克的时候偶然意识到,德州扑克只有管理仓位,“对冲方式”是没得选的。而期权方面我前面都只是围绕对冲方式,期权仓位管理的量化,我都是经验主义,没有正儿八经的研究过,无意中又发现了一个可以提升期权量化的方向。

2020年2月:我在行情剧烈变化的过程中,很好地检验了我的Gamma计算体系,但我只赚了少得可怜的钱,好多都被手续费和滑点给吃了,我开始逐渐摒弃掉所有的复杂对冲结构,从仓位管理和对冲结构相结合的角度来优化交易。

2020年3月:我发现了可以把Delta Neutral交易,方向交易统一在一套评估体系里的计算方法。我逐步确信之前这个theta, vega, gamma的路径划分是错的,它们本质上交易的是合约间微小的落差,自然在行情剧烈变动的时候,波动率税一高,利润就全没了。

2020年4月:我开始用宏观,介观,微观的角度来重构我的整个期权交易流程,我把我前面所有的计算方式都归纳为微观层面。

2020年5月:我的“巧算”方法(脱离量化,直接看行情口算)有了相当大的进步,这个过程中,我能做到看标的和期权行情,直接指出滑点最小的区间,iv在各个条件下的变化行为等。我开始形成了一种新的交易方式,即量化的繁琐计算全部集中放在了宏观和介观层面,我的微观层面只是按照大方向执行而已,这让我获得了很多先手优势,减少overtrading和盯盘复杂度上面有了极大的突破。

2020年6月:我彻底摒弃掉了theta,gamma,vega这种观测角度,把这三个方向重新按照我的计算方法,统一成一类微观层面的量化方式。同时我在介观层面新增加了一个方向计算,即把保证金的增减当作一个独立维度的方向,并从我长期使用的一种操盘手法里面,推演出了把衡量保证金风险和建仓性价比统一的计算方式,彻底打通了介观到微观的量化。

2020年7月:全新的管理方式,我把未来到过去的行情变化看作一个loop,宏观分析到微观执行看作另一个loop,前者基于博弈与后者基于对抗,两者有机统一,并逐步在客户账户管理中推广。公众号开始公布Gamma计算体系。

 

作者:Darqan   来源:IQT期权实验室

posted @ 2023-02-10 17:35  徐海建  阅读(322)  评论(0编辑  收藏  举报