python 运动模拟_Python中的几何布朗运动模拟
这里有一些代码的重新编写,可以使S的符号更直观,并允许您检查答案的合理性。
起始点:在代码中,第二个deltat应该替换为np.sqrt(deltat)。Sourcehere(是的,我知道这不是最官方的,但下面的结果应该让人放心)。
关于短期利率和西格玛值的非年度化的评论可能不正确。这与你看到的向下漂移无关。你需要保持这些年利率。这些将始终是连续复合(恒定)速率。
首先,这里是一个GBM路径生成函数,它来自Yves Hilpisch-Python for Finance,chapter 11。链接中解释了这些参数,但设置与您的非常相似。
def gen_paths(S0, r, sigma, T, M, I):
dt = float(T) / M
paths = np.zeros((M + 1, I), np.float64)
paths[0] = S0
for t in range(1, M + 1):
rand = np.random.standard_normal(I)
paths[t] = paths[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt +
sigma * np.sqrt(dt) * rand)
return paths
设置初始值(但使用N=252,一年中的交易日数作为时间增量):S0 = 100.
K = 100.
r = 0.05
sigma = 0.50
T = 1
N = 252
deltat = T / N
i = 1000
discount_factor = np.exp(-r * T)
然后生成路径:np.random.seed(123)
paths = gen_paths(S0, r, sigma, T, N, i)
现在,要检查:paths[-1]将在过期时获取结束的St值:np.average(paths[-1])
Out[44]: 104.47389541107971
现在的回报是最大的(St - K, 0):CallPayoffAverage = np.average(np.maximum(0, paths[-1] - K))
CallPayoff = discount_factor * CallPayoffAverage
print(CallPayoff)
20.9973601515
如果绘制这些路径(很容易使用pd.DataFrame(paths).plot()),您将看到它们不再是向下的趋势,而是St近似对数正态分布。
最后,这里有一个通过BSM进行的健康检查:class Option(object):
"""Compute European option value, greeks, and implied volatility.
Parameters
==========
S0 : int or float
initial asset value
K : int or float
strike
T : int or float
time to expiration as a fraction of one year
r : int or float
continuously compounded risk free rate, annualized
sigma : int or float
continuously compounded standard deviation of returns
kind : str, {'call', 'put'}, default 'call'
type of option
Resources
=========
http://www.thomasho.com/mainpages/?download=&act=model&file=256
"""
def __init__(self, S0, K, T, r, sigma, kind='call'):
if kind.istitle():
kind = kind.lower()
if kind not in ['call', 'put']:
raise ValueError('Option type must be \'call\' or \'put\'')
self.kind = kind
self.S0 = S0
self.K = K
self.T = T
self.r = r
self.sigma = sigma
self.d1 = ((np.log(self.S0 / self.K)
+ (self.r + 0.5 * self.sigma ** 2) * self.T)
/ (self.sigma * np.sqrt(self.T)))
self.d2 = ((np.log(self.S0 / self.K)
+ (self.r - 0.5 * self.sigma ** 2) * self.T)
/ (self.sigma * np.sqrt(self.T)))
# Several greeks use negated terms dependent on option type
# For example, delta of call is N(d1) and delta put is N(d1) - 1
self.sub = {'call' : [0, 1, -1], 'put' : [-1, -1, 1]}
def value(self):
"""Compute option value."""
return (self.sub[self.kind][1] * self.S0
* norm.cdf(self.sub[self.kind][1] * self.d1, 0.0, 1.0)
+ self.sub[self.kind][2] * self.K * np.exp(-self.r * self.T)
* norm.cdf(self.sub[self.kind][1] * self.d2, 0.0, 1.0))
option.value()
Out[58]: 21.792604212866848
在GBM设置中为i使用更高的值应该会导致更紧密的收敛。
python 运动模拟_Python中的几何布朗运动模拟相关推荐
- python map用法_Python中ChainMap的一种实用用法
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 简而言之ChainMap:将多个字典视为一个,解锁Python超能力. Python标准库中的集合模块包含 ...
- python基本统计量_Python中简单统计量的计算
本篇文章给大家带来的内容是关于Python中简单统计量的计算,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.这些操作都要确保已经在电脑中安装好了Anaconda集成库,如果安装好 ...
- python解析原理_Python 中 -m 的典型用法、原理解析与发展演变
在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...
- python正则表达式空格_python中的正则表达式的使用
一.正则表达式简介 正则表达式:又称正规表示式.正规表示法.正规表达式.规则表示式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或者是RE),是计算 ...
- python wraps模块_python中 wraps 的作用
这里使用两段代码比较加入wraps装饰器后,函数打印的结果对比: 新建文件名:Testword 代码1:不加wraps装饰器 # coding=utf-8 from functools import ...
- 用python输出数组_Python 中输出数组中的全部元素
只需要在开头加上一句即可 import numpy as np np.set_printoptions(threshold=np.inf) Python 输出到文本中 参考:https://blog. ...
- python accept解析_python中requests库使用方法详解
一.什么是Requests Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库.它⽐ urllib 更加⽅便,可以节约我们⼤量的 ...
- python 控制库_python中实现自动化控制pyautogui库使用方法介绍
大家在使用电脑中,有时候需要电脑进行一些繁锁的程序化操作.Python中有一个第三方库,能够帮助大家实现自动化控制电脑完成指定任务.这个库叫pyautogui库.今天,咿哑呀就简单地教大家怎样使用这个 ...
- python 两个[]_Python中的两个测试工具
♚ 作者:jclian,喜欢算法,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量 ...
- python动态显示数据_python中plot实现即时数据动态显示方法
在matlab使用plot函数实现数据动态显示方法总结中介绍了两种实现即时数据动态显示的方法.考虑到使用python的人群日益增多,再加上本人最近想使用python动态显示即时的数据,网上方法很少,固 ...
最新文章
- 中国电子学会图形化四级编程题:成语接龙
- 基于OpenCV的彩色空间互转
- WCF-学习笔记概述之计算服务(1)
- 一眼定位问题,函数计算发布日志关键词秒检索功能
- 【JSP笔记】第三章 JSP内置对象【上】
- Stimulsoft reports .net中创建变量
- 【SSH网上商城项目实战11】查询和删除商品功能的实现
- 【Ionic】Ionic/cmd提示 'node' 不是内部或外部命令,也不是可运行的程序
- JSF 中使用自定义Navigation
- Arcgis Javascript那些事儿(四)--feature access服务编辑feature本质
- 威纶通触摸屏可以解密吗_老电工选型威纶通触摸屏时的3大技巧!知道了能帮你省事不少...
- 七日年化收益率计算器_定投收益率该怎么算?
- Qy词典-免费离线的中英词典
- 高等代数--线性空间
- 《前沿》(Frontiers)系列英文学术期介绍
- 2022—SWJTU-寒假ACM校队选拔赛第一场-题解
- python绝对方向角度值_哪个选项是turtle绘图中角度坐标系的绝对0度方向?_学小易找答案...
- 怎么把计算机硬盘里面的软件放到桌面,怎样将应用放到桌面上
- python学习(二)配置开发IDE(windows)
- Firefly ROC-RK3588S-PC板卡详细介绍
热门文章
- oracle 删除索引报错ORA-01418:sepecified index does not exist
- 外卖返利系统公众号外卖cps返利小程序淘宝客程序淘客侠客外卖CPS
- 阈值分割:最大类间方差法
- Dll入口函数参数详解...
- 二三、A转置乘以A可逆
- android 安装apk -99,Android APK 安装适配
- html5怎么把图片置顶,html/css如何让图片上下居中(居中垂直)?
- 在 COMSOL 中模拟地震波的传播
- xz1刷Android10,索尼xz1国行版安卓9.0固件
- 那些年,我们一起被坑的H5音频