4. 数据特征工程
4.1. 概述
特征工程的好坏决定了模型的上限,调参只是逼近这个上限而已。
这个阶段,我计划将收集的数据以每日股价收盘价作为标签,获取技术指标,并作为数据特征。传统技术指标分析主要是针对股价,包括了7日均线,21日均线,MACD平滑异同移动均线,BOLLING布林线等,实际上,股价的波动在影响因素上,取决于非常多的客观交易行为,传统技术指标只是对股价的时间统计特征进行体现,并没有将市场的细节展现出来。本系统我将尝试增加自定义的技术指标,试图追踪交易量、大单买入卖出、换手率等指标的统计特征,并对以上技术指标进行频率分析,以期待获得更多市场行为信息。
基本面分析主要参考上市公司财务数据和公告,但是由于公告涉及到文本分析且数据量较少,这部分仅保留财务数据。另外,宏观经济数据也作为基本面分析的一部分。
特征组合,删除重复特征以及空值处理。由于特征存在大量空值,所以要分情况对空值进行处理,主要的方式是以空值前一日的value填充。即便如此,股价数据集仍然是一个庞大的稀疏矩阵。
在股价趋势预测任务中,暂时不适用于将每日财经新闻进行情感分析并作为事件特征,因为每日新闻数据量较大,对于个股的影响需要提取相关系数矩阵,计算量惊人。考虑到新闻的综合影响会直接体现在交易数据中,所以在技术指标中增加交易数据的统计特征,平衡特征的数量。
4.2. 基本面分析
概括起来,基本分析主要包括以下三个方面内容:
(1)宏观经济分析。研究经济政策(货币政策、财政政策、税收政策、产业政策等等)、经济指标(国内生产总值、失业率、通胀率、利率、汇率等等)对股票市场的影响。
(2)行业分析。分析产业前景、区域经济发展对上市公司的影响。
(3)公司分析。具体分析上市公司行业地位、市场前景、财务状况。
这里,基本面分析参考的指标主要包括:
外汇 | 期权合约信息 | 期货 | 市场参考数据 | 宏观经济 |
---|---|---|---|---|
外汇基础信息(海外) | 期权合约信息 | 期货合约信息 | 沪深港通资金流向 | 利率数据 |
外汇日线行情 | 期权日线行情 | 期货合约信息 | 沪深股通十大成交股 | shibor利率 |
期货交易日历 | 港股通十大成交股 | shibor报价数据 | ||
期货日线行情 | 融资融券交易汇总 | LPR贷款基础利率 | ||
每日持仓排名 | 融资融券交易明细 | Libor利率 | ||
仓单日报 | 前十大股东 | Hibor利率 | ||
每日结算参数 | 前十大流通股东 | 温州民间借贷利率 | ||
南华期货指数行情 | 龙虎榜每日明细 | 广州民间借贷利率 | ||
期权 | 龙虎榜机构交易明细 | |||
股权质押统计数据 | ||||
股权质押明细数据 | ||||
股票回购 | ||||
概念股分类表 | ||||
概念股明细列表 | ||||
限售股解禁 | ||||
大宗交易 | ||||
股票开户数据 | ||||
股票开户数据(旧) | ||||
股东人数 | ||||
股东增减持 |
4.3. 技术指标分析
技术指标分析是主要的分析手段,技术指标主要包括:
指标 | 格式 | 含义 |
---|---|---|
open | float | 开盘价 |
high | float | 最高价 |
low | float | 最低价 |
close | float | 收盘价 |
pre_close | float | 昨收价 |
change | float | 涨跌额 |
pct_chg | float | 涨跌幅 (未复权,如果是复权请用 通用行情接口 ) |
vol | float | 成交量 (手) |
amount | float | 成交额 (千元) |
close | float | 当日收盘价 |
turnover_rate | float | 换手率(%) |
turnover_rate_f | float | 换手率(自由流通股) |
volume_ratio | float | 量比 |
pe | float | 市盈率(总市值/净利润) |
pe_ttm | float | 市盈率(TTM) |
pb | float | 市净率(总市值/净资产) |
ps | float | 市销率 |
ps_ttm | float | 市销率(TTM) |
total_share | float | 总股本 (万股) |
float_share | float | 流通股本 (万股) |
free_share | float | 自由流通股本 (万) |
total_mv | float | 总市值 (万元) |
circ_mv | float | 流通市值(万元) |
buy_sm_vol | int | 小单买入量(手) |
buy_sm_amount | float | 小单买入金额(万元) |
sell_sm_vol | int | 小单卖出量(手) |
sell_sm_amount | float | 小单卖出金额(万元) |
buy_md_vol | int | 中单买入量(手) |
buy_md_amount | float | 中单买入金额(万元) |
sell_md_vol | int | 中单卖出量(手) |
sell_md_amount | float | 中单卖出金额(万元) |
buy_lg_vol | int | 大单买入量(手) |
buy_lg_amount | float | 大单买入金额(万元) |
sell_lg_vol | int | 大单卖出量(手) |
sell_lg_amount | float | 大单卖出金额(万元) |
buy_elg_vol | int | 特大单买入量(手) |
buy_elg_amount | float | 特大单买入金额(万元) |
sell_elg_vol | int | 特大单卖出量(手) |
sell_elg_amount | float | 特大单卖出金额(万元) |
net_mf_vol | int | 净流入量(手) |
net_mf_amount | float | 净流入额(万元) |
平滑异同平均线指标——MACD
MACD指标又叫指数平滑异同移动平均线,是由查拉尔·阿佩尔(Gerald Apple)所创造的,是一种研判股票买卖时机、跟踪股价运行趋势的技术分析工具。
MACD指标的原理
MACD指标是根据均线的构造原理,对股票价格的收盘价进行平滑处理,求出算术平均值以后再进行计算,是一种趋向类指标。
MACD 指标是运用快速(短期)和慢速(长期)移动平均线及其聚合与分离的征兆,加以双重平滑运算。而根据移动平均线原理发展出来的MACD,一则去除了移动平均线频繁发出假信号的缺陷,二则保留了移动平均线的效果,因此,MACD指标具有均线趋势性、稳重性、安定性等特点,是用来研判买卖股票的时机,预测股票价格涨跌的技术分析指标。
MACD 指标主要是通过EMA、DIF和DEA(或叫MACD、DEM)这三值之间关系的研判,DIF和DEA连接起来的移动平均线的研判以及DIF减去DEM值而绘制成的柱状图(BAR)的研判等来分析判断行情,预测股价中短期趋势的主要的股市技术分析指标。其中,DIF是核心,DEA是辅助。DIF是快速平滑移动平均线(EMA1)和慢速平滑移动平均线(EMA2)的差。BAR柱状图在股市技术软件上是用红柱和绿柱的收缩来研判行情。
MACD指标的计算方法
MACD在应用上,首先计算出快速移动平均线(即EMA1)和慢速移动平均线(即EMA2),以此两个数值,来作为测量两者(快慢速线)间的离差值(DIF)的依据,然后再求DIF的N周期的平滑移动平均线DEA(也叫MACD、DEM)线。
以EMA1的参数为12日,EMA2的参数为26日,DIF的参数为9日为例来看看MACD的计算过程
1、计算移动平均值(EMA)
12日EMA的算式为
EMA(12)=前一日EMA(12)×11/13+今日收盘价×2/13
26日EMA的算式为
EMA(26)=前一日EMA(26)×25/27+今日收盘价×2/27
2、计算离差值(DIF)
DIF=今日EMA(12)-今日EMA(26)
3、计算DIF的9日EMA
根据离差值计算其9日的EMA,即离差平均值,是所求的MACD值。为了不与指标原名相混淆,此值又名DEA或DEM。
今日DEA(MACD)=前一日DEA×8/10+今日DIF×2/10
计算出的DIF和DEA的数值均为正值或负值。
理论上,在持续的涨势中,12 日EMA线在26日 EMA线之上,其间的正离差值(+DIF)会越来越大;反之,在跌势中离差值可能变为负数(—DIF),也会越来越大,而在行情开始好转时,正负离差值将会缩小。指标MACD正是利用正负的离差值(±DIF)与离差值的N日平均线(N日EMA)的交叉信号作为买卖信号的依据,即再度以快慢速移动线的交叉原理来分析买卖信号。另外,MACD指标在股市软件上还有个辅助指标——BAR柱状线,其公式为:BAR=2×(DIF-DEA),我们还是可以利用BAR 柱状线的收缩来决定买卖时机。
离差值DIF 和离差平均值DEA是研判MACD的主要工具。其计算方法比较烦琐,由于目前这些计算值都会在股市分析软件上由计算机自动完成,因此,投资者只要了解其运算过程即可,而更重要的是掌握它的研判功能。另外,和其他指标的计算一样,由于选用的计算周期的不同,MACD指标也包括日MACD指标、周MACD指标、月MACD指标年MACD指标以及分钟MACD指标等各种类型。经常被用于股市研判的是日MACD指标和周MACD指标。虽然它们的计算时的取值有所不同,但基本的计算方法一样。
在实践中,将各点的 DIF和DEA(MACD)连接起来就会形成在零轴上下移动的两条快速(短期)和慢速(长期)线,此即为MACD图。
随机指标——KDJ
KDJ指标又叫随机指标,是由乔治·蓝恩博士(George Lane)最早提出的,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。
KDJ指标的原理
随机指标KDJ 一般是根据统计学的原理,通过一个特定的周期(常为9日、9周等)内出现过的最高价、最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值RSV,然后根据平滑移动平均线的方法来计算K值、D值与J值,并绘成曲线图来研判股票走势。
随机指标KDJ 是以最高价、最低价及收盘价为基本数据进行计算,得出的K值、D值和J值分别在指标的坐标上形成的一个点,连接无数个这样的点位,就形成一个完整的、能反映价格波动趋势的KDJ指标。它主要是利用价格波动的真实波幅来反映价格走势的强弱和超买超卖现象,在价格尚未上升或下降之前发出买卖信号的一种技术工具。它在设计过程中主要是研究最高价、最低价和收盘价之间的关系,同时也融合了动量观念、强弱指标和移动平均线的一些优点,因此,能够比较迅速、快捷、直观地研判行情。
随机指标KDJ 最早是以KD指标的形式出现,而KD指标是在威廉指标的基础上发展起来的。不过威廉指标只判断股票的超买超卖的现象,在KDJ指标中则融合了移动平均线速度上的观念,形成比较准确的买卖信号依据。在实践中,K线与D线配合J线组成KDJ指标来使用。由于KDJ线本质上是一个随机波动的观念,故其对于掌握中短期行情走势比较准确。
KDJ指标的计算方法
指标KDJ的计算比较复杂,首先要计算周期(n日、n周等)的RSV值,即未成熟随机指标值,然后再计算K值、D值、J值等。以日KDJ数值的计算为例,其计算公式为
n日RSV=(Cn-Ln)÷(Hn-Ln)×100
式中,Cn为第n日收盘价;Ln为n日内的最低价;Hn为n日内的最高价。RSV值始终在1—100间波动。
其次,计算K值与D值:
当日K值=2/3×前一日K值+1/3×当日RSV
当日D值=2/3×前一日D值+1/3×当日K值
若无前一日K 值与D值,则可分别用50来代替。
以9日为周期的KD线为例。首先须计算出最近9日的RSV值,即未成熟随机值,计算公式为
9日RSV=(C-L9)÷(H9-L9)×100
式中,C为第9日的收盘价;L9为9日内的最低价;H9为9日内的最高价。
K值=2/3×前一日 K值+1/3×当日RSV
D值=2/3×前一日K值+1/3×当日RSV
若无前一日K值与D值,则可以分别用50代替。
需要说明的是,式中的平滑因子1/3和2/3是可以人为选定的,不过目前已经约定俗成,固定为1/3和2/3。在大多数股市分析软件中,平滑因子已经被设定为1/3和2/3,不需要作改动。另外,一般在介绍KD时,往往还附带一个J指标。
J指标的计算公式为:
J=3D—2K
实际上,J的实质是反映K值和D值的乖离程度,从而领先KD值找出头部或底部。J值范围可超过100。
J 指标是个辅助指标,最早的KDJ指标只有两条线,即K线和D线,指标也被称为KD指标,随着股市分析技术的发展,KD指标逐渐演变成KDJ指标,从而提高了KDJ指标分析行情的能力。另外,在一些股市重要的分析软件上,KDJ指标的K、D、J参数已经被简化成仅仅一个,即周期数(如日、周、月等),而且,随着股市软件分析技术的发展,投资者只需掌握KDJ形成的基本原理和计算方法,无须去计算K、D、J的值,更为重要的是利用KDJ指标去分析、研判股票行情。
和其他指标的计算一样,由于选用的计算周期的不同,KDJ指标也包括日KDJ指标、周KDJ指标、月KDJ指标年KDJ指标以及分钟KDJ指标等各种类型。经常被用于股市研判的是日KDJ指标和周KDJ指标。虽然它们的计算时的取值有所不同,但基本的计算方法一样。
威廉指标——WR
威廉指标WR又叫威廉超买超卖指标,简称威廉指标,是由拉瑞·威廉(Larry William)在1973年发明的,是目前股市技术分析中比较常用的短期研判指标。
威廉指标的原理
威廉指标主要是通过分析一段时间内股价最高价、最低价和收盘价之间的关系,来判断股市的超买超卖现象,预测股价中短期的走势。它主要是利用振荡点来反映市场的超买超卖行为,分析多空双方力量的对比,从而提出有效的信号来研判市场中短期行为的走势。
威廉指标是属于研究股价波幅的技术分析指标,在公式设计上和随机指标的原理比较相似,两者都是从研究股价波幅出发,通过分析一段时间的股票的最高价、最低价和收盘价等这三者关系,来反映市场的买卖气势的强弱,借以考察阶段性市场气氛、判断价格和理性投资价值标准相背离的程度。
和股市其他技术分析指标一样,威廉指标可以运用于行情的各个周期的研判,大体而言,威廉指标可分为日、周、月、年、5 分钟、15分钟、30分钟、60分钟等各种周期。虽然各周期的威廉指标的研判有所区别,但基本原理相差不多。如日威廉指标是表示当天的收盘价在过去的一段日子里的全部价格范围内所处的相对位置,把这些日子里的最高价减去当日收市价,再将其差价除以这段日子的全部价格范围就得出当日的威廉指标。
威廉指标在计算时首先要决定计算参数,此数可以采取一个买卖循环周期的半数。以日为买卖的周期为例,通常所选用的买卖循环周期为8日、14日、28日或56日等,扣除周六和周日,实际交易日为6日、10日、20日或40日等,取其一半则为3日、5日、10日或20日等。
W%R指标的计算方法
W%R指标的计算主要是利用分析周期内的最高价、最低价及周期结束的收盘价等三者之间的关系展开的。以日威廉指标为例,其计算公式为:
W%R=(Hn—C)÷(Hn—Ln)×100
其中:C为计算日的收盘价,Ln为N周期内的最低价,Hn为N周期内的最高价,公式中的N为选定的计算时间参数,一般为4或14。
以计算周期为14日为例,其计算过程如下:
W%R(14日)=(H14—C)÷(H14—L14)×100
其中,C为第14天的收盘价,H14为14日内的最高价,L14为14日内的最低价。
威廉指标是表示当天的收盘价在过去一段时间里的全部价格范围内所处的相对位置,因此,计算出的W%R值位于0——100之间。越接近0值,表明目前的价位越接近过去14日内的最低价;越接近100值,表明目前的价位越接近过去14日内的最高价,从这点出发,对于威廉指标的研判可能比较更容易理解。
由于计算方法的不同,威廉指标的刻度在有些书中与随机指标W%R 和相对强弱指标RSI一样,顺序是一样的,即上界为100、下界为0。而在我国沪深股市通用的股市分析软件(钱龙、分析家等分析软件系统)中,W%R的刻度与RSI的刻度相反。为方便投资者,这里介绍的W%R的刻度与钱龙(分析家)软件相一致,即上界为0、下界为100。
另外,和其他指标的计算一样,由于选用的计算周期的不同,W%R指标也包括日W%R指标、周W%R指标、月W%R指标和年W%R指标以及分钟W%R指标等各种类型。经常被用于股市研判的是日W%R指标和周W%R指标。虽然它们的计算时的取值有所不同,但基本的计算方法一样。
相对强弱指标——RSI
相对强弱指标RSI又叫力度指标,其英文全称为“Relative Strength Index”,由威尔斯·魏尔德﹝Welles Wilder﹞所创造的,是目前股市技术分析中比较常用的中短线指标。
RSI指标的原理
相对强弱指标RSI是根据股票市场上供求关系平衡的原理,通过比较一段时期内单个股票价格的涨跌的幅度或整个市场的指数的涨跌的大小来分析判断市场上多空双方买卖力量的强弱程度,从而判断未来市场走势的一种技术指标。
从它构造的原理来看,与MACD、 TRIX等趋向类指标相同的是,RSI指标是对单个股票或整个市场指数的基本变化趋势作出分析,而与MACD、TRIX等不同的是,RSI指标是先求出单个股票若干时刻的收盘价或整个指数若干时刻收盘指数的强弱,而不是直接对股票的收盘价或股票市场指数进行平滑处理。
相对强弱指标RSI是一定时期内市场的涨幅与涨幅加上跌幅的比值。它是买卖力量在数量上和图形上的体现,投资者可根据其所反映的行情变动情况及轨迹来预测未来股价走势。在实践中,人们通常将其与移动平均线相配合使用,借以提高行情预测的准确性。
RSI指标的计算方法
相对强弱指标RSI的计算公式有两种
其一:
假设A为N日内收盘价的正数之和,B为N日内收盘价的负数之和乘以(—1)
这样,A和B均为正,将A、B代入RSI计算公式,则
RSI(N)=A÷(A+B)×100
其二:
RS(相对强度)=N日内收盘价涨数和之均值÷N日内收盘价跌数和之均值
RSI(相对强弱指标)=100-100÷(1+RS)
这两个公式虽然有些不同,但计算的结果一样。
以14日RSI指标为例,从当起算,倒推包括当日在内的15个收盘价,以每一日的收盘价减去上一日的收盘价,得到14个数值,这些数值有正有负。这样,RSI指标的计算公式具体如下:
A=14个数字中正数之和
B=14个数字中负数之和乘以(—1)
RSI(14)=A÷(A+B)×100
式中:A为14日中股价向上波动的大小
B为14日中股价向下波动的大小
A+B为股价总的波动大小
RSI 的计算公式实际上就是反映了某一阶段价格上涨所产生的波动占总的波动的百分比率,百分比越大,强势越明显;百分比越小,弱势越明显。RSI的取值介于0— 100之间。在计算出某一日的RSI值以后,可采用平滑运算法计算以后的RSI值,根据RSI值在坐标图上连成的曲线,即为RSI线。
以日为计算周期为例,计算RSI值一般是以5日、10日、14日为一周期。另外也有以6日、12日、24日为计算周期。一般而言,若采用的周期的日数短,RSI指标反应可能比较敏感;日数较长,可能反应迟钝。目前,沪深股市中RSI所选用的基准周期为6日和12日。
和其他指标的计算一样,由于选用的计算周期的不同,RSI 指标也包括日RSI指标、周RSI指标、月RSI指标年RSI指标以及分钟RSI指标等各种类型。经常被用于股市研判的是日RSI指标和周RSI指标。虽然它们的计算时的取值有所不同,但基本的计算方法一样。另外,随着股市软件分析技术的发展,投资者只需掌握RSI形成的基本原理和计算方法,无须去计算指标的数值,更为重要的是利用RSI指标去分析、研判股票行情。
### 中间意愿指标——CR
CR指标又叫中间意愿指标,它和AR、BR指标又很多相似之处,但更有自己独特的研判功能,是分析股市多空双方力量对比、把握买卖股票时机的一种中长期技术分析工具。
CR指标的原理
CR指标同AR、BR指标有很多相似的地方,如计算公式和研判法则等,但它与AR、BR指标最大不同的地方在于理论的出发点有不同之处。CR指标的理论出发点是:中间价是股市最有代表性的价格。
为避免AR、 BR指标的不足,在选择计算的均衡价位时,CR指标采用的是上一计算周期的中间价。理论上,比中间价高的价位其能量为“强”,比中间价低的价位其能量为“ 弱”。CR指标以上一个计算周期(如N日)的中间价比较当前周期(如日)的最高价、最低价,计算出一段时期内股价的“强弱”,从而在分析一些股价的异常波动行情时,有其独到的功能。
另外,CR指标不但能够测量人气的热度、价格动量的潜能,而且能够显示出股价的压力带和支撑带,为分析预测股价未来的变化趋势,判断买卖股票的时机提供重要的参考。
CR指标的计算方法
由于选用的计算周期不同,CR指标也包括日CR指标、周CR指标、月CR指标、年CR指标以及分钟CR指标等很多种类型。经常被用于股市研判的是日CR指标和周CR指标。虽然它们计算时取值有所不同,但基本的计算方法一样。
以日CR指标为例,其计算公式为:
CR(N日)=P1÷P2×100
式中,P1=∑(H-YM),表示N日以来多方力量的总和
P2=∑(YM-L),表示N日以来空方力量的总和
H表示今日的最高价,L表示今日的最低价
YM表示昨日(上一个交易日)的中间价
CR计算公式中的中间价其实也是一个指标,它是通过对昨日(YM)交易的最高价、最低价、开盘家和收盘价进行加权平均而得到的,其每个价格的权重可以人为地选定。目前比较常用地中间价计算方法有四种:
1、M=(2C+H+L)÷4
2、M=(C+H+L+O)÷4
3、M=(C+H+L)÷3
4、M=(H+L)÷2
式中,C为收盘价,H为最高价,L为最低价,O为开盘价
从四种中间价的计算方法来看,对四种价格的重视程度是不一样的,三种都是选用了收盘价,可见,收盘价在技术分析中的重要性。
和其他技术指标一样,在实战中,投资者不需要进行CR指标的计算,主要是了解CR的计算方法,以便更加深入地掌握CR指标的实质,为运用指标打下基础。
相关技术指标图表
分析股价数据特征,主要对开盘价、收盘价、最高价、最低价、涨跌幅、成交额、换手率、量比、市盈率、市净率、市销率、流通股本、总股本、小、中、大、特大单买入卖出额等特征进行分析,并且对以上特征应用了指数移动平均、差分自相关等数据处理手段。
- 股价、成交量特征
- MACD 异步移动均线
- 布林线和随机指标KDJ
-
开盘价和相关强弱指数RSI
-
威廉指标WR和中间意愿指标CR
- 短线超买超卖指标CCI、成交量变异率VR和波动幅度TR
- 动向指标DMI
- 傅里叶变换和逆变换
-
股价频谱分析
-
收盘价逐日相关性 price correlation
4.4. 特征重要性分析
-
特征重要性分析 xgboost回归
-
特征重要性误差分析
我们可以看到,在去除强相关性的特征后,验证集的误差随着训练次数的迭代有所增加,表明模型出现了过拟合。
由于在股价数据中,包含有大量与股价特征强相关的数据,比如开盘价、股价动量(即为前一日的收盘价),股价七日均值等,在使用xgboost进行回归时,这些特征会因强相关特性而独占重要性指标,比如股价动量重要性可达到0.8以上,这样会削弱其他指标的重要性度量。
所以在实际操作中,为了将强相关因素排除,更多的利用其他指标构建股价的特征关系,我们删除了部分特征,并得到了以上特征重要性直方图。以上最重要的特征其重要性也在0.2以下,我们尽可能的实现特征与股价强相关的剥离,并试图发现股价与其他特征的关联。
在训练时,我将训练数据和验证数据比例设置为0.9,但是当我将训练/验证比例设置为0.98时,模型的特征重要性发生了比较明显的变化。在接下来对vae进行训练时,也出现了由于训练/验证比例的变化而造成的结果漂移。
训练模型的数据/验证比例变化会明显的影响结果,这让我很难理解。有可能是模型并没有发现数据的时间序列特性,也可能是特征本身并没有对股价有明显的影响。