Python金融应用编程:衍生品定价和套期保值的随机过程

随机过程对定量融资的许多方面都很有用,包括但不限于衍生品定价,风险管理和投资管理。

由Kaizong Ye,Sherry Deng撰写

这些应用程序将在本文后面进一步详细讨论。本节介绍了量化融资中使用的一些流行的随机过程及其在Python中的实现

模型参数

模型参数类包含以下随机过程使用的所有参数。为了便于理解,这些参数的前缀是它们所用的随机过程的名称。随机过程的校准将涉及寻找与某些历史数据相符的参数值。

×

布朗运动的发展和数学定义

1827 年英国植物学家罗伯特 • 布朗(Robert Brown)在使用显微镜观察水中花粉微粒运动时发现了微粒的无规则运动,但是当时并不能从物理学角度上很好的解释其成因。1905 年,爱因斯坦详细解释了布朗发现的这种运动:微粒的无规则运动是由水分子的撞击形成的。从那以后,布朗运动在物理学上的发展日臻完善。

相比之下,数学上对布朗运动的描述发展的要慢一些。严谨的定义并描述布朗运动由诺伯特 • 维纳(Norbert Wiener)在 1918 年提出,因此布朗运动(Brownian motion)又称为维纳过程(Wiener process)

布朗运动是一个连续随机过程。一个随机过程是定义在时域或者空间域上的依次发生的一系列随机变量的集合。以时域为例,如果这些随机变量在整个实数时域上都有定义,那么这个随机过程为连续随机过程;反之,如果这些随机变量仅仅在时域上一些离散的点有定义,那么该随机过程为离散随机过程。

时域上的这个一维布朗运动走势和股票价格曲线的走势看着非常相似,这便引起了人们利用它来描述股票价格走势的兴趣。事实上,早在 1900 年一个名叫路易斯 • 巴舍利耶(Louis Bachelier)的法国小伙就在他的博士论文《投机理论》(Théorie de la spéculation)中使用布朗运动分析股票和期权的价格。

说几句题外话,这个法国小伙的研究比爱因斯坦给出布朗运动的物理解释还要早 5 年!比维纳提出布朗运动的数学定义更是早了 18 年!据说由于他把数学应用到了在当时比较未知的领域——股票研究——他在答辩时的反响并不好。但是现在看来,这个小伙才是研究金融数学的先驱!

下文会进一步解释为什么使用布朗运动来描述股价运动是合适的。现在,首先给出(一维)标准布朗运动(即维纳过程)的定义。

如果一个定义在非负实数(时域)[公式] 上的连续随机过程 [公式] 满足如下三个性质:

  1. [公式] ;

  2. 平稳性:对于所有的 [公式] ,增量 [公式] 符合均值为 0,方差为 [公式] 的正态分布;

  3. 独立增量性:对于不重叠的区间 [公式] ,随机变量 [公式] 之间是相互独立的;

则 [公式] 是一个标准的布朗运动。

上述定义的白话解释是:标准布朗运动在 [公式] 时的位置为 0。在任何有限时间区间 [公式] 内,布朗运动的变化满足均值为 0 方差为 [公式] 的正态分布 [公式] ,其方差随时间区间的长度线性增加。独立增量性的意思是布朗运动在任何一个时间区间内的变化与其他与之不重叠的时间区间内的变化无关。由该性质可知,布朗运动是一个马尔科夫过程(Markov process),即该过程在任意 [公式] 时刻之后的位置仅和 [公式] 时刻的位置有关,与 [公式] 之前的历史轨迹无关。换句话说,该过程的当前值就包含了对其未来做预测所需的全部信息。

布朗运动的性质

标准布朗运动有很多有意思的性质,它们对于使用布朗运动及其变化来描述股票价格有非常重要的含义。这些性质包括:

  1. 它的轨迹会频繁的穿越时间轴 [公式] (在时间轴上下往复波动);

  2. 在任意时刻 [公式] ,它的位置 [公式] 不会偏离正负一个标准差太远;

  3. 令 [公式] 为 0 到 [公式] 时刻内的布朗运动 [公式] 所能到达的最大值,即 [公式] ,则“ [公式] 不小于任意给定阈值 [公式] 的概率”等于“ [公式] 不小于任意给定阈值 [公式] 的概率的两倍”,即 [公式] ;

  4. 布朗运动虽然连续,但是它处处不可微分(这是非常关键的一个性质)。

