该章节为期权交易应用程序的详细设计说明书。总体设计部分,展示了软件的需求、环境和结构等基本内容;模块设计部分,描述了软件模块之间的关系及各个模块的具体实现方式;使用说明部分,给出了软件的详细使用方法。
软件名称:期权交易助手
理论依据:B-S期权定价模型和基于B-S期权定价模型的权证交易模型
-
股票期权:以指数基金为标的资产的期权合约,以新浪财经-期权-股票期权报价页面所展示的股票期权为准(链接为
https://stock.finance.sina.com.cn/option/quotes.html)。 -
商品期权:以实物为标的物的期权合约,以新浪财经-期权-商品期权报价页面所展示的商品期权为准(链接为
https://stock.finance.sina.com.cn/futures/view/optionsDP.php)。 -
T型报价:T型报价表格的中间列为行权价。以行权价为轴,左侧为看涨(认购)期权合约报价,右侧为看跌(认沽)期权合约报价。
-
分类报价:分类报价表格中的一行表示一种期权合约的报价。
-
分红调整:对于股票期权,标的资产分红后,原期权合约的合约要素会进行一定的调整。经历分红调整的期权合约会在合约简称和行权价后添加分红调整标志。“A”代表经历一次分红调整。
main.py:main模块
widget.py:widget模块
k_line.py:k_line模块
solution.py:solution模块
LSTM.py:LSTM模块
crawler.py:crawler模块
logo.ico:软件图标
实现本文第2、3部分所阐述的B-S期权定价模型和基于B-S期权定价模型的权证交易模型,并利用其为实际进行期权交易的投资者提供信息支持,辅助投资者完成期权交易决策。
-
对于市场上较为常见的期权品种,应用程序具备浏览实时行情的功能。投资者能够利用多种方式检索所需的期权报价信息,并利用应用程序对其进行深入分析。
-
对于特定的期权合约,应用程序能够高效地计算其各项指标,清晰地展示其详细信息,同时通过绘制分时线、K线图等图表,以反映价格的实时动态变化情况。
-
对于没有明确目标的投资者,应用程序能够运用价值潜力模型计算各个期权合约的价值潜力,以推荐适合投资者的期权合约,为投资者的期权交易提供决策支持。
应用程序的开发环境为Python3.8以及tensorflow2.8.0,其余主要调用的库包括PyQt5、pyqtgraph、requests、sklearn等。
应用程序的运行环境为Windows XP及更高版本操作系统,推荐分辨率在以上。
图1 软件结构图
期权交易助手软件分为四个部分,分别为股票期权、商品期权、合约分析和价值潜力榜。其中,股票期权包含分类报价和T型报价,商品期权包含T型报价,展示对应品种期权合约的实时报价表格;合约分析包含合约详情和K线数据,合约详情部分展示特定期权合约的基本信息及各个数据指标的计算结果,K线数据以分时、日线、周线和月线四类图表展示特定期权合约的实时交易情况;价值潜力榜依照权证交易模型计算各个期权合约的价值潜力,根据投资者的筛选条件,给出满足条件的期权合约排行表格。
表1 模块层次划分
| 层级 | 模块名称 |
|---|---|
| UI层 | main模块、widget模块、k_line模块 |
| 逻辑层 | solution模块、LSTM模块 |
| 数据层 | crawler模块 |
应用程序由UI层、逻辑层和数据层组成,如表1所示。其中UI层处理应用程序窗口和各个控件的展示和响应,包含main、widget和k_line三个模块;逻辑层接受来自UI层的数据请求,调用数据层获取数据,对数据进行计算和处理,并将结果返回给UI层,包含solution和LSTM两个模块;数据层从互联网采集所需的数据,将数据返回给逻辑层,包含crawler一个模块。
图2 模块调用关系图
应用程序包括main、widget、solution、k_line、crawler和LSTM六个模块,父模块与子模块之间是调用与被调用的关系,如图2所示。各模块独立存在,且避免不同模块间的相互调用关系,以减少模块之间的耦合性。
图3 main模块的事件循环
main模块中主要调用sys、PyQt5库。模块中定义窗口类main_window。执行main模块时,首先实例化QApplication对象,开始事件循环,如图3所示。实例化应用程序主体窗口main_window,调用widget模块对窗口进行初始化,并向widget模块传递点击、鼠标位置移动、窗口大小变化等事件参数,以实现窗口的更新操作。事件与事件发生时调用的函数对应如表2所示。
表2 事件与函数对应表
| 事件 | 对应函数 | 函数功能 | 参数 |
|---|---|---|---|
| 调整窗口大小 | resizeEvent | 调整所有相关控件大小 | 窗口尺寸 |
| 右键点击股票期权分类报价表格 | tableWidget_1_menu | 弹出对应菜单 | 鼠标位置 |
| 右键点击股票期权T型报价表格 | tableWidget_2_menu | 弹出对应菜单 | 鼠标位置 |
| 右键点击商品期权T型报价表格 | tableWidget_3_menu | 弹出对应菜单 | 鼠标位置 |
| 右键点击价值潜力榜表格 | tableWidget_rank_menu | 弹出对应菜单 | 鼠标位置 |
widget模块主要调用PyQt5库。模块中定义Ui_Form类,其中包括初始化和更新窗口中的各个控件的方法,是用户交互界面的主要模块。widget模块调用k_line模块,以绘制窗口中所需的图表;调用solution模块,以获取展示窗口所需的各项数据。
widget模块通过实例化QTabWidget对象实现上文“2.3 软件结构”部分中各功能分区及其子分区的切换。对于每个功能分区及其子分区,分别实例化一个QWidget对象表示,其对应关系如表3所示。
表3 分区对象与功能分区对应表
| 分区对象 | 对应功能分区 | 父类 |
|---|---|---|
| tab_1 | 股票期权 | \ |
| tab_11 | 股票期权-分类报价 | tab_1 |
| tab_12 | 股票期权-T型报价 | tab_1 |
| tab_2 | 商品期权 | \ |
| tab_21 | 商品期权-T型报价 | tab_2 |
| tab_3 | 合约分析 | \ |
| tab_31 | 合约分析-合约详情 | tab_3 |
| tab_32 | 合约分析-K线数据 | tab_3 |
| tab_hour | 合约分析-K线数据-分时 | tab_32 |
| tab_d | 合约分析-K线数据-日线 | tab_32 |
| tab_w | 合约分析-K线数据-周线 | tab_32 |
| tab_m | 合约分析-K线数据-月线 | tab_32 |
| tab_4 | 价值潜力榜 | \ |
widget模块通过实例化QTableWidget对象实现数据表格的展示。表格对象与对应的功能如表4所示。
表4 表格对象与功能对应表
| 表格对象 | 对应功能 | 父类 |
|---|---|---|
| tableWidget_1 | 股票期权分类报价表格 | tab_11 |
| tableWidget_2 | 股票期权T型报价表格 | tab_12 |
| tableWidget_3 | 商品期权T型报价表格 | tab_21 |
| tableWidget_rank | 价值潜力榜表格 | tab_4 |
其余控件就不再过多赘述。Ui_Form类中的函数update_{控件名}的功能是更新对应控件;函数load_{控件名}的功能是首次加载对应控件;函数show_{控件名}_menu的功能是展示对应控件的菜单。将上述函数作为槽函数连接至对应的控件信号,从而响应交互请求。
k_line模块主要调用PyQt5、pyqtgraph库,完成窗口所需的各类图像绘制。模块中定义继承自GraphicsObject的五个图像类candle_stick、volume、fold_line、volume_hour和MACD_line,分别绘制基本K线图、交易量柱状图、分时线图、分时交易量柱状图和MACD指标曲线图;同时定义k_line、v_bar、hour_line、fold_line和MACD五个类,为外部调用提供接口。
从外部调用k_line模块时,通过实例化k_line、v_bar、hour_line、fold_line和MACD五个类,实现图像的绘制。k_line、v_bar、hour_line、fold_line和MACD五个类对应的功能及构造函数的参数如表5所示。
表5 类名、功能和参数对应表
| 类名 | 功能 | 参数1 | 含义 | 参数2 | 含义 | 参数3 | 含义 |
|---|---|---|---|---|---|---|---|
| k_line | 绘制基本K线图 | data | 基本K线图数据 | label_x | 外部的x轴标签 | label_y | 外部的y轴标签 |
| v_bar | 绘制交易量柱状图 | data | 交易量数据 | \ | \ | \ | \ |
| hour_line | 绘制分时线图 | data | 分时线图数据 | label_x | 外部的x轴标签 | label_y | 外部的y轴标签 |
| fold_line | 绘制分时交易量柱状图 | data | 分时交易量数据 | \ | \ | \ | \ |
| MACD | 绘制MACD指标曲线图 | data | MACD指标数据 | \ | \ | \ | \ |
其中的k_line和hour_line两个类的构造函数需要传入外部的x轴、y轴标签,以实现根据鼠标位置移动标签并修改标签内容的功能,该功能可详见下文“4.3 合约分析”部分。
solution模块调用crawler模块和LSTM模块,分别获取期权的实时行情数据和模型的预测结果,完成数据的计算与集成,为widget模块提供所需的所有数据。
在solution模块中,函数get_{控件名}的功能是为对应控件提供数据。在widget类中通过调用对应函数,获取控件所需的数据,以实现数据的加载和更新。
LSTM模块主要调用tensorflow和sklearn等库,建立并训练LSTM模型,并应用训练完成的模型为solution模块提供模型的预测结果。数据集的来源如表6所示。
在开发环境下执行LSTM模块,该模块会为所有涉及到的股票建立LSTM模型并进行训练,训练完成的模型和标准化参数会保存在文件{股票代码}.h5和{股票代码}_sc.pkl中。应用程序运行过程中,调用get_VP函数,返回指定股票代码对应模型的预测结果;调用get_all_VPs函数,返回所有模型的预测结果。
表6 股票数据接口参数表
| 接口 | URL | 参数 | 含义 | 描述 |
|---|---|---|---|---|
| 股票K线 | https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol={symbol}&datalen={datalen}&scale={scale}&ma={ma} | symbol | 股票代码 | 例:“sh510050”上交所,510050 |
| datalen | 数据长度 | 取值范围:[0,1023] | ||
| scale | 数据间隔(分钟) | 取值:5, 15, 30, 60 | ||
| ma | 是否返回移动平均线 | 默认:是 |
crawler模块主要调用requests库,采集期权的实时行情数据。股票期权的数据来源于新浪财经-期权-股票期权报价页面(链接为https://stock.finance.sina.com.cn/option/quotes.html),商品期权的数据来源于新浪财经-期权-商品期权报价页面(链接为https://stock.finance.sina.com.cn/futures/view/optionsDP.php)。具体数据接口如表7所示。
表7 期权数据接口参数表
| 接口 | URL | 参数 | 含义 | 描述 |
|---|---|---|---|---|
| 合约代码(上交所、深交所股票期权) | https://hq.sinajs.cn/list={list} | list | OP_{涨跌}_{股票代码}{合约月份} | 例:“OP_UP_5100502306”50ETF,看涨期权,23年6月到期 |
| 合约代码(中金所股票期权) | http://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData?type=futures&exchange=cffex&product={product}&pinzhong={pinzhong} | product | {标的类型} | 标的物类型取值:“io”沪深300股指;“mo”中证1000股指;“ho”上证50股指 |
| pinzhong | {标的简称}{合约月份} | 例:“io2306”沪深300股指,23年6月到期 | ||
| 期权合约详细信息 | https://hq.sinajs.cn/list={list} | list | {期权类型}OP{合约代码} | 期权类型取值:“CON”上交所、深交所股票期权;“P”中金所股票期权、商品期权; |
| 期权合约分析数据 | https://hq.sinajs.cn/list={list} | list | {期权类型}SO{合约代码} | 期权类型取值:“CON”上交所、深交所股票期权;“P”中金所股票期权、商品期权 |
| 期权日K线(上交所、深交所股票期权) | http://stock.finance.sina.com.cn/futures/api/jsonp_v2.php//StockOptionDaylineService.getSymbolInfo?symbol={symbol} | symbol | {合约代码} | 由合约代码(上交所、深交所股票期权)接口查询获得 |
| 期权日K线(中金所股票期权、商品期权) | https://stock.finance.sina.com.cn/futures/api/jsonp.php//FutureOptionAllService.getOptionDayline?symbol={symbol} | symbol | {标的类型}{合约月份}{购/沽}{行权价}({合约代码}) | 例:“io2306C4000”沪深300股指,23年6月到期,看涨期权,行权价4000 |
| 期权分时线(上交所、深交所股票期权) | https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionDaylineService.getOptionMinline?symbol={symbol} | symbol | CON_OP_{合约代码} | 由合约代码(上交所、深交所股票期权)接口查询获得 |
(1)T型报价
软件启动后,默认打开股票期权T型报价界面,界面中间的表格即股票期权T型报价,如图4所示。表格中间为行权价,左侧为该行权价看涨合约的实时报价,右侧为该行权价看跌合约的实时报价。实值合约底色为红色,虚值合约底色为绿色。
投资者可以通过选择界面上方的“交易所”“期权品种”和“合约月份”三个选项框中的不同选项,浏览相应的期权合约。选项框右侧给出当前浏览的所有合约的到期日(剩余时间)和标的资产。当选择了前一个选项框中的不同选项时,后面的选项框中的选项也会随之改变。
图4 股票期权T型报价界面
当选中股票期权T型报价表格中的一行时,点击右键,会弹出菜单,如图5所示。选择菜单中的“刷新”选项,会更新当前的股票期权T型报价表格;选择菜单中的“分析看涨合约”选项,会跳转至合约分析界面,并查询当前选中行左侧的看涨合约;选择菜单中的“分析看跌合约”选项,会跳转至合约分析界面,并查询当前选中行右侧的看跌合约。
若同时选中多行,则菜单中只会出现“刷新”一个选项。
图5 股票期权T型报价菜单
(2)分类报价
点击上方的“分类报价”标签后,打开股票期权分类报价界面,界面中间的表格即股票期权分类报价,如图6所示。投资者可以通过选择界面上方的“交易所”选项框中的不同选项,浏览相应的期权合约。
图6 股票期权分类报价界面
当选中股票期权分类报价表格中的一行时,点击右键,会弹出菜单,如图7所示。选择菜单中的“刷新”选项,会更新当前的股票期权分类报价表格;选择菜单中的“分析合约”选项,会跳转至合约分析界面,并查询当前选中行对应的合约。
若同时选中多行,则菜单中只会出现“刷新”一个选项。
图7 股票期权分类报价菜单
点击左侧的“商品期权”标签后,打开商品期权T型报价界面,界面中间的表格即商品期权T型报价,如图8所示。表格中间为行权价,左侧为该行权价看涨合约的实时报价,右侧为该行权价看跌合约的实时报价。
投资者可以通过选择界面上方的“期权品种”和“合约月份”两个选项框中的不同选项,浏览相应的期权合约。选项框右侧给出当前浏览的所有合约的交易所。当选择了前一个选项框中的不同选项时,后面的选项框中的选项也会随之改变。
图8 商品期权T型报价界面
当选中商品期权T型报价表格中的一行时,点击右键,会弹出菜单,如图9所示。选择菜单中的“刷新”选项,会更新当前的商品期权T型报价表格;选择菜单中的“分析看涨合约”选项,会跳转至合约分析界面,并查询当前选中行左侧的看涨合约;选择菜单中的“分析看跌合约”选项,会跳转至合约分析界面,并查询当前选中行右侧的看跌合约。
若同时选中多行,则菜单中只会出现“刷新”一个选项。
图9 商品期权T型报价菜单
点击左侧的“合约分析”标签后,打开合约分析界面。在上方的“合约代码”输入框中输入待查询的合约代码,点击输入框右侧的“查询”按钮,即可在合约情况和K线数据界面查看合约的相应数据。
若通过菜单跳转至合约分析界面,则默认输入对应的合约代码并查询;若输入的合约代码为空或有误,在“查询”按钮右侧会以红字给出相应的提示,如图10所示。
图10 合约分析界面
(1)合约详情
若当前不在合约详情界面,点击上方的“合约详情”标签,切换至合约详情界面。合约详情界面分为“基础信息”“价值分析”和“风险分析”三个部分,以列表的形式给出合约详情,如图11所示。
图11 合约详情界面
(2)K线数据
若当前不在K线数据界面,点击上方的“K线数据”标签,切换至K线数据界面。投资者可以通过点击K线数据界面上方的“分时”“日线”“周线”和“月线”标签,切换至分时、日线、周线和月线界面,查看对应的图表。
K线数据分时界面上方图表为分时线图,下方图表为分时成交量图,如图12所示。
图12 K线数据分时界面
K线数据日线界面上方图表为日K线图,中间图表为成交量图,下方图表为MACD指标曲线,如图13所示。周线和月线界面与日线界面类似,这里就不再赘述。
图13 K线数据分时界面
当鼠标移动至分时线、日K线、周K线和月K线图上时,会以鼠标位置为中心显示十字光标,同时会在图表的x轴和y轴上提示当前鼠标位置的坐标,如图14和图15所示。
图14 K线数据分时界面
图15 K线数据分时界面
点击左侧的“价值潜力榜”标签后,打开价值潜力榜界面,界面中间的表格即价值潜力榜,如图16所示。若交易类型为买进期权,则表格按照价值潜力从高到低排序;若交易类型为卖出期权,则表格按照价值潜力从低到高排序。
投资者可以通过修改界面上方的“最低买量”“最低卖量”和“最低成交量”三个微调框、“交易类型”单选框和“交易偏好”滑块五个筛选条件来对价值潜力榜中的合约进行筛选。点击“筛选”按钮后,价值潜力榜中会筛选符合条件的期权合约。
买量、卖量和成交量分别为“最低买量”“最低卖量”和“最低成交量”的最小值;“交易类型”会影响价值潜力的排序;交易偏好对应上文“3.2 权证合约的价值潜力”和“3.5 价值潜力模型分析”部分提到的权值,短期代表偏好对冲平仓、长期代表偏好执行权证,滑块的位置影响价值潜力的计算结果。
图16 K线数据分时界面
当选中价值潜力榜表格中的一行时,点击右键,会弹出菜单,如图17所示。选择菜单中的“刷新”选项,会更新当前的价值潜力榜表格;选择菜单中的“分析合约”选项,会跳转至合约分析界面,并查询当前选中行对应的合约。
若同时选中多行,则菜单中只会出现“刷新”一个选项。
图17 K线数据分时界面
















