更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。
欧式期权定价回顾
我们通过蒙特卡罗模拟为欧式期权定价的模型可以作为定价各种奇异期权的基础。在我们此前的模拟中,我们定义了一种在到期时分配资产价格的方法,以及一种用该价格评估到期期权价值的方法。
这种模拟方法一般可以被认为是这样的:
while i < num_iterations: S_T = generate_asset_price() payoffs += payoff_function(S_T) i += 1 option_price = exp(-r*T) * (payoffs / num_iterations)
通过改变我们生成资产价格的方式,以及我们评估期权收益的方式,我们可以为一些奇异期权生成价格。详细步骤,请参考我们的历史文章。
二元期权
二元期权(也称为全有全无,或数字期权)是一种收益为一定数量或根本没有收益的期权。 回报通常是固定数量的现金或资产的价值。
对于我们的模拟,我们将研究现金或无现金二元期权。 二元看涨期权和看跌期权的收益如下所示。
二元看涨期权的收益图告诉我们,如果股票价格大于或等于 40.00 美元(我们的行使价),则期权支付 1.00 美元。我们可以将一个二元看涨期权的收益写成一个 Python 函数:
def binary_call_payoff(K, S_T): if S_T >= K: return 1.0 else: return 0.0
模拟计算过程
我们的资产价格仍将遵循几何布朗运动,因此我们可以使用此前文章中的 generate_asset_price() 函数。该函数实现代码如下:
def gbm(S, v, r, T): return S * exp((r - 0.5 * v**2) * T + v * sqrt(T) * random.gauss(0,1.0))
这就是我们需要为二元现金或非现金看涨期权定价的全部内容了。把上述内容组合起来:
import random from math import exp, sqrt def gbm(S, v, r, T): return S * exp((r - 0.5 * v**2) * T + v * sqrt(T) * random.gauss(0,1.0)) def binary_call_payoff(K, S_T): if S_T >= K: return 1.0 else: return 0.0 # parameters S = 40.0 # asset price v = 0.2 # vol of 20% r = 0.01 # rate of 1% maturity = 0.5 K = 40.0 # ATM strike simulations = 50000 payoffs = 0.0 # run simultaion for i in xrange(simulations): S_T = gbm(S, v, r, maturity) payoffs += binary_call_payoff(K, S_T) # find prices option_price = exp(-r * maturity) * (payoffs / float(simulations)) print 'Price: %.8f' % option_price
运行上述代码,得到 0.48413327 的价格,约等于 0.484 。
检验结果
当然,二元期权也可以使用传统的 Black Scholes 模型定价,使用以下公式:
其中 N 是累积正态分布函数,d2 由标准 Black Scholes 公式给出。
让我们通过插入此前模拟中的参数来测试上一步我们所计算的价格是否准确:
>>> from scipy.stats import norm >>> from math import exp, log, sqrt >>> S, K, v, r, T = 100.0, 100.0, 0.2, 0.01, 0.5 >>> d2 = (log(S/K) + (r - 0.5 * v**2) * T) / v*sqrt(T) >>> print exp(-r * T) * norm.cdf(d2) 0.490489409105
可以看到,Black Scholes 公式给出的价格约为 0.490 。这意味着我们的模拟计算价格,仅与BS公式计算的价格相差 0.006 ,从这个结果可以验证,我们的计算结果是比较准确的。
往期干货分享推荐阅读
Omega System Trading and Development Club内部分享策略Easylanguage源码
【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略
AMA指标原作者Perry Kaufman 100+套交易策略源码分享
【数量技术宅|金融数据系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单
【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略
【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数
商品现货数据不好拿?商品季节性难跟踪?一键解决没烦恼的Python爬虫分享
【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品
【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略
【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