首先来解释前两个性质。下图给出了 0 到 [公式] 时刻内 15 条标准布朗运动的样本轨迹。尽管它们呈现出各自的随机性,但基本上每条轨迹都往复的穿越 [公式] 这条线(即时间轴 [公式] ),仅有个别的样本轨迹在 [公式] 的单边震荡(对于这些轨迹,随着 [公式] 的增加,它们也一定会穿越 [公式] 轴的)。此外,黑色的抛物线是方程 [公式] 的曲线。可以看到,虽然每条样本轨迹都有足够的随机性,但是在 [公式] 时刻,它们都不会偏离这条抛物线上的点 [公式] 太远。下图右侧是 [公式] 时刻均值为 0 方差为 [公式] 的正态分布的概率密度函数。这条抛物线的范围对应的就是该正态分布正负一个标准差之内的变化。

假设我们使用布朗运动来描述股价日内的高频走势(下文会说明更加准确的描述股价的模型是带漂移项几何布朗运动,但在此作为一个简单的例子,假设使用布朗运动来描述股价),这两个性质意味着股价很大概率会在开盘价上下波动,而非一直维持在开盘价上方或者下方;此外,随着交易时间的推移,在t时刻股票的价格不会偏离“ [公式] ”太远。这些性质对于想根据日内高频数据进行投机操作的人非常重要。

第三条性质给出了量化 [公式] 时刻内布朗运动极值的概率模型。由于 [公式] 是满足均值为 0 方差为 [公式] 的正态分布,因此 [公式] 这个结果可以让我们非常容易的求出 [公式] 的概率,即

[公式]

其中 [公式] 是标准正态分布的累积分布函数。上式可以通过布朗运动的马尔科夫性和反射性证明,在这里不在赘述。同样的,如果令 [公式] 为 0 到 [公式] 时刻内的布朗运动 [公式] 所能到达的最小值,即 [公式] ,则再次利用反射性不难推导出 [公式] 的最小值低于给定阈值 [公式] 的概率:

如果用布朗运动来描述股价,那么上述结果可以量化股价极值的概率分布。这对风控以及在买卖股票时计算合理的限价单价格都是很有帮助的。

最后一个性质是布朗运动作为随机过程的一个至关重要的性质,即它虽然连续,但是它处处不可微分(这一点可以通过利用中值定理以及性质三的结论,使用反证法来证明)。这从直观上非常好理解。再来看看上面那 15 条布朗运动的样本轨迹,每一条都一直在上下波动、充分地展示了其随机性。显然,布朗运动的轨迹和我们熟悉的任何连续、平滑的方程轨迹完全不同。

不可微分性意味着古典微积分(classical calculus)中的分析手段在布朗运动面前黯然失效。这在当时无疑是个令人沮丧的消息。因为人们好不容易找到了一个简单实用的随机过程,但却缺少进一步研究它的手段。然而,这一切都随着伊藤微积分(Itō calculus)的出现而迎刃而解。毫不夸张的说,伊藤微积分奠定了现代金融数学的基础。

二次变分

考虑时间区间 [公式] 和该区间内的一个划分 [公式] ,则对于任意一个连续函数 [公式] ,它的二次变分(quadratic variation)定义为:

[公式]

对于一个连续且在 0 到 [公式] 内处处可微的函数 [公式] ,通过利用古典微积分中的中值定理很容易得到如下不等式:

[公式]

这说明随着对时间区间 [公式] 越来越细的划分,即 [公式] 趋于 0,这个连续且处处可微的函数 [公式] 的二次变分为 0。

那么,如果将 [公式] 换为布朗运动 [公式] 会怎样呢?不要忘了,它虽然连续,但是处处不可微。关于 [公式] 的二次变分有如下定理:

随着对时间区间 [公式] 越来越细的划分,即 [公式] 趋于 0, [公式] 的二次变分等于 [公式] ,即

[公式]

