金融科技的蓬勃发展,为了科技业注入了一股新的活水,确让传统的金融业者倍感威胁。但与其墨守成规,金融业界应该思考的是该怎么活用机器学习、人工智能等新兴技术,将智能灌注在既有的资料上,打造的金融业务面貌。

俗语说:「工欲善其事、必先利其器」为了能够快速从金融大数据中挖掘出价值信息,我们必须要使用良好的分析工具,才能达到事半功倍之功效。而受到数据科学家们所共同推崇的Python 语言,便是我们可以活用来搜集、处理、分析金融数据的*帮手。

蒙特卡洛算法

期权的蒙特卡洛估值是导致高计算负担的金融算法之一。作为特例,我们选择Black-Scholes-Meron设置下的欧式看涨期权价值蒙特卡洛估值函数。在这种设置下,所要估值的期权标的遵循随机微分方程式(SDE),如下公式。St是时间t的标的价值;r是一个常数——无风险短期利率;σ是恒定瞬时波动率;Z是布朗运动。

Black-Scholes-Metron SDE

Black-Scholes-Metron SDE

欧式看涨期权的蒙特卡洛估算函数

蒙特卡洛估算函数

蒙特卡洛估算函数

估算期权价值的另一种流行数值方法是二项式期权定价模型。 这种模型和Black-Scholes-Meron设置一样有风险资产(指数或者股票)以及无风险资产(债券)。 和蒙特卡洛方法一样,从当天到期权到期日的时间间隔被分为通常等距的子间隔Δt, 如果时间s的指数水平为Ss, 则 t = s+Δt 时的指数水平为St = Ss·m , 其中m是从

估算期权价值

{u, d } 中随机选取(

)。r是 一个常*一无风险利率。 风险中立的上涨概率为。

对该模型进行参数化:

模型进行参数化

欧式期权二项式算法的实现主要包含如下部分:

1、指数水平模拟

连步模拟指数水平。

2、内在价值计算

计算到期日和每个时间步的内在价值。

3、风险中性折算

逐步折算(预期)内在价值直到达到现值。

Python中,这可能采取函数binomial_py中的形式。该面数使用NumPy ndarray对象作为基本数据结构, 并实现3个不同的嵌套循环,以实现上述的3个步骤:

函数binomial_py中的形式

上函数使用前面指定的参数. 返回欧式看涨期权的现值:

将这个结果与蒙特卡洛函数bsm_mcs_valuation返回的估算结果比较

两个值很类似,它们只是“相似” 而不是相同。是因为蒙特卡洛估值和bsm_mcs_valuaton所实现的算法都不是很*, 不同的随机数会导致(稍有)不同的估算结果, 对于健全的蒙特卡洛估算来说, 每次模拟使用2000Q条路径也可能略少一些(但是可以得到较高的估值速度)。 相比之下, 本例中的二项式期权估价使用 1000 个时间步已经相当*,但是花费的时间也长得多。

可以尝试 NumPy 向量化技术,从二项式方法中得到同样、但是速度更快的结果。 binomial_np 函数初看有些神秘,但是, 当运行单独的构建步骤并检查结果, 后台( NumPy )发生的操作就显而易见了:

后台( NumPy )

我们可以得出如下结论:

效率:使用Nnmba只需要花费很少的额外精力。原始函数往往完全不需要改变;你所需要做的就是调用jlt函数。

加速:Numba往往带来执行速度的显着提高.不仅和纯Py曲。n相比是如此.即使对向量化的NumPy实现也有明显优势。

内存:使用Numba不需要初始化大型数组对象;编译器专门为手上的问题生成机器代码(和Numpy的 “通用 ” 函数相比)并维持和纯Python相同的内存效率。