美式期权定价python_美式期权baw定价的python实现
这一年多,写小程序的语言,逐步从matalb转到了python。实际上,我觉得MATLAB对于我来说,要友好很多,帮助文件论述清晰,还有详尽的示例,而且相关工具函数齐备,临时做些计算非常方便。不过,知乎上提及金融分析,基本上都是python了,而且社区论坛python也要活跃很多。虽然这些论坛主要是搞程序的在做,但对新进入的人来说,肯定优选python作为入门工具了。Matlab在金融工程里面的份额肯定要减少很多了。
# -*- coding: utf-8 -*-
"""
__author__ = 'laofish'
__title__=pyderivatives_fun.py
__mtime__ = 2017-01-07
"""
import numpy as np
import time
import pandas as pd
from optbkfun import *
from scipy.stats import norm
# from statsmodels import *
import scipy.optimize as opt
from math import * # cmath支持负数
class opttypeerr(Exception):
"""自定义期权类型错误"""
# 上面这种语法实际上是一个类的继承语法
def __init__(self, value):
Exception.__init__(self)
self.value = "期权类型错误"
def bsprice(S,K,sigma,T,r):
"""普通期权的bs定价公式"""
d1=(log(S/K)+(r+sigma**2/2)*T)/(sigma*sqrt(T))
d2=d1-sigma*sqrt(T)
c=S*norm.cdf(d1)-K*exp(-r*T)*norm.cdf(d2)
p=K*exp(-r*T)*norm.cdf(-d2)-S*norm.cdf(-d1)
return [c,p]
def bsmprice(S,K,sigma,T,r,q):
"""普通期权的bsm定价公式,带股息率"""
d1=(log(S/K)+(r-q+sigma**2/2)*T)/(sigma*sqrt(T))
d2=d1-sigma*sqrt(T)
c=S*exp(-q*T)*norm.cdf(d1)-K*exp(-r*T)*norm.cdf(d2)
p=K*exp(-r*T)*norm.cdf(-d2)-S*exp(-q*T)*norm.cdf(-d1)
return [c,p]
def futOptPrice(F,K,sigma,T,r):
"""black76 期货期权定价公式"""
# sigma为期货波动率
# 期货和期权的到期日不需要一致
d1=(log(F/K)+sigma**2*T/2)/(sigma*sqrt(T))
d2=d1-sigma*sqrt(T)
c=exp(-r*T)*(F*norm.cdf(d1)-K*norm.cdf(d2))
p=exp(-r*T)*(K*norm.cdf(-d2)-F*norm.cdf(-d1))
return [c,p]
def imp_br(c,p,S,K,r,T):
"""计算隐含股息率"""
q=-1/T*log((c-p+K*exp(-r*T))/S)
return q
def findSx(Sx,K,r,q,v,T,PutCall):
"""找到美式期权提前行权的Sx"""
n = 2 * (r - q) / v ** 2
k = 2 * r / v ** 2 / (1 - exp(-r * T))
sigma=v
if Sx<0:
y=1e1000
elif PutCall=='C':
q2 = (1-n+sqrt((n-1)**2+4*k))/2
y = (bsmprice(Sx,K,sigma,T,r,q)[0]
+ (1 - exp(-q * T) * norm.cdf((log(Sx / K) + (r - q + v **2 / 2)) / v / sqrt(T))) * Sx / q2
- Sx + K) ** 2
elif PutCall=='P':
q1 = (1 - n - sqrt((n - 1) ** 2 + 4 * k)) / 2
y = (bsmprice(Sx,K,sigma,T,r,q)[1]
- (1 - exp(-q * T) * norm.cdf(-(log(Sx / K) + (r - q + v ** 2 / 2)) / v / sqrt(T))) * Sx / q1
+ Sx - K) ** 2
else:
raise opttypeerr
return y
# def findSx_baw(x)
def bawPrice(S,K,sigma,T,r,q):
"""美式期权baw定价近似解法"""
v=sigma
[c,p]=bsmprice(S,K,sigma,T,r,q)
start = S
func=lambda s:findSx(s, K, r, q, v, T, 'C')
data = opt.fmin(func, start)
Sx=data[0]
# print(data)
d1 = (log(Sx / K) + (r - q + v ** 2 / 2)) / v / sqrt(T)
n = 2 * (r - q) / v ** 2
k = 2 * r / v ** 2 / (1 - exp(-r * T))
q2 = (1 - n + sqrt((n - 1) ** 2 + 4 * k)) / 2
A2 = Sx * (1 - exp(-q * T) * norm.cdf(d1)) / q2
if S < Sx:
ac = c + A2 * (S / Sx) ** q2
else:
ac = S - K
print(Sx)
func = lambda s: findSx(s, K, r, q, v, T, 'P')
data= opt.fmin(func, start)
Sx=data[0]
d1 = (log(Sx/K) + (r - q + v ** 2 / 2)) / v / sqrt(T)
n = 2 * (r - q) / v ** 2
k = 2 * r / v ** 2 / (1 - exp(-r * T))
q1 = (1 - n - sqrt((n - 1) ** 2 + 4 * k)) / 2
A1 = -Sx * (1 - exp(-q * T) * norm.cdf(-d1)) / q1
if S > Sx:
ap = p + A1 * (S / Sx) ** q1
else:
ap = K - S
print(Sx)
return [ac,ap]
if __name__=='__main__':
try:
bawPrice(100, 150, 0.2, 0.3, 0.04, 0.01)
print(bsprice(100,100,0.2,1,0.05))
print(futOptPrice(20, 18, 0.25, 4/12, 0.09))
except opttypeerr as e:
print(e.value)
美式期权定价python_美式期权baw定价的python实现相关推荐
- 美式期权定价python_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...
二叉树一种常用的期权定价方法,相比BSM模型,这个方法适用范围更广,可以为美式期权等一些其他品种定价.该方法是保持波动率不变的条件下,将价格路径做简化,根据简化的路径做分析和计算. 本文首先介绍使用二 ...
- 美式期权定价python_【优质好课】Python量化期权实战应用
优质好课 · 涨价预警 <Python量化期权实战应用>课程,在预售初期就备受关注,课程开始上线以来,内容更是受到了广大学员的一致好评. 现在,眼看着课程就快要更新完毕了,如果还没有开始学 ...
- 美式期权定价python_蒙特卡洛模拟和美式期权定价
最近面试的时候,面试官问我怎么用蒙卡模拟无股息的美式期权定价.我瞬间石化...不怕死地申请了期权建模的实习...主要参考课件 主要内容二叉树定价推导+Python Longstaff-Schwartz ...
- python期权定价代码_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...
二叉树一种常用的期权定价方法,相比BSM模型,这个方法适用范围更广,可以为美式期权等一些其他品种定价.该方法是保持波动率不变的条件下,将价格路径做简化,根据简化的路径做分析和计算. 本文首先介绍使用二 ...
- BAW美式期权定价半解析解
BAW美式期权定价半解析解 参考文献:G. Barone-Adesi & R. E. Whaley, Efficient Analytic Approximation of American ...
- 期权定价中的BAW和CRR模型
随着中国市场商品期权上市步伐加快,我们可以发现其大多数都是美式期权. 由于美式期权在到期前任何一个交易都可进行行权,这使得其定价的复杂度远大于欧式期权:而美式期权上不存在封闭解,必须求助于数值计算方式 ...
- 美式期权定价方法之最小二乘蒙特卡洛模拟(LSM)
美式期权定价方法之最小二乘蒙特卡洛模拟 前言 前文对欧式期权的蒙特卡洛模拟定价方法进行了介绍和python量化,本章节主要是对前一章节的补充.也就是介绍美式期权的蒙特卡洛定价方法. 一.美式期权 不同 ...
- 凤凰式期权matlab代码,美式期权二叉树定价及MATLAB程序.doc
美式期权二叉树定价及MATLAB程序 金融随机分析课程 美式期权的二叉树定价 1.对于连续随机游走: 可以用离散格随机游走模型来表示,即标的资产的价格只在离散时间点,2,3,-,N取值,表示很小但非无 ...
- 最小二乘蒙特卡洛模拟方法-美式期权定价
对于最小二乘蒙特卡洛模拟方法,相信很多人刚开始都搞不清楚到底是怎么回事,特别是对于非金融专业的同学来说,解决此类问题有点吃力,但解决美式期权定价问题,此方法被广泛使用,下面给出介绍: 由于美式期权允许 ...
- Matlab编写二叉树定价公式,美式期权二叉树定价及MATLAB程序
金融随机分析的内容 金融随机分析课程 美式期权的二叉树定价 1.对于连续随机游走: dS Sdt SdZ 可以用离散格随机游走模型来表示,即标的资产的价格只在离散时间点 t,2 t,3 t,-,N t ...
最新文章
- appium: adb server is out of date.killing
- Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
- IOS NSArray,NSDictionary
- 南岸焊接机器人厂_严选原料,机器人焊接,探秘能达到奔驰标准的亿利生产线...
- 【转载】C++知识库内容精选 尽览所有核心技术点
- docker安装以及部署springboot项目
- 15 张 Vim 速查表奉上,帮你提高N倍效率!
- 7类数据分析常见的统计陷阱,快来排雷!
- C程序之修改Windows的控制台颜色(转载)
- QCC频率校准工具定频
- Linux文件颜色含义
- com.android.pngp.tln,杂七杂八的记录
- 机械转行嵌入式成功上岸!
- 利用VMM建立基于事务的层次化验证平台
- 【微服务|Sentinel】实时监控|RT|吞吐量|并发数|QPS
- 版本号(version number)
- 免费java视频教程大全在线观看
- AddressBook 地址簿 (电话簿) 访问与修改
- Yarn Clinet模式运行spark报错问题
- SQL语句merge into的用法