场外期权系列——鲨鱼鳍期权的蒙特卡洛定价

鲨鱼鳍期权是市场上交易非常活跃的一类期权。本文将结合实际品种简要介绍这种期权,并说明如何使用Python对最简单形式的鲨鱼鳍期权进行定价。

首先声明,本文数据均为示意性数据,提供的方法也仅供交流学习用,请勿用于实操。(当然也没人这么可爱吧233)

鲨鱼鳍期权的概念

第一次听到鲨鱼鳍期权的时候我是懵逼的,我甚至以为是标的物为鲨鱼鳍的期权(手动狗头)。其实鲨鱼鳍期权就是我们常说的障碍期权(barrier option)。不过在国内场外市场都称鲨鱼鳍期权。鲨鱼鳍期权又分为欧式鲨鱼鳍和美式鲨鱼鳍,本文先介绍欧式结构,然后美式结构也能很好理解。

与普通的欧式看涨期权相比,欧式看涨鲨鱼鳍仅仅加入敲入锁定收益机制,也就是常说的障碍。对于普通期权来说,标的资产期末价格越高,买方能获得的收益也越高。而鲨鱼鳍期权则给这个收益制定了一个障碍价格,如果标的资产期末价格达到这个障碍价格,也就是常说的敲出,则买方获得敲出收益,这个敲出收益一般比普通期权能获得的期权低一点。

结合以下收益图应该能更好的帮助理解。(图示期权默认行权价等于起始价,实际中也常常这样)

看涨鲨鱼鳍收益图

如图所示,期末价格如果低于行权价,买方获得收益为保底收益2%。随着标的价格上升,买方获得的年化收益率升高。但对于鲨鱼鳍期权来说,这种上涨不是无限制的,如果期末价格大于等于期初价格的110%时,这个期权的收益率则下降为5.5%。这里的110%就是障碍价格,又称敲出价格。您看这个图它像不像一个🦈的鳍?

了解完欧式鲨鱼鳍后,美式鲨鱼鳍也很好理解了。美式鲨鱼鳍要求逐日盯市场,在到期日前的任何一个交易日,如果当日收盘价打到了障碍价格,则这个期权就敲出了,买卖双方在这个时候就确定了双方的收益。以上面的期权为例,如果一个月后期权到期,但今天标的股票上涨了10%,则该美式鲨鱼鳍立即敲出,名义上已经是到期了。

鲨鱼鳍期权的特点

当挂钩标的温和上涨时,鲨鱼鳍期权跟普通期权的收益图完全一致,买方可按照一定的参与率分享上涨收益。但从第一个部分可以看到,由于障碍价格的存在,期权卖方的收益是有限的,因此相对于普通期权来说,鲨鱼鳍期权对卖方更有利,因此相对而言期权费更低。

因此,购买看涨鲨鱼鳍期权的投资者一般会认为未来标的资产很可能温和上涨,此时购买鲨鱼鳍期权的费用要低于购买普通期权的费用。

鲨鱼鳍期权的蒙特卡洛定价

本部分将提供利用蒙特卡洛方法给美式看涨鲨鱼鳍期权定价的Python代码。不知道什么是蒙特卡洛方法的可以点这里看看。

此处假设标的资产价格路径服从几何布朗运动,即:

S_t = S_0 \exp[{(\mu-\frac{1}{2}\sigma^2)t + \sigma W_t}]

其中S_t为标的资产t时刻的价格,S_0为标的资产的初始价格,\mu为标的资产收益率,\sigma为标的资产价格的波动率,或标准差,W_t是一个维纳过程,也称布朗运动,简单地说,W_t服从均值为0,方差为t\sigma^2的正态分布,也可以理解为t个标准正态分布之和。

from scipy.stats import norm
import numpy as np
import pandas as pd
import time, datetime

MC_M = 100000 # 模拟次数

# 此函数用于生成几何布朗运动价格序列
# 输入的参数S为期初价格,T为时间(年),MC_M为模拟次数
def St_MC(S,mu,T,vol):
    # 初始化标准正态分布矩阵,252为一年的交易日总数
    rdmatrix = np.random.randn(MC_M, int(252*T)) 
    rdarray = np.array(rdmatrix)
    M = rdarray.shape[0] # M为模拟次数
    N = rdarray.shape[1] # N为观察次数
    dt = np.linspace(T/N, T, N) # 观察日序列
    W = rdarray.cumsum(1) # 布朗运动累加
    # 初始化价格序列矩阵,多了一列为期初价格
    St = np.ones((M, N + 1)) * S
    # 几何布朗运动序列
    St[:, 1:] = S * np.exp((mu - 1 / 2 * vol ** 2) * dt + vol*np.sqrt(T/N)*W)
    return St

# 看涨鲨鱼鳍(美式)
# 此函数利用蒙特卡洛方法对给定的一组参数(mu, vol)定价
# K为行权价,r为无风险收益率,T为时间(年),vol为波动率
# upout为障碍价格,comp_return为敲出收益率,S为期初价格
def up_out_Am_MC(K,r,mu,T,vol,upout,comp_return,S=100):
    St = St_MC(S,mu,T,vol)
    M = St.shape[0]
    N = St.shape[1]
    f = np.zeros(M) # 初始化每次模拟的期权价格向量
    for i in range(M):
        if St[i,:].max() > upout:
            f[i] = comp_return
        else:
            f[i] = np.maximum(St[i,-1]-K,0)
    return np.exp(-r*T) * f.mean()

# 在实际定价里,我们只能获得mu和vol的大致范围。因此要对每个参数组合定价,取最大值
# vol_range为波动率范围,mu_range为标的资产收益率范围,二者均为list,
# comp_return为敲出收益
def up_out_Am(K,r,T,vol_range,mu_range,upout,comp_return):
    #rdmatrix = np.random.randn(MC_M, int(252*T))
    price = []
    # 遍历每一种(vol, mu)组合
    for vol in np.linspace(vol_range[0],vol_range[1],5):
        for mu in np.linspace(mu_range[0],mu_range[1],5):
            price.append(up_out_Am_MC(K, r, mu, T, vol, upout, comp_return))
    return  max(price) # 取对定价方有利的最大值

# 与美式鲨鱼鳍相比,欧式鲨鱼鳍不同的只是期权的回报函数不同
#看涨鲨鱼鳍(欧式)
def up_out_Eu_MC(K,r,mu,T,vol,upout,comp_return,S=100):
    St = St_MC(S,r,T,vol,r-mu)
    M = St.shape[0]
    f = np.zeros(M)
    for i in range(M):
        if St[i,-1] > upout:
            f[i] = comp_return
        else:
            f[i] = np.maximum(St[i,-1]-K,0)
    return np.exp(-r*T) * f.mean()
def up_out_Eu(K,r,T,vol_range,mu_range,upout,comp_return):
    price = []
    for vol in np.linspace(vol_range[0], vol_range[1], 5): 
        for mu in np.linspace(mu_range[0], mu_range[1], 5):
            price.append(up_out_Eu_MC(K, r, mu, T, vol, upout, comp_return))
    return max(price)

总结

嗨呀,这是我的第一篇博文,写了些实习期间经常遇到的一种期权,其实很简单,对期权有一定了解的人一看就会。那为什么我要写这篇博文呢?我看过一句话说:当你学了一些东西后一定要留下些什么。这些知识或许很简单,但多年后我可能遗忘了,我希望将他们记录下来,写博文则是一种最好的办法。

如果您觉得本文有什么问题,请您根据主页的联系方式联系我,或者在评论区留言,感谢您的支持。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351