11.会员专属(499)

高频特征抽取模块 (副本)

由small_q创建,最终由small_q 被浏览 28 用户

导语

本文主要介绍高频特征抽取–由分钟到日频功能模块的使用。

模块简介

高频模块的意义

高频数据是目前顶级量化基金的重点布局领域,高频因子研究系统满足了用户可实现高频数据的挖掘需求,包括数据横向扩容、性能优化、高频因子抽取、分布式数据挖掘等功能。实现了从小数据、单机环境、经验规则到大数据、集群算力、AI算法的跨越式发展,研究人员不再受限于数据规模小、单机算力低,即可利用机器学习、深度学习等算法实现AI实验的开发。

具体价值如下:

1)实现高频数据可读取加载。该数据一般包括tick快照、逐笔成交和委托数据,17年以来的数据大约为几十T,该数据规模较大,单机环境无法加载进内存,更不提如何做分析和研究。

2)高频数据研究成为可能。即使可读取大规模的高频数据进内存,但受限于单机环境的CPU,一个数据清洗可能会花费数天的时间。高频研究系统可利用集群算力,并能够横向扩容,进行分布式运算,将数天的时间开销降低到数小时或数分钟。

3)挖掘高频因子,开发出同质化更低的AI量化策略。国内的基金都在抢先布局高频数据研究,在日频数据上挖掘因子已经非常饱和竞争异常激烈,而且寻找到的因子同质化太高,因子衰减很快。

高频分钟字段介绍

高频分钟数据包含以下字段:共计143个,其中bid/ask_num_orders1-10字段为2019-06-06后新增的字段(字段释义详情见附录)

    'instrument', 'date', 'time', 'trading_day', 'open', 'high',
    'low', 'close', 'pre_close', 'amount', 'volume',
    'total_10_bid_volume', 'total_10_ask_volume', 'ask_price1',
    'bid_price1', 'ask_volume1', 'bid_volume1', 'ask_num_orders1',
    'bid_num_orders1', 'ask_price2', 'bid_price2', 'ask_volume2',
    'bid_volume2', 'ask_num_orders2', 'bid_num_orders2',
    'ask_price3', 'bid_price3', 'ask_volume3', 'bid_volume3',
    'ask_num_orders3', 'bid_num_orders3', 'ask_price4', 'bid_price4',
    'ask_volume4', 'bid_volume4', 'ask_num_orders4',
    'bid_num_orders4', 'ask_price5', 'bid_price5', 'ask_volume5',
    'bid_volume5', 'ask_num_orders5', 'bid_num_orders5',
    'ask_price6', 'bid_price6', 'ask_volume6', 'bid_volume6',
    'ask_num_orders6', 'bid_num_orders6', 'ask_price7', 'bid_price7',
    'ask_volume7', 'bid_volume7', 'ask_num_orders7',
    'bid_num_orders7', 'ask_price8', 'bid_price8', 'ask_volume8',
    'bid_volume8', 'ask_num_orders8', 'bid_num_orders8',
    'ask_price9', 'bid_price9', 'ask_volume9', 'bid_volume9',
    'ask_num_orders9', 'bid_num_orders9', 'ask_price10',
    'bid_price10', 'ask_volume10', 'bid_volume10',
    'ask_num_orders10', 'bid_num_orders10', 'num_trades',
    'bid_avg_price', 'ask_avg_price', 'total_bid_volume',
    'total_ask_volume', 'entrust_rate', 'entrust_differ_volume',
    'entrust_bid_amount', 'entrust_ask_amount',
    'entrust_differ_amount', 'ask_volume', 'bid_volume',
    'ask_amount', 'bid_amount', 'beyond_1_bid_volume',
    'beyond_1_bid_amount', 'beyond_1_ask_volume',
    'beyond_1_ask_amount', 'beyond_2_bid_volume',
    'beyond_2_bid_amount', 'beyond_2_ask_volume',
    'beyond_2_ask_amount', 'beyond_3_bid_volume',
    'beyond_3_bid_amount', 'beyond_3_ask_volume',
    'beyond_3_ask_amount', 'beyond_4_bid_volume',
    'beyond_4_bid_amount', 'beyond_4_ask_volume',
    'beyond_4_ask_amount', 'beyond_5_bid_volume',
    'beyond_5_bid_amount', 'beyond_5_ask_volume',
    'beyond_5_ask_amount', 'beyond_6_bid_volume',
    'beyond_6_bid_amount', 'beyond_6_ask_volume',
    'beyond_6_ask_amount', 'beyond_7_bid_volume',
    'beyond_7_bid_amount', 'beyond_7_ask_volume',
    'beyond_7_ask_amount', 'beyond_8_bid_volume',
    'beyond_8_bid_amount', 'beyond_8_ask_volume',
    'beyond_8_ask_amount', 'beyond_9_bid_volume',
    'beyond_9_bid_amount', 'beyond_9_ask_volume',
    'beyond_9_ask_amount', 'beyond_10_bid_volume',
    'beyond_10_bid_amount', 'beyond_10_ask_volume',
    'beyond_10_ask_amount', 'beyond_11_bid_volume',
    'beyond_11_bid_amount', 'beyond_11_ask_volume',
    'beyond_11_ask_amount', 'beyond_12_bid_volume',
    'beyond_12_bid_amount', 'beyond_12_ask_volume',
    'beyond_12_ask_amount', 'beyond_13_bid_volume',
    'beyond_13_bid_amount', 'beyond_13_ask_volume',
    'beyond_13_ask_amount', 'initiative_bid_amount',
    'initiative_bid_volume', 'initiative_bid_rate',
    'initiative_ask_volume', 'initiative_ask_amount',
    'initiative_ask_rate'

