编程金融小白学 股票期权 lv.1 期权定义

上一篇 基本概念

编程金融小白学 股票期权

期权的定义

  • 上篇博客介绍了基本的概念。这次就来更深入的理解。

  • 先回顾一下各个术语的定义。

  • 权利的买方:期权多头

  • 权利的卖方:期权空头

  • 权利是未来买资产:认购期权,看涨期权

  • 权利是未来卖资产:认沽期权,看跌期权

  • 标的资产:买的是什么资产 和 多少数量

  • 行权价:有权利买卖的价格

  • 到期日:合约未来到期的日期

对比 期权多头与空头

对比期权多头期权空头
义务支付期权费配合多头行权
权利决定是否行权收取期权费
最大收益看涨:理论无线
看跌:行权价-期权费
期权费
最大亏损期权费(100%)看涨:理论无线
看跌:行权价-期权费
保证金0初始保证金与追加保证金

对比 期权与期货

  • 期货 (Futures)
  • 更改之前定义的期权类 把认购与认沽的现价输入支持 array 格式。
  • 增加 多头空头转换 buy True 为多头,False 为空头
 # 导入 需要的 library 库  
import numpy as np # 科学计算
import matplotlib.pyplot as plt # 画图
plt.rcParams['font.sans-serif'] = ['FangSong'] # 设置中文
plt.rcParams['axes.unicode_minus'] = False # 设置中文负号

class Option:
    def __init__(self, option_price:float, deposit:float, buy=True):
        self.opt = option_price
        self.dep = deposit
        self.buy = 1 if buy else -1
    
    def call_opt(self, current:np.array):
        '''
        认购期权(买)
        若 现价 - 期权价 < 0 ,不履行合约, 扣除定金
        若 现价 - 期权价 > 0 ,履行合约,扣除定金
        '''
        return self.buy*((current-self.opt)*(current>=self.opt)-self.dep)
    
    def put_opt(self, current:np.array):
        '''
        认沽期权(卖)
        若 期权价 - 现价 < 0 ,不履行合约, 扣除定金
        若 期权价 - 现价 > 0 ,履行合约,扣除定金
        '''
        return self.buy*((self.opt-current)*(current<=self.opt) - self.dep)
    
    def __repr__(self):
        return f"期权(期权价{self.opt},定金{self.dep})"
    
# 买入 期权价 500元的期权,定金100元
buy = Option(500,100)
price = np.linspace(0,1000,101)
buy_call = buy.call_opt(price)
buy_put = buy.put_opt(price)
buy_future = price-500
plt.figure(figsize=(8,5), dpi=600)
plt.axhline(y=0,ls="-",c="black")
plt.plot(price,buy_call,color='red',label='认购多头')
plt.plot(price,buy_put,color='green',label='认沽多头')
plt.plot(price,buy_future,color='blue',label='期货多头')
plt.grid(True)
plt.title('对比 期权与期货 的多头')
plt.ylabel('收益')
plt.xlabel('到期价格')
plt.legend(loc='upper right')
plt.ylim((-300,300))
plt.show()

2

  • 由此可以看出,买入期权 主要是买入它的波动率,只要波动率越大,那么就越容易赚钱。而期货不同,它没有对波动有特别大的偏好,波动越大,代表风险越大。
# 卖出 期权价 500元的期权,定金100元
sell = Option(500,100,False)
price = np.linspace(0,1000,101)
sell_call = sell.call_opt(price)
sell_put = sell.put_opt(price)
sell_future = -(price-500)
plt.figure(figsize=(8,5), dpi=600)
plt.axhline(y=0,ls="-",c="black")
plt.plot(price,sell_call,color='red',label='认购空头')
plt.plot(price,sell_put,color='green',label='认沽空头')
plt.plot(price,sell_future,color='blue',label='期货空头')
plt.grid(True)
plt.title('对比 期权与期货 的空头')
plt.ylabel('收益')
plt.xlabel('到期价格')
plt.legend(loc='upper right')
plt.ylim((-300,300))
plt.show()

4

  • 在空头这张图 更可以直观看出,期货没有对波动有倾向性偏好。但做期权空头,说明 投资方 认为 波动趋近于平稳。
对比期权(Options)期货(Future)
合约性质卖方必须履行义务买卖双方都必须履行合约义务域责任
多头最大收益无线 或
执行价-期权价
无线
多头最大损失只限于期权费约定价格
空头最大收益只限于期权费约定价格
空头最大损失无线 或
执行价-期权价
无线
缴纳保证金卖方双方
影响因素涨跌方向、波动率涨跌方向
时间损耗

保证金

  • 多头无需缴纳保证金

  • 空头看涨保证金计算(两者取最大):

    1. ( 结 算 价 ) 期 权 费 收 入 + 标 的 资 产 收 盘 价 值 × 10 % − 虚 值 额 (结算价)期权费收入+标的资产收盘价值 \times 10 \% - 虚值额 +×10%
    2. ( 结 算 价 ) 期 权 费 收 入 + 标 的 资 产 收 盘 价 值 × 5 % (结算价)期权费收入+标的资产收盘价值 \times 5 \% +×5%
  • 空头看跌保证金计算(两者取最大):

    1. ( 结 算 价 ) 期 权 费 收 入 + 标 的 资 产 收 盘 价 值 × 10 % − 虚 值 额 (结算价)期权费收入+标的资产收盘价值 \times 10 \% - 虚值额 +×10%
    2. ( 结 算 价 ) 期 权 费 收 入 + 行 权 价 值 × 5 % (结算价)期权费收入+行权价值 \times 5 \% +×5%

