这一年多,写小程序的语言,逐步从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实现相关推荐

  1. 美式期权定价python_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...

    二叉树一种常用的期权定价方法,相比BSM模型,这个方法适用范围更广,可以为美式期权等一些其他品种定价.该方法是保持波动率不变的条件下,将价格路径做简化,根据简化的路径做分析和计算. 本文首先介绍使用二 ...

  2. 美式期权定价python_【优质好课】Python量化期权实战应用

    优质好课 · 涨价预警 <Python量化期权实战应用>课程,在预售初期就备受关注,课程开始上线以来,内容更是受到了广大学员的一致好评. 现在,眼看着课程就快要更新完毕了,如果还没有开始学 ...

  3. 美式期权定价python_蒙特卡洛模拟和美式期权定价

    最近面试的时候,面试官问我怎么用蒙卡模拟无股息的美式期权定价.我瞬间石化...不怕死地申请了期权建模的实习...主要参考课件 主要内容二叉树定价推导+Python Longstaff-Schwartz ...

  4. python期权定价代码_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...

    二叉树一种常用的期权定价方法,相比BSM模型,这个方法适用范围更广,可以为美式期权等一些其他品种定价.该方法是保持波动率不变的条件下,将价格路径做简化,根据简化的路径做分析和计算. 本文首先介绍使用二 ...

  5. BAW美式期权定价半解析解

    BAW美式期权定价半解析解 参考文献:G. Barone-Adesi & R. E. Whaley, Efficient Analytic Approximation of American ...

  6. 期权定价中的BAW和CRR模型

    随着中国市场商品期权上市步伐加快,我们可以发现其大多数都是美式期权. 由于美式期权在到期前任何一个交易都可进行行权,这使得其定价的复杂度远大于欧式期权:而美式期权上不存在封闭解,必须求助于数值计算方式 ...

  7. 美式期权定价方法之最小二乘蒙特卡洛模拟(LSM)

    美式期权定价方法之最小二乘蒙特卡洛模拟 前言 前文对欧式期权的蒙特卡洛模拟定价方法进行了介绍和python量化,本章节主要是对前一章节的补充.也就是介绍美式期权的蒙特卡洛定价方法. 一.美式期权 不同 ...

  8. 凤凰式期权matlab代码,美式期权二叉树定价及MATLAB程序.doc

    美式期权二叉树定价及MATLAB程序 金融随机分析课程 美式期权的二叉树定价 1.对于连续随机游走: 可以用离散格随机游走模型来表示,即标的资产的价格只在离散时间点,2,3,-,N取值,表示很小但非无 ...

  9. 最小二乘蒙特卡洛模拟方法-美式期权定价

    对于最小二乘蒙特卡洛模拟方法,相信很多人刚开始都搞不清楚到底是怎么回事,特别是对于非金融专业的同学来说,解决此类问题有点吃力,但解决美式期权定价问题,此方法被广泛使用,下面给出介绍: 由于美式期权允许 ...

  10. Matlab编写二叉树定价公式,美式期权二叉树定价及MATLAB程序

    金融随机分析的内容 金融随机分析课程 美式期权的二叉树定价 1.对于连续随机游走: dS Sdt SdZ 可以用离散格随机游走模型来表示,即标的资产的价格只在离散时间点 t,2 t,3 t,-,N t ...

最新文章

  1. appium: adb server is out of date.killing
  2. Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
  3. IOS NSArray,NSDictionary
  4. 南岸焊接机器人厂_严选原料,机器人焊接,探秘能达到奔驰标准的亿利生产线...
  5. 【转载】C++知识库内容精选 尽览所有核心技术点
  6. docker安装以及部署springboot项目
  7. 15 张 Vim 速查表奉上,帮你提高N倍效率!
  8. 7类数据分析常见的统计陷阱,快来排雷!
  9. C程序之修改Windows的控制台颜色(转载)
  10. QCC频率校准工具定频
  11. Linux文件颜色含义
  12. com.android.pngp.tln,杂七杂八的记录
  13. 机械转行嵌入式成功上岸!
  14. 利用VMM建立基于事务的层次化验证平台
  15. 【微服务|Sentinel】实时监控|RT|吞吐量|并发数|QPS
  16. 版本号(version number)
  17. 免费java视频教程大全在线观看
  18. AddressBook 地址簿 (电话簿) 访问与修改
  19. Yarn Clinet模式运行spark报错问题
  20. SQL语句merge into的用法

热门文章

  1. 便携版的FeedDemon
  2. 鸿蒙石之鉴老猴死了怎么办,智取芭蕉扇那个剧情选分支1过不了怎么办
  3. 微信小程序仿今日头条小程序端界面和代码演示
  4. 利用python3 爬取 网易云 上 周杰伦所有专辑,歌曲,评论,并完成可视化分析已经歌曲情绪化分析...
  5. 英语魔法师之语法俱乐部阅读笔记
  6. DMS/BSD/ADAS
  7. vue模板中写html,vue中template的三种写法示例
  8. 搭建简易的asp服务器 用于手机安装测试程序
  9. apk软件去广告 傻瓜教程
  10. google scholar 使用不了的问题——已解决