模块使用说明

模块支持的python库和支持设置中间变量

1、在构建特征数据时支持numpy库 = np;pandas库 = pd;talib = ta;math库,支持pandas series 内建函数等。方便用户灵活的构建特征数据。

2、支持设置中间变量,在变量前加_表示中间变量,中间变量只会用于中间的计算不会出现在最终结果中,可以加快计算的速度。

例如:

_ret = close.pct_change().fillna(close.iloc[0]/open.iloc[0])
skew = _ret.skew()

其中的_ret就是中间变量,只用于计算出skew。

高频特征抽取模块属性设置介绍

1、开始和结束日期可自行设置或默认为代码列表的设置

{w:100}{w:100}{w:100}{w:100}

2、向前取数据天数

{w:100}{w:100}{w:100}{w:100}

向前取数据天数,比如,用户通过表达式计算的衍生特征,可能需要用到开始日期之前的数据,可以通过设置此值实现,则数据将从 开始日期-向前取数据天数 开始取。考虑到节假日等,建议将此值得大一些

3、并行计算数量

{w:100}{w:100}{w:100}{w:100}

分钟数据量庞大,每只股票一天有240条数据。为了节约用户的计算时间,平台提供了设置并行数量的功能,并行数量越多可以使运行速度提升

4、并行模式

提供了集群、测试、单机选择

{w:100}{w:100}{w:100}{w:100}

测试:适合做一些因子调试和测试,只会抽取三只股票进行测试。

集群:适合当完成了因子调试,进行实打实的计算,会在整个集群新起POD参与计算

单机:只使用当前POD计算

5、分钟数据源

选取分钟数据源表id,默认为level2_bar1m_CN_STOCK_A

模块支持二次抽取因子

当利用高频特征抽取模块将分钟因子抽取为日频因子后可以继续对日频因子进行加过计算

例如:继续拖入特征列表模块进行特征提取

{w:100}{w:100}{w:100}{w:100}更支持利用衍生特征抽取模块实现自定义表达式:

{w:100}{w:100}{w:100}{w:100}因子构建示例

因子 定义 表达式算子
收益率标准差 日内每分钟K线收益率标准差 ret = close.pct_change().fillna(0) std = np.std(ret)
早盘前30分钟成交量占比 早上9:30到10:00成交占全天占比 volume_ratio = volume.loc[93000:100000].sum() / volume.sum()
日内成交量最低价协方差 每分钟K线最低价与每分钟成交量的相关性 low_volume_cov = low.cov(volume)
日内某区间涨幅 10点到下午14:57区间的收益率 inday_ret = close.loc[145700]/close.loc[95900] - 1
开盘主买强度 开盘前n个时点主动买入金额的均值/主动买入金额的方差 initiative_bid_strength = np.nanmean(initiative_bid_amount.loc[:93100]) / np.power(np.nanstd(initiative_bid_amount.loc[:93100]), 2)
开盘主卖强度 开盘前n个时点被动买入金额的均值/被动买入金额的方差 initiative_ask_strength = np.nanmean(initiative_ask_amount.loc[:93100]) / np.power(np.nanstd(initiative_ask_amount.loc[:93100]), 2)
聪明钱因子 研报详解 _st = ((close / close.shift(1) - 1).abs() / volume.pow(0.5)).sort_values(ascending=False) \n _volume = volume[_st.index] \n _close = close[_st.index] \n _smart_money = (_volume.cumsum() / volume.sum()) <= 0.2 smart_money = ((_volume[_smart_money] * _close[_smart_money]).sum() / _volume[_smart_money].sum()) / ((volume * close).sum() / volume.sum())

此外,对于复杂的因子,平台支持自定义表达式构建因子。

字段释义

