绘制隐含波动率(IV)/波动率微笑曲线叠加图

import numpy as np
import matplotlib.pyplot as  plt
import pandas as pd
from math import log, sqrt, exp
from scipy import stats


def draw_vola_smile(df,title):
    # 定义X轴,在值程度,原数据中没有
    df['Moneyness'] = df.apply(lambda x: x['StrikePrice'] / x['UnderlyingScrtClose'], axis=1)
    # 将原数据按照交易日划分,每个交易日形成一个IV曲线,在此之前已经将期权分为近月和远月,所以本数据一天中只交易相同到期日的期权,不同到期日的期权被分为不同的文件
    for data_key, group_df in df.groupby('TradingDate'):
        # 根据在值程度将IV排序,否则不会形成微笑形状
        well_df = group_df.sort_values(['Moneyness'], ascending=True)
        plt.plot(well_df['Moneyness'], well_df['ImpliedVolatility'], 'k', linewidth=0.2)# 调整曲线粗度
    plt.xlabel('Moneyness')
    plt.ylabel('ImpliedVolativity')
    plt.title(title)
    return plt.show()

if __name__ == '__main__':
    # 读取行情数据
    near_call_high = pd.read_csv(r'C:\Users\heluxiaofu\PycharmProjects\pythonProject\论文\3.4\波动率微笑\近月看涨高情绪.csv',encoding='utf-8')
    near_call_low = pd.read_csv(r'C:\Users\heluxiaofu\PycharmProjects\pythonProject\论文\3.4\波动率微笑\近月看涨低情绪.csv')

    draw_vola_smile(near_call_high,'near_call_high')
    draw_vola_smile(near_call_low,'near_call_low')




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值