使用python 来 模拟一个实例

  • 卖空一手当日结算价为 40点,行权价为 2200点的 一个月期 看涨期权,沪深300指数收盘价为 2150点:
def deposit(opt_price,opt_close,settle,vol=1,call=True):
    out_of_money = max((opt_price-opt_close),0) if call else max((opt_close-opt_price),0)
    price_1 = settle + opt_close*0.1- out_of_money
    price_2 = settle + opt_close*0.05 if call else settle + opt_price*0.05
    return max(price_1,price_2)*100*vol
deposit(2200,2150,40,1)
20500.0
  • 最终缴纳的保证金为 20500元。

  • 卖空一手当日结算价为 72点,行权价为 2200点的 一个月期 看跌期权,沪深300指数收盘价为 2150点:

deposit(2200,2150,72,1,False)
28700.0
  • 最终缴纳的保证金为 28700元

欧式看涨期权价格曲线

欧式期权价格曲线

  • 重新定义 期权类 Option,加入更多信息, 详情参考公式来源
    1. 看涨或看跌(c or p)
    2. 标的资产现价(S0)
    3. 期权执行价格(K)
    4. 期权到期时间(t)
    5. 适用的无风险利率(rf)
    6. 适用的波动率(sigma)
    7. 股利信息(本例中使用连续股利率dv)
import scipy.stats as sps

class Options:

    def __init__(self, cp, s0, k, t, r, sigma, dv=0):
        self.cp = 'Call' if (cp == 'C' or cp == 'c') else 'Put'
        self.cp_sign = 1.0 if self.cp == 'Call' else -1.0
        self.s0 = s0 * 1.0
        self.k = k * 1.0
        self.t = t * 1.0
        self.sigma = sigma * 1.0
        self.r = r * 1.0
        self.dv = dv * 1.0
        self.d_1 = (np.log(self.s0 / self.k) + (self.r - self.dv + .5 * self.sigma ** 2) * self.t) / self.sigma / np.sqrt(self.t)
        self.d_2 = self.d_1 - self.sigma * np.sqrt(self.t)

    def bsprice(self):
        return self.cp_sign * self.s0 * np.exp(-self.dv * self.t) * sps.norm.cdf(self.cp_sign * self.d_1) \
               - self.cp_sign * self.k * np.exp(-self.r * self.t) * sps.norm.cdf(self.cp_sign * self.d_2)

    def mcprice(self, iteration=1000000):
        zt = np.random.normal(0, 1, iteration)
        st = self.s0 * np.exp((self.r - self.dv - .5 * self.sigma ** 2) * self.t + self.sigma * self.t ** .5 * zt)
        p = []
        for St in st:
            p.append(max(self.cp_sign * (St - self.k), 0))
        return np.average(p) * np.exp(-self.r * self.t)
欧式看涨期权价格曲线
# 买入 看涨期权价 500元的期权
buy = Option(500,0)
price = np.linspace(0.01,1000,100)
buy_call = buy.call_opt(price)
time_price = np.array([Options('c',x,500,2,0.02,0.5).bsprice() for x in price])
plt.figure(figsize=(8,5), dpi=800)
plt.axvline(x=500,ls="-",c="black")
plt.plot(price,buy_call,color='red',label='期权价格下限')
plt.plot(price,price,color='green',label='期权价格上限')
plt.plot(price,time_price,color='blue',label='看涨价格曲线')
plt.fill_between(price,time_price,buy_call,color='lightskyblue',label='时间价值')
plt.fill_between(price,buy_call,color='mistyrose',label='内在价值')
plt.title('欧式看涨期权价格曲线')
plt.ylabel('看涨期权价格')
plt.xticks([200,500,800],['虚值期权','平值期权','实值期权'])
plt.yticks([0],[0])
plt.legend(loc='upper left')
plt.ylim((-10,600))
plt.xlim((0,1000))
plt.show()

16

欧式期权看跌价格曲线
# 买入 看跌期权价 500元的期权
buy = Option(500,0)
price = np.linspace(0.1,1000,100)
max_price = np.ones(100)*500
buy_call = buy.put_opt(price)
time_price = np.array([Options('p',x,500,2,0.02,0.5).bsprice() for x in price])+20 # 和理想状态有差 加20调整做为调整
plt.figure(figsize=(8,5), dpi=800)
plt.axvline(x=500,ls="-",c="black")
plt.plot(price,buy_call,color='red',label='期权价格下限')
plt.plot(price,max_price,color='green',label='期权价格上限')
plt.plot(price,time_price,color='blue',label='看跌价格曲线')
plt.fill_between(price,time_price,buy_call,color='lightskyblue',label='时间价值')
plt.fill_between(price,buy_call,color='mistyrose',label='内在价值')
plt.title('欧式看跌期权价格曲线')
plt.ylabel('看跌期权价格')
plt.xticks([200,500,800],['实值期权','平值期权','虚值期权'])
plt.yticks([0],[0])
plt.legend(loc='upper left')
plt.ylim((-10,600))
plt.xlim((0,1000))
plt.show()

18

  • 从上面两图中可以看到,时间价值越接近 平值 它的价值越大。越往两边 它的价值自然减少。当然在其他因素不变的话,距离到期时间越短,它的时间价值就越低。呈抛物线加速衰减。

  • 看到这 你可能会冲动 去购买期权,但如果现实都这么容易能赚钱 大家都不用辛苦劳作了。金融市场 风险和利润成正比,以后 如果我有时间的话,会继续补完后面的 各种交易策略 与简易代码,在 预测哪种情况下 可以使用哪种策略等等。

  • 若有帮助请给我 “一键三连”支持一下 (CSDN 应该没有这功能吧2333)

下一篇期权策略

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值