字段名 数据类型 中文释义 字段描述
amount float64 成交金额 某一分钟内的成交金额之和
volume int64 成交量 某一分钟内的成交量之和
ask_avg_price float32 加权平均委卖价 以委卖量求加权平均
bid_avg_price float32 加权平均委卖价 以委买量求加权平均
ask_num_orders* int32 卖*档各档委托笔数(每一个价位档,有多少笔委托,* 取值: 1 .. 10) 1-10档委卖各档的委托笔数,非总和(2019-06-06新增字段)
bid_num_orders* int32 买*档各档委托笔数(每一个价位档,有多少笔委托,* 取值: 1 .. 10) 1-10档委买各档的委托笔数,非总和(2019-06-06新增字段)
ask_price* float32 *档委卖价(* 取值: 1 .. 10) 1档到10档委卖价依次增加
bid_price* float32 *档委买价(* 取值: 1 .. 10) 1档到10档委买价依次降低
ask_volume* int32 *档委卖量(* 取值: 1 .. 10) 1-10档各档的委卖量,非增量
bid_volume* int32 *档委买量(* 取值: 1 .. 10) 1-10档各档的委买量,非增量
open float32 开盘价 第一个K线包含开盘集合竞价。最后一个K线应包括尾盘集合竞价
high float32 最高价
low float32 最低价
num_trades int64 成交笔数 某一分钟内成交笔数,非增量
date datetime64 日期时间 本字段包含了年份、月份、天、小时、分钟、秒、毫秒(YYYY-mm-dd HH:MM:SS:mmm)
time int32 时间 本字段包含小时、分钟、秒、毫秒(HHMMSSmmm)
total_10_ask_volume int32 10档总委卖量 某一分钟内,前十档的委卖总和只是某一分钟内的总和,不与之前时间段的委卖量做加运算
total_10_bid_volume int32 10档总委买量 某一分钟内,前十档的委买总和只是某一分钟内的总和,不与之前时间段的委买量做加运算
pre_close float32 前收盘 前一交易日的收盘价格
instrument str 证券代码
total_bid_volume int64 委买总量 截至某一分钟所有的委买量之和
total_ask_volume int64 委卖总量 截至某一分钟所有的委买量之和
entrust_rate float32 总委比 (总委买量-总委卖量)/(总委买量 +总委卖量)*100%
entrust_differ_volume int64 总委差量 总委买量-总委卖量
entrust_bid_amount float64 总委买额 从买一到跌停位置的总委卖金额= 总委卖量*加权委卖均价
entrust_ask_amount float64 总委卖额 从卖一到涨停位置的总委买金额= 总委量*加权委买均价
entrust_differ_amount float64 总委差额 总委买金额-总委卖金额
ask_amount float64 全部卖出成交金额之和 某一分钟内所有委卖档成交金额之和
ask_volume float64 全部卖出成交量之和 某一分钟内所有委卖档成交量之和
beyond_*_ask_amount(*取1-13) float64 大于(均值+标准差Y倍)的成交单的全部卖出成交金额之和(Y取[-3:3],步长为0.5) 主力:成交量大于均值+Nmain 倍标准差的买单资金超大单:成交量大于均值+Nlarge 倍标准差的买单资金大单:成交量大于均值+Nbig 倍标准差小于均值+Nlarge 倍标准差的买单资金中单:成交量大于均值-Nmiddle 倍标准差小于均值+Nbig 倍标准差的买单资金小单:成交量小于均值-Nmiddle 倍标准差的买单资金
beyond_*_ask_volume(*取1-13) float64 大于(均值+标准差1.5倍)的成交单的全部卖出成交量之和(Y取[-3:3],步长为0.5)
beyond_*_bid_amount(*取1-13) float64 大于(均值+标准差Y倍)的成交单的全部买入成交金额之和(Y取[-3:3],步长为0.5)
beyond_*_bid_volume(*取1-13) float64 大于(均值+标准差1.5倍)的成交单的全部买入成交量之和(Y取[-3:3],步长为0.5)
bid_amount float64 全部买入成交金额之和 某一分钟内所有委买成交金额之和
bid_volume float64 全部买入成交量之和 某一分钟内所有委买成交量之和
initiative_ask_amount float64 主卖总额 某一分钟内主动卖出的总成交金额
initiative_ask_rate float32 主卖比率 某一分钟内主动卖出成交金额占总成交金额的比例
initiative_ask_volume int64 主卖成交量 某一分钟内主动卖出的总成交量
initiative_bid_amount float64 主买总额 某一分钟内主动买入的总成交金额
initiative_bid_rate float32 主买比率 某一分钟内主动买入成交金额占总成交金额的比例
initiative_bid_volume int64 主买成交量 某一分钟内主动买入的总成交量

示例策略

小伙伴可通过克隆进行研究。

https://bigquant.com/experimentshare/ec3404ef23a04bc88da779261b361d7e

\

{link}