前言
常见期权数值的计算基于BSM公式,通常来讲期权的计算使用Python实现更加方便。这里所说的“期权计算”,一般包括期权的理论价值、波动率、希腊字母等。
但是有些场景下,这些数值的计算需要在Web前端实现。笔者最近发现一个比较好用的库是vollib(Welcome to vollib)。从GitHub上看,这个库已经有很多年没有继续更新了。不过相比于打包Python、C++为webasm,这个库已经将其Python实现的一些期权计算功能封装成了JS库。
打包
从官网下载的官方包确实代码比较旧,到处方法和对象还是使用注册到window对象的方式。我将源码做了些许调整,改为了ES5的export方式导出符号,这样就支持了import直接导入符号。如果有需要可以去我的资源区下载:
使用
vollib主要提供了三种不同的计算方式,分别是black、black_scholes和black_scholes_merton。如果不是为了研究一般使用black_scholes_merton应该足够了。下面仅以使用black_scholes_merton为例进行说明。
将源码改为export导出后,调用库的方式很简单,直接用import即可:
import {black_scholes_merton} from '../libs/js_vollib.js';
black_scholes_merton模块下,分别提供了多个不同的常见方法,包括:
计算理论价值:black_scholes_merton.black_scholes_merton,调用示例:
black_scholes.black_scholes(
optType, ///期权类型: c或p
uPrice, //标的物价格
strike, //行权价
expireInYear, //年华剩余天数
rfir, //无风险利率
sigma //预估的波动率
);
计算波动率:black_scholes_merton.implied_volatility
black_scholes.implied_volatility.implied_volatility(
oPrice, //权利金价格
uPrice, //标的物价格
strike, //行权价
expireInYear, //年化剩余天数
rfir, //无风险利率
optType //期权类型: c或p
);
计算希腊字母:black_scholes_merton.greeks,希腊字母的计算分为解析法和数值法两个API,以delta为例,分别如下调用:
//数值法计算delta
black_scholes.greeks.numerical.delta(
optType, //期权类型: c或p
uPrice, //标的物价格
strike, //行权价
expireInYear, //年华剩余天数
rfir, //无风险利率
sigma //预估的波动率
);
//解析法计算delta
black_scholes.greeks.analytical.delta(
optType, //期权类型: c或p
uPrice, //标的物价格
strike, //行权价
expireInYear, //年华剩余天数
rfir, //无风险利率
sigma //预估的波动率
);
可以看到,vollib的API调用非常简单。通过调用第三方库实现底层计算,也可以简化我们策略计算器的开发复杂度,更专注于上层策略开发的准确性和实用性。专注于期权策略本身。