R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
原文链接:http://tecdat.cn/?p=11695
近年来,期权交易变得非常流行。 在这篇文章中,您将学习一种期权交易策略,可以用来以较低的价格购买自己喜欢的股票。期权是一种衍生工具。衍生物被誉为20世纪后期的金融革命。衍生产品类型为远期,期货,掉期和期权。衍生工具是从另一项基础资产中获取价值的工具。对于股票期权,其价格取决于标的股票。
在本文的第一篇中,我们将建立两个期权定价模型。第一个是著名的Black Scholes期权定价模型,第二个是Cox-Ross-Rubinstein期权定价模型。之后,我们还将讨论什么是期权,以及如何对隐含波动率进行建模。我们还将讨论为什么在实践中将这两种期权定价公式反向用于计算隐含波动率而不是期权价格。
我们将使用R进行分析。您应该已经安装了R和RStudio。我建议如果您快速实施非常快的程序,则应安装Microsoft R Open。Quantmod是提供技术分析的重要R包。
如上所述的期权从标的股票中驱动价值。问题是我们不知道期权合约是否会被行使。当我们尝试对股票期权合约定价时,这就带来了一定程度的复杂性。Black Scholes公式假定连续的随机过程,而Cox-Ross-Rubinstein模型假定离散的随机过程。因此,让我们从Black Scholes Options的定价公式开始。
Black Scholes股票期权定价公式
Black Scholes期权定价公式作了一些假设。首先是市场没有套利。这意味着不可能有价格差异。第二个假设是基础资产价格遵循布朗运动。第三个假设表明基础股票不支付任何股息。第四个假设是不涉及交易成本,并且可以以任何分数进行基础股票的买卖。最后一个假设是我们知道短期利率,并且该利率随时间是恒定的。现在,我们不需要详细讨论如何数学公式推导该公式。当我们知道用于计算股票期权价格的不同参数时,将使用R来计算股票期权价格。下面我们使用R来计算3个月到期的Apple AAPL股票看涨期权价格。苹果AAPL股票价格为130美元,股票期权合约行使价为140美元。
> library(fOptions)Loading required package: timeDateLoading required package: timeSeriesLoading required package: fBasics> GBSOption(TypeFlag = "c", S = 130, X =140, Time = 1/4, r = 0.02, + sigma = 0.22, b = 0.02)Title: Black Scholes Option Valuation Call: GBSOption(TypeFlag = "c", S = 130, X = 140, Time = 1/4, r = 0.02, b = 0.02, sigma = 0.22)Parameters: Value: TypeFlag c S 130 X 140 Time 0.25 r 0.02 b 0.02 sigma 0.22 Option Price: 2.382111 Description: Sun May 07 18:12:25 2017
首先我们加载fOptions库,c表示看涨期权.S是股票价格,即每股130美元。X是股票行使价,每股140美元。短期利率为2%。隐含波动率假设为22%。苹果股票的看涨期权价格为2.38美元。这就是它的工作方式。苹果目前的股价为每股130美元。我们购买看涨期权。我们认为苹果股票的价格将会上涨,因此我们购买了看涨期权为140美元的苹果股票3个月到期的看涨期权。如果价格超过140美元,我们可以每股140美元的价格购买AAPL股票。目前,苹果股票的交易价格为每股148美元。因此,您可以看到我们可以便宜地购买Apple股票。我们将以140美元的价格行使苹果股票看涨期权合约,然后以148美元的价格在市场上出售股票,从而实现每股8美元的利润。由于价格是2美元。每100股38股,我们获得了可观的利润。 假设我们的行使价为135美元。
Title: Black Scholes Option Valuation Call: GBSOption(TypeFlag = "c", S = 130, X = 135, Time = 1/4, r = 0.02, b = 0.02, sigma = 0.22)Parameters: Value: TypeFlag c S 130 X 135 Time 0.25 r 0.02 b 0.02 sigma 0.22 Option Price: 3.88815 Description: Sun May 07 18:22:29 2017
在这种情况下,股票期权的价格提高到了$ 3.88。现在,如上所述,我们不需要知道如何得出Black Scholes期权定价公式。我们只需要在公式中插入不同的参数,例如看涨/卖出期权,股票价格,执行价格,短期利率,隐含波动率等。现在的问题是我们没有任何方法可以计算隐含波动率。我们只是假设了隐含波动率公式。如果您不知道什么是不同的参数,请使用以下公式。
我们还可以计算看跌期权的价格。使用R时也非常容易。以下是看跌期权价格的计算。我们在公式中将c更改为p。苹果股价为130美元。看跌期权的行使价为135美元。有效期为3个月。短期利率为2%。隐含波动率为22%。
> GBSOption(TypeFlag = "p", S = 130, X =135, Time = 1/4, r = 0.02, sigma+ = 0.22, b = 0.02)@price[1] 8.214834
现在,如上所述,布莱克斯科尔斯期权定价公式很大程度上取决于隐含波动率。隐含波动率是我们所不知道的。因此,实际上我们不能使用此布莱克斯科尔斯股票期权价格公式。在大多数情况下,我们使用相反的公式。我们在公式中插入股票期权价格并计算隐含波动率。我们可以使用GARCH模型来计算波动率。
Cox-Ross-Rubinstein股票期权定价公式
Cox-Ross-Rubinstein公式也称为CRR公式,与Black Scholes股票期权定价公式不同。CRR公式中的基本假设是标的股票价格遵循离散的二项分布。这意味着股票价格在每个时期要么上升一定量,要么下降一定量。二叉树正在重组。这意味着在两个时期内,价格可以先涨后跌,或者在相同的最终价格下涨跌。以下是使用与Black Scholes公式相同的行使价,隐含波动率和短期利率来计算Apple股票期权价格。
> [1] 4.033903>[1] 8.360588
您可以看到使用Cox-Ross-Rubinstein公式的期权价格与Black Scholes公式相似但不相同,现在无需对CRR公式进行复杂的数学推导。我们还可以绘制上述看涨期权公式以及看跌期权公式二项式树3个周期。以下是看涨期权二项式树的代码。
通过将ce更改为pe,我们还可以绘制看跌期权二叉树。 以下是看涨期权二叉树图。
以下是看跌期权二叉树。
现在您看到了两个公式之间的期权价格差异。价格差异不大。Black Scholes计算的看涨期权价格为3.88美元,而Cox-Ross-Rubinstein公式计算的看涨期权价格为4.03美元。差别不是很大,但确实存在。这是由于两个公式的数学推导不同。在Black Scholes公式中,我们假设一个连续的随机公式,而在Cox-Ross-Rubinstein公式中,我们假设一个离散的二项式公式。W可以通过减少Cox-Ross-Rubinstein公式中的时间步长来减少价格差异。
如何计算期权?
希腊人衡量期权合约对不同市场因素的敏感性。例如,delta是对基础股票价格的敏感性。Gamma是对基础股票价格变化的敏感性。您可以将伽玛三角洲称为三角洲。Theta对时间敏感,而rho对无风险利率敏感。最后,vega是对隐含波动率的敏感度。用数学术语来说,所有希腊语都是偏导数,用于衡量某些参数的变化率。下面我们使用R计算 。
> delta gamma vega theta rho 0.4041424 0.0270888 25.1790377 -12.0517840 12.1625922
您可以看到R在计算 时非常快。跨距交易是重要的期权交易策略。我们通过同时购买看跌期权和看涨期权来构造一个跨步。以下是跨度的增量计算。
> plot(100:200, rowSums(straddles), type='l', + xlab='Price of the underlying (S)', ylab = 'Delta of straddle')
计量经济学是许多交易者都不知道的重要主题。 以下是使用苹果股票看跌期权和看涨期权的跨式期权构建的增量图。
- go语言单例模式(Singleton)实例分析
- C++ template的一些高级用法(元编码,可变参数,仿函数,using使用方法,. C++ 智能指针)
- Golang memory model
- go的非侵入式接口
- C++ 如何重复利用一个内存地址块
- 如何减轻挖矿攻击给企业安全带来的威胁
- C++ 高级语法学习与总结(代码实例)
- golang使用原始套接字构造UDP包
- C与C++在const用法上的区别
- vs---错误收集并自己解决后归纳
- PIL中的Image和numpy中的数组array相互转换
- 神经网络模型之AlexNet的一些总结
- caffe安装过程中遇到的问题以及解决方法
- Go语言中Socket通信TCP服务端
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring Web MVC 请求消息
- Codeforces Round #633 (Div. 2) A Filling Diamonds (假题,观察)
- 如何管理和组织一个机器学习项目
- Spring Web MVC 简单使用
- Spring 中的 JDBC
- IDEA 快键键:展开所有文件夹、折叠所有文件夹(自定义)
- mysql 数据库的悲观锁和乐观锁
- C语言 二维数组和指针的一些笔记
- Java SpringBoot2.3.4 配置redis 基于lettuce 同时支持集群与单机 配置密码加密 并使用redisson分布式锁
- 使用elasticsearch-dump迁移elasticsearch集群数据
- Python爬虫之scrapy的入门使用
- 告别传统工业互联网,提高数字管控思维:三维组态分布式能源站
- 爱奇艺iOS移动端网络优化实践:请求成功率优化
- Java数据类型
- Python爬虫之scrapy构造并发送请求