其中 [公式]

布朗运动的这个性质可以通过独立同分布随机变量的大数定理证明。对它的白话说明是,作为一个随机过程,布朗运动的二次变分是 [公式] 而不是 0(与之相对应的是,连续可微函数的二次变分为 0。如何理解它呢?

考虑下面这个示意图。其中蓝色曲线为布朗运动的轨迹,红点为时间划分点对应的该轨迹的位移。显然, [公式] 为任意相邻两个时间点的位移差的平方。二次变分就是这些逐段位移差的累积平方和。

对于一个普通的连续可微函数,随着对区间T越来越细的划分,它的二次变分趋于 0。然而对于布朗运动,其非零的二次变分说明随机性使得它的波动太频繁,以至于不管我们如何细分区间 [公式] 、得到多么微小的划分区间,这些微小区间上的位移差的平方逐段累加起来的总和都不会消失(即二次变分不为 0),而是等于这个区间的长度 [公式] 这是布朗运动的一个非常重要的性质。

布朗运动的二次变分公式也可以写作如下所示的无穷小量(infinitesimal difference)的形式:

[公式]

码了这么多的字来解释二次变分,当然不是为了用它说明布朗运动的波动太频繁;在本文第六节可以看到,二次变分在推导伊藤引理时有非常重要的意义。

用几何布朗运动描述股价

前文介绍了标准布朗运动,它在任意长度为 [公式] 内的分布是均值为 0 方差为 [公式] 的正态分布。现在,考虑给标准布朗运动加上一个仅和时间 [公式] 有关的漂移项 [公式] ,以及一个尺度参数 [公式] ,便得到一个带漂移的布朗运动(Brownian motion with drift),记作 [公式] 。它在任意长度 [公式] 内的分布满足均值为 [公式] ,方差为 [公式] 的正态分布。考虑无穷小量的形式,上式写作

[公式]

这是一个随机微分方程(stochastic differential equation)随机微分方程是普通微分方程的延伸,不同之处在于前者之中至少包括一项随机过程。注意,上式与布朗运动不可微并不矛盾。虽然 [公式] 处处不可微,但是 [公式] 仍有明确的含义,它表示布朗运动在一个无穷小的时间间隔内的变化。

即便是有了带漂移项和尺度参数的布朗运动 [公式] ,它仍然不是描述股价运动的最佳选择。这是因为 [公式] ,或者 [公式] ,的取值随着时间 [公式] 的变化可以是负数,但是股票的价格显然不能是负数。股价虽然不能是负数,但是股票的收益率却有正有负,因此 [公式] 可以被用来描述收益率

假设 [公式] 为股票的价格,则 [公式] 为股价在无穷小的时间间隔内的变化量,而 [公式] 就是这段间隔内的收益率,因此有

[公式]

因此 [公式] 的随机微分方程为:

[公式]

满足上述随机微分方程的股价 [公式] 是一个几何布朗运动。人们喜欢使用几何布朗运动来描述股价的原因是:

  1. 正态分布:经验事实证明,股票价格的连续复利收益率近似地服从正态分布;

  2. 马尔科夫过程:由布朗运动的性质可知,服从上述模型的股票价格是一个马尔科夫过程,即当前价格就包含了对其未来做预测所需的全部信息,这与弱有效市场假说相符;

  3. 布朗运动在时间上处处不可微以及二次变分不为零的性质符合股票收益率在时间上存在转折尖点的特征。

当然,为了使用 [公式] 对股价进行分析,必须能够求解上述随机微分方程。这需要用到伊藤微积分中的相关内容。因此关于 [公式] 的求解将会在本系列的后篇中具体介绍。

在结束本节之前,再来看一个关于带漂移项的布朗运动的有意思的例子。考虑一个正实数 [公式] ,令 [公式] 。由于 [公式] 的期望为 0,因此 [公式] 的期望为 [公式] 。我们好奇的是,随着时间 [公式] 的推移, [公式] 的取值到底是由 [公式] 主宰还是由 [公式] 主宰。事实上,可以证明, [公式] 的取值是由 [公式] 支配。对于任何给定的 [公式] ,只要时间 [公式] 足够长,那么可以证明 [公式] 总会在 [公式] 和 [公式] 之间!

怎么样?有没有从这个例子中受到什么启发?它说明,如果我们坚信股市长期来看有慢牛行情( [公式] ),那么我们就应该欣然的接受它的任何(短期)波动而坚持持股(即忽略 [公式] 的随机性造成的扰动)。因为长期来看股价的变化是由 [公式] 决定的。我猜巴菲特一定是个数学家,他一定深谙此道,且通过其价值投资体系使得他的投资组合有着比美股指数更高的 μ,因此获得了长期稳定的超额收益。



绘制结果图

下面的代码使用Matplotlib来绘制一组随机过程。

布朗运动随机过程

布朗运动 是由悬浮在气体或液体中的颗粒表现出的随机运动。这种随机运动是由颗粒与液体或气体中的原子或分子碰撞引起的。布朗运动以植物学家罗伯特·布朗的名字命名,他观察了1827年的随机运动。 


视频

量化交易陷阱和R语言改进股票配对交易策略分析中国股市投资组合

探索见解

去bilibili观看

探索更多视频

在实践中,布朗运动不用于模拟资产价格。我已将其包含在内,因为它是本文中讨论的每个其他随机过程的基础。

def plot_stochastic_processes(processes, title):
    """
此方法绘制具有指定标题的随机过程列表
     :return:绘制两个图
    """
    plt.style.use(['bmh'])
    fig, ax = plt.subplots(1)
    fig.suptitle(title, fontsize=16)
    ax.set_xlabel('Time, t')
    ax.set_ylabel('Simulated Asset Price')
    x_axis = numpy.arange(0, len(processes[0]), 1)
    for i in range(len(processes)):
        plt.plot(x_axis, processes[i])
    plt.show()

以下是此方法生成的输出示例。

import math
import numpy
import random
import decimal
import scipy.linalg
import numpy.random as nrand
import matplotlib.pyplot as plt

 

def brownian_motion_log_returns(param):
 
    sqrt_delta_sigma = math.sqrt(param.all_delta) * param.all_sigma
    return nrand.normal(loc=0, scale=sqrt_delta_sigma, size=param.all_time)


def brownian_motion_levels(param):
   
    return convert_to_prices(param, brownian_motion_log_returns(param))

使用布朗运动随机过程模拟资产价格:5条路径

几何布朗运动随机过程

几何布朗运动(GBM)由费舍尔布莱克和迈伦斯科尔斯推广,他们在1973年的论文“期权定价和公司负债”中使用它来推导出Black Scholes方程。几何布朗运动基本上是布朗运动,具有漂移分量和波动率分量。

其中是资产价格S在时间t的变化 ; μ是每年预期的百分比漂移,dt代表时间,σ是资产价格中预期的每日波动率,Wt是Wiener过程,也称为布朗运动。如下所示,布朗运动代码用于几何布朗运动方法以构造Wt的序列。

以下是此方法生成的输出示例。请注意,平均而言,生成的路径随着时间的推移而向上漂移,并且可能的结束价格变化较大。在这个例子中,路径以每年14%的平均速率增长,因此预期回报率等于14%,分别为三年和一年(800天)。

使用几何布朗运动随机过程模拟资产价格。

Merton跳跃扩散随机过程

Robert C. Merton是最早解决Fisher Black和Myron Scholes提出的几何布朗随机过程中一些局限性的学者之一。1997年,默顿和斯科尔斯因其工作获得了诺贝尔经济学奖。

其中是具有速率泊松过程λ和ÿ我是如下的对数正态分布的随机变量。

请注意,由于跳跃扩散过程引入了向下的不连续或跳跃,因此资产的平均预期收益率略低。

使用默顿跳跃扩散几何布朗运动随机过程模拟资产价格。

Heston随机波动率过程

原始的几何布朗运动随机过程假设随时间的波动是恒定的。在1990年代早期,Steven Heston放宽了这个假设,并将几何布朗运动模型扩展到包括随机波动率。 

请注意,随着时间的推移,资产价格会变得更加不稳定,从而导致潜在资产价格在预测结束时飙升。出现这种现象是因为我将长期平均波动率设定为远高于起始波动率的数字。

使用Heston随机波动率几何布朗运动随机过程模拟资产价格。

COX INGERSOLL ROSS随机过程

COX INGERSOLL ROSS(CIR) 随机过程是用来描述一段时间的利率变化。

 其中是Wiener过程,a是过程均值恢复的速率(较大的数字导致更快的均值回复过程),b是长期平均利率,σ是过程的波动率。CIR随机过程如下。 

利用Cox Ingersoll Ross均值回归随机过程模拟利率。

ORNSTEIN-UHLENBECK随机过程

Ornstein Uhlenbeck过程以Leonard Ornstein和George Eugene Uhlenbeck命名。Ornstein Uhlenbeck随机过程与CIR过程之间的区别在于CIR过程将随机分量乘以前一个利率值的平方根。 

 其中是Wiener过程,a是过程均值恢复的速率(较大的数字导致更快的均值回复过程),b是长期平均利率,σ是过程的波动率。 

利用Ornstein Uhlenbeck均值回归随机过程模拟利率。

衍生品定价和套期保值的随机过程

随机过程在量化金融中的最大应用是衍生品定价。

当对衍生品进行定价时,大多数量子将使用两种方法中的一种。他们要么为他们定价的衍生物解决(或找到解决方案)Black Scholes模型,要么他们将使用模拟方法来估计导数的值。这两种技术都严重依赖于使用随机过程来模拟底层证券。

衍生定价方法一 Black Schole

Black Scholes模型用于在一组假设下对特定类型的衍生品合约进行定价。这些假设包括:(1)存在无风险利率,任何金额可以借入或借出,(2)基础价格根据几何布朗运动随机过程(稍后讨论),(3)进化基础不支付股息,(4)市场上没有套利机会,(5)市场无摩擦意味着交易成本为零,(6)可以买入或减去任何数量的潜在的。 

在这些假设下,可以导出着名的Black Scholes偏微分方程。 

Black Scholes公式以及各种封闭形式期权定价公式的推导,是过去三十年中衍生品交易所大量增长的主要原因。

导数定价 方法二 – 模拟方法

鉴于Black Scholes公式隐含的局限性和假设,通常采用蒙特卡罗方法(模拟)来为更少的简化假设。

这两个选项在计算复杂性和时间之间进行权衡。每次想要对导数进行定价时,使用模拟方法计算复杂度更高,但是为替代随机过程推导Black Scholes偏微分方程的“等价”更加耗时,然后仍然找到封闭形式的衍生品定价式。因此,大多数量子使用模拟方法。

想要这样做的原因如下图所示。事实上,你如何选择和校准你的随机过程将对期权的预期收益产生重大影响,因此它的价值也是如此。

红色椭圆形显示市场跳跃的位置 。

使用衍生工具进行套期保值

套期保值是风险管理战略,旨在减少的量可对冲风险的投资组合暴露。可对冲风险包括股票风险,利率风险,货币风险,信用风险,波动风险和商品风险。套期保值是通过投资与投资组合中的基础负相关的资产来完成的。最简单的例子是在股票上买入看跌期权。当股票表现不佳时,看跌期权表现良好,而整体投资组合并没有像没有对冲时那样糟糕。净效应是抑制回报或下降。

公司和基金将尝试确定投资组合所面临的风险因素并对冲这些风险因素。

除了我上面提到的问题之外,还有一些额外的“现实世界”问题。一个例子是一般成本和套期保值程序的复杂性(套期保值可能非常昂贵)。对于组织而言,问题在于,在出现不利损失的情况下,对冲风险或仅仅保留更多资本是否更便宜。近年来,诸如Solvency II和Basel III等法规要求银行,对冲基金和保险公司预留更多资金来支持其投资组合。储备通常保留在高流动性证券中,预期收益很低,如国库券。

结论

随机过程对于描述我们周围世界中发现的随机过程非常有用。它们用于工程,遗传学,物理学和定量金融。数量使用随机过程来预测市场可能的回报和利率随时间的变化。随机过程通常与蒙特卡罗方法结合使用,以得出非处方衍生工具的公允价值。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds