FRM模型十六:期权策略(期权组合)

2024-03-15 06:04

本文主要是介绍FRM模型十六:期权策略(期权组合),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 备兑看涨期权(Covered Call)
    • 保护看跌期权(protective put)
    • 牛市价差套利
    • 熊市价差套利
    • 写在后面

本文所有代码基于windAPI,复现前先下载客户端并注册账号

备兑看涨期权(Covered Call)

构成:标的资产的多头 + 欧式看涨期权空头
损益:当标的资产市场价格上涨时,标的资产多头获利,看涨期权空头不行权。
当标的资产价格下降时,标的资产多头亏损,看涨期权行权获利弥补多头方损失。

头寸损益
标的资产多头 S T − S 0 S_{T}-S_{0} STS0
看涨期权空头 C − m a x ( S T − K , 0 ) C-max(S_{T}-K,0) Cmax(STK,0)
整体策略 S T − S 0 − m a x ( S T − K , 0 ) + C S_{T}-S_{0}-max(S_{T}-K,0)+C STS0max(STK,0)+C

其中 S T S_{T} ST表示T时刻的市价,K表示执行价,C表示看涨期权价格。损益图如下所示。

在这里插入图片描述
代码实现:

def CoveredCall(UnderlyingCode, OptionCode,StartTime):'''UndelyingCode:标的资产代码OptionCode:对冲期权的代码StartTime:开始回测时间'''error_code, wsd_data = w.wsd(OptionCode, "exe_price,exe_enddate,close,exe_ratio", StartTime, StartTime, usedf=True)StrikePrice = wsd_data['EXE_PRICE'][0]StrikeTime = wsd_data['EXE_ENDDATE'][0]OptionPrice = wsd_data['CLOSE'][0]Ratio = wsd_data['EXE_RATIO'][0]# 取当前系统时间current_time = datetime.datetime.now()# 比较行权日和当前,如果行权日晚于当前时间,只能回测到当前时间,否则可以回测到行权日。if current_time > StrikeTime:BacktestTime = StrikeTimeelse:BacktestTime = current_time# 定义合约份数N_ETF = 10000N_option = 1# 取行情数据error_code, etf_data = w.wsd(UnderlyingCode, "close", StartTime, BacktestTime, usedf=True)S0 = etf_data['CLOSE'][0]Payoff = (etf_data - S0) * N_ETF + N_option * OptionPrice - np.max(etf_data - StrikePrice, 0) * RatioPayoff.plot(legend=None)plt.xlabel('Time', fontsize=8)plt.xticks(rotation=45)plt.ylabel('Payoff', fontsize=8)plt.show()if __name__ == "__main__":UnderlyingCode = "510050.SH"OptionCode = "10005337.SH"StartTime = "2023-04-27"CoveredCall(UnderlyingCode, OptionCode, StartTime)

随着到期日临近,策略损益变化如下图:
请添加图片描述

保护看跌期权(protective put)

构成:标的资产多头+看跌期权多头
损益:当标的资产市场价格上涨时,标的资产多头获利,看跌期权多头不行权,损失期权费。
当标的资产价格下降时,标的资产多头亏损,看跌期权行权获利弥补空头方损失。

头寸损益
标的资产多头 S T − S 0 S_{T}-S_{0} STS0
看跌期权多头 m a x ( K − S T , 0 ) − C max(K-S_{T},0)-C max(KST,0)C
整体策略 S T − S 0 + m a x ( S T − K , 0 ) − C S_{T}-S_{0}+max(S_{T}-K,0)-C STS0+max(STK,0)C

在这里插入图片描述
代码实现:

def ProtectedPut(UnderlyingCode, OptionCode,StartTime):'''UndelyingCode:标的资产代码OptionCode:对冲期权的代码StartTime:开始回测时间'''error_code, wsd_data = w.wsd(OptionCode, "exe_price,exe_enddate, close,exe_ratio", StartTime, StartTime, usedf=True)StrikePrice = wsd_data['EXE_PRICE'][0]StrikeTime = wsd_data['EXE_ENDDATE'][0]OptionPrice = wsd_data['CLOSE'][0]Ratio = wsd_data['EXE_RATIO'][0]# 取当前系统时间current_time = datetime.datetime.now()# 比较行权日和当前,如果行权日晚于当前时间,只能回测到当前时间,否则可以回测到行权日。if current_time > StrikeTime:BacktestTime = StrikeTimeelse:BacktestTime = current_time# 定义合约份数N_etf = 10000N_option = 1# 取现货价格序列error_code, etf_data = w.wsd(UnderlyingCode, "close", StartTime, BacktestTime,  usedf=True)S0 = etf_data['CLOSE'][0]payoff = -N_option * OptionPrice + N_option * np.max(StrikePrice - etf_data) * Ratio + (etf_data - S0) * N_etfpayoff.plot(legend=None)plt.xlabel('Time', fontsize=8)plt.xticks(rotation=45)plt.ylabel('Payoff', fontsize=8)plt.show()if __name__ == "__main__":OptionCode = "10005338.SH"UnderlyingCode = "510050.SH"StartTime = "2023-04-27"ProtectedPut(UnderlyingCode, OptionCode, StartTime)

随着到期日临近,策略损益变化如下图:
请添加图片描述

牛市价差套利

构成:买入行权价低的看涨期权/看跌期权,卖出行权价高的看涨期权/看跌期权,即低买高卖。
损益:以看涨期权为例,当标的资产价格上涨时,看涨期权的多头方获利,空头方亏损。

头寸损益
低行权价看涨期权多头 m a x ( S t − K l o w , 0 ) − C 1 max(S_{t}-K_{low},0)-C1 max(StKlow,0)C1
高行权价看涨期权空头 C 2 − m a x ( S t − K h i g h , 0 ) C2-max(S_{t}-K_{high},0) C2max(StKhigh,0)
整体策略 C 2 − C 1 + m a x ( S t − K l o w , 0 ) − m a x ( S t − K h i g h , 0 ) C2-C1+max(S_{t}-K_{low},0)-max(S_{t}-K_{high},0) C2C1+max(StKlow,0)max(StKhigh,0)

整体损益情况如下图所示:
在这里插入图片描述
代码实现:

############################ BullSpread
def BullSpread(UnderlyingCode, code_high_strike, code_low_strike):'''UnderlyingCode:标的资产代码code_high_strike:行权价高的期权代码code_low_strike:行权价低的期权代码:return:'''# 取期权基本数据error_code, wss_data = w.wss(code_high_strike, "startdate,lasttradingdate", usedf=True)       # 取期权的上市时间及结束时间StartDate = wss_data['STARTDATE'][0]EndDate = wss_data['LASTTRADINGDATE'][0]# 取期权价格及执行价error_code, high_strike_data = w.wsd(code_high_strike, "exe_price,close,exe_ratio,exe_mode", StartDate, StartDate, usedf=True)error_code, low_strike_data = w.wsd(code_low_strike, "exe_price,close,exe_ratio,exe_mode", StartDate, StartDate, usedf=True)K_high = high_strike_data['EXE_PRICE'][0]K_low = low_strike_data['EXE_PRICE'][0]OptionPrice_high_strike = high_strike_data['CLOSE'][0]OptionPrice_low_strike = low_strike_data['CLOSE'][0]Type = high_strike_data['EXE_MODE'][0]Ratio_high_strike = high_strike_data['EXE_RATIO'][0]Ratio_low_strike = low_strike_data['EXE_RATIO'][0]# 取标的资产价格数据error_code, etf_data = w.wsd(UnderlyingCode, "close", StartDate, EndDate,  usedf=True)# 定义合约份数N_option = 1# 判断期权是看涨还是看跌if Type == "认购":Payoff = N_option * OptionPrice_high_strike - np.maximum(etf_data - K_high, 0) * Ratio_high_strike - N_option * OptionPrice_low_strike + np.maximum(etf_data - K_low, 0) * Ratio_low_strikeelif Type == "认沽":Payoff = N_option * OptionPrice_high_strike - np.maximum(K_high - etf_data, 0) * Ratio_high_strike - N_option * OptionPrice_low_strike + np.maximum(K_low - etf_data, 0) * Ratio_low_strikeelse:print("期权类型判断有误")Payoff.plot(legend=None)plt.xlabel('Time', fontsize=8)plt.xticks(rotation=45)plt.ylabel('Payoff', fontsize=8)plt.show()if __name__ == "__main__":code_high_strike = "10006371.SH"code_low_strike = "10006365.SH"UnderlyingCode = "510050.SH"BullSpread(UnderlyingCode, code_high_strike, code_low_strike)

随着到期日临近,策略损益变化如下图:
请添加图片描述

熊市价差套利

构成:卖出行权价低的看涨期权/看跌期权,买入行权价高的看涨期权/看跌期权,即低买高卖。
损益:以看涨期权为例,当标的资产价格上涨时,看涨期权的多头方获利,空头方亏损。

头寸损益
低行权价看涨期权空头 C 1 − m a x ( S t − K l o w , 0 ) C1-max(S_{t}-K_{low},0) C1max(StKlow,0)
高行权价看涨期权多头 m a x ( S t − K h i g h , 0 ) − C 2 max(S_{t}-K_{high},0)-C2 max(StKhigh,0)C2
整体策略 C 1 − C 2 + m a x ( S t − K h i g h , 0 ) − m a x ( S t − K l o w , 0 ) C1-C2+max(S_{t}-K_{high},0)-max(S_{t}-K_{low},0) C1C2+max(StKhigh,0)max(StKlow,0)

整体损益情况如下图所示:
在这里插入图片描述
代码实现:

def BearSpread(UnderlyingCode, code_high_strike, code_low_strike):'''UnderlyingCode:标的资产代码code_high_strike:行权价高的期权代码code_low_strike:行权价低的期权代码:return:'''# 取期权基本数据error_code, wss_data = w.wss(code_high_strike, "startdate,lasttradingdate", usedf=True)       # 取期权的上市时间及结束时间StartDate = wss_data['STARTDATE'][0]EndDate = wss_data['LASTTRADINGDATE'][0]# 取期权价格及执行价error_code, high_strike_data = w.wsd(code_high_strike, "exe_price,close,exe_ratio,exe_mode", StartDate, StartDate, usedf=True)error_code, low_strike_data = w.wsd(code_low_strike, "exe_price,close,exe_ratio,exe_mode", StartDate, StartDate, usedf=True)K_high = high_strike_data['EXE_PRICE'][0]K_low = low_strike_data['EXE_PRICE'][0]OptionPrice_high_strike = high_strike_data['CLOSE'][0]OptionPrice_low_strike = low_strike_data['CLOSE'][0]Type = high_strike_data['EXE_MODE'][0]Ratio_high_strike = high_strike_data['EXE_RATIO'][0]Ratio_low_strike = low_strike_data['EXE_RATIO'][0]# 取标的资产价格数据error_code, etf_data = w.wsd(UnderlyingCode, "close", StartDate, EndDate,  usedf=True)# 定义合约份数N_option = 1# 判断期权是看涨还是看跌if Type == "认购":Payoff = N_option * OptionPrice_low_strike - np.maximum(etf_data - K_low, 0) * Ratio_low_strike - N_option * OptionPrice_high_strike + np.maximum(etf_data - K_high, 0) * Ratio_high_strikeelif Type == "认沽":Payoff = N_option * OptionPrice_low_strike - np.maximum(K_low - etf_data, 0) * Ratio_low_strike - N_option * OptionPrice_high_strike + np.maximum(K_high - etf_data, 0) * Ratio_high_strikeelse:print("期权类型判断有误")Payoff.plot(legend=None)plt.xlabel('Time', fontsize=8)plt.xticks(rotation=45)plt.ylabel('Payoff', fontsize=8)plt.show()if __name__ == "__main__":code_high_strike = "10006371.SH"code_low_strike = "10006365.SH"UnderlyingCode = "510050.SH"BearSpread(UnderlyingCode, code_high_strike, code_low_strike)

随着到期日临近,策略损益变化如下图:
请添加图片描述

写在后面

最近和做期权的朋友交流发现,实际应用这些策略是很复杂的。由于期权买方卖方权利和义务的特点,Covered Call在卖看涨期权时需要缴纳保证金,一旦标的资产价格迅速上涨,期权端可能会被强平。所以可能根本就熬不到合约到期,也就不会有上述的收益曲线了。

Protective Put策略也是一样。如果盘中隐含波动率急速上涨,期权价格上涨,此时将看跌期权平仓会获得不小的收益,根本不用持有到期…

所以期权的策略其实是非常复杂的,不光光只考虑初始时间点的期权价格,更要考虑盘中期权价格的变动。这里只是为了复现FRM中提出的策略,还有很多不严谨的地方。

这篇关于FRM模型十六:期权策略(期权组合)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811017

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU