这次更新只是简单地把SABR的计算过程和用CTP接口获取行情的程序合并到一起,形成一个可以实时计算出一组期权合约里的最佳SABR套利组合的程序。由于行情是从CTP接口异步返回的,所以只需要用一个map来存储实时更新的行情数据,再基于此循环地计算SABR最佳套利组合即可。有一些细节还没有进行优化,比如说,如果当前所有期权合约的SABR都大于或小于它们的隐含波动率,那就没有套利组合的出现,这一点程序还尚未考虑进去(其实这并不难,主要是我一直在怀疑我计算SABR的方式到底是否正确。尤其是vega和rho这两个参数的优化过程,虽然从逐步优化返回的步骤来看并无太大问题,但为啥SABR总是那么小?还是说只是碰巧最近的行情就是这样而已……)。总之近期应该不会再碰这个程序了,我太菜了,我得先把C++重新摸透再动手,把指针再看一遍,还有把数值分析和优化理论给学了,这真的太重要了呜呜呜……其实后面需要加工的地方也并不多,把到期日参数T精确到每天的秒级别、利率也进行实时地更新,每天需要计算的期权合约也用python写完传给C++程序(其实我一开始也只是希望C++作为一个计算工具而已,因为据说它比较快,但是为了熟悉CTP在C++上的运用,所以就全用C++来写了,发现其实也不难……)。以后想到了有空再写吧……
实时计算最优SABR套利组合
用C++调用CTP行情接口其实并不难,只要能理解api和spi两类函数分别的作用就行了。但是实现SABR策略就有点头疼了,python给我们带来了太多的便利,优化vega和rho的过程调用scipy的optimize模块一个函数就搞定了,虽然C++也有类似的nlopt库,但是使用起来还是遇到了不少麻烦。我把实现过程中用到的参考资料都列在下面,未来要加强数值分析和优化理论方面的学习……有空就来研究交易接口,希望下周结束前能搞定……
SABR参数vega和rho的优化过程
参考文章: