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')
绘制隐含波动率(IV)/波动率微笑曲线叠加图
最新推荐文章于 2023-07-22 21:25:19 发布