高频行情低频化因子库使用教程

29 阅读1小时+

目前,在量化投资研究领域,因子挖掘与应用正不断向更高频、更精细的数据层级深入。经典的因子库,如 国泰君安 191 Alpha 因子库 和 WorldQuant 101 Alpha 因子指标库,为基于日频、分钟频等中低频行情数据的策略开发提供了坚实基础。然而,这类低频因子在捕捉瞬息万变的市场微观结构信息、挖掘更具时效性和差异化的交易信号方面存在天然的局限。

随着行情数据粒度的不断细化,海量的分钟级、快照级乃至逐笔数据蕴含着更丰富的价格形成、订单流动与市场参与者行为信息。直接从这些高频数据中高效、稳定地提炼出可靠的 Alpha 信号,并将其“降维”应用于频率相对较低(如日度、小时级)的策略研究与组合管理中,已成为业界的重要发展方向。高频数据低频化过程的核心业务价值在于:使得策略开发者能够将微观、瞬时的市场状态(如资金流向、订单簿失衡、交易冲击等)转化为具有稳定预测能力的低频特征或因子,从而在更低频的交易周期中,提前洞察机会、优化风险控制,构建具备信息优势的差异化策略。

为满足这一需求,本教程提供了一套基于 DolphinDB 高性能时序数据库和分析引擎原生构建的、面向分钟级乃至 tick 级金融数据的专业因子计算解决方案。其核心在于,将公开研报和文献中经过验证的 100 余个中低频日频因子,结合 DolphinDB 的卓越数据处理能力,高效地适配并应用于分钟 K 线、Level-2 行情快照、逐笔委托和逐笔成交等高频数据源上。

注意:本教程包含的所有代码兼容 DolphinDB 2.00.12,3.00.2 及以上版本。

1. 高频行情低频化因子库简介

高频行情数据通常指时间粒度介于日频与超高频(如毫秒级)之间的数据,主要包括分钟 K 线、快照行情、逐笔成交与委托等类型。这些数据实时记录了市场最细微的价格变动、订单流动与交易行为,是捕捉市场微观结构、挖掘独特 Alpha 信号的信息宝库。

本教程基于经典的公开研报和学术文献等资料系统整理并实现了一个高频行情低频化因子库,涵盖了量价趋势类、波动率类、流动性类等多种类别的因子。该因子库的核心价值在于,提供了一套经过完整工程实现、性能优化与初步验证的标准化因子计算流程,用户可直接基于自己的高频数据运行,快速获得可用于低频策略研究的、具有更高信息密度的因子序列。

本因子库完全基于 DolphinDB​ 高性能时序数据库原生构建。DolphinDB 集成了分布式计算、实时流处理与高效存储引擎,其内置的多范式编程语言与丰富的金融分析函数,能够轻松应对高频数据处理的巨大吞吐与计算复杂度挑战,实现从 TB 级高频数据到日频因子的秒级生成。本文提供了完整的计算脚本与性能基准,帮助用户快速验证、迭代与部署自己的低频化因子。具体的因子列表与计算脚本请见第 7 章。

2. 数据集与入参规范

本文的中高频因子库基于行情数据集:分钟 K 线数据、快照数据、逐笔成交和逐笔委托数据。本节提供了相关数据集的部分字段和存储方案,具体的建库建表方案及相关代码请参考 存储金融数据的分区方案最佳实践

数据集简称代码样例中的分区数据库路径代码样例中的表名分区方案
分钟 K 线stockMinKSHdfs://stockMinKSHstockMinKSH按天分区
快照行情snapshotdfs://Level2snapshot按天分区 + 按股票代码 HASH50 分区
逐笔委托entrustdfs://Level2entrust按天分区 + 按股票代码 HASH50 分区
逐笔成交tradedfs://Level2trade按天分区 + 按股票代码 HASH50 分区

2.1 分钟 K 线数据

分钟 K 线数据是指每分钟的市场行情走势,由逐笔成交数据聚合产生,通常用于短线交易者分析日内价格波动。本教程中分钟 K 线数据采用“时间维度按天”的分区规则,使用 OLAP 存储引擎,每个分区内都包含了当天所有股票的分钟 K 线数据。其中,涉及到因子计算的重要字段有:

字段名称数据类型数据说明
1SecurityIDSYMBOL股票代码
2DateTimeTIMESTAMP交易时间
3OpenPriceDOUBLE开盘价
4HighPriceDOUBLE最高价
5LowPriceDOUBLE最低价
6LastPriceDOUBLE收盘价
7VolumeLONG成交量
8AmountDOUBLE成交额

2.2 Level-2 行情数据

股票 Level-2 行情数据包含 Level-2 快照数据、逐笔委托数据、逐笔成交数据。在分布式数据库中,对跨分区数据表进行连接操作往往十分耗时,因为涉及到的分区可能位于不同的节点上,需要在不同节点之间复制数据。为解决这个问题,DolphinDB 推出了共存储位置(co-location)的分区机制,使同一分布式数据库中、分区方案一致的多个表,其相同分区的数据能够存放在同一节点上,从而显著提升表连接效率。因此在本教程中,把 Level-2 快照数据、逐笔委托数据、逐笔成交数据这些分区方案一致的数据表存入同一个数据库中“时间维度按天 + 股票维度 HASH50”的分区规则,使用 TSDB 存储引擎。

2.2.1 Level-2 行情快照数据

Level-2 行情快照数据是对逐笔行情数据的某一个时刻的,通常以 3 秒为周期更新,包含多档买卖盘等关键信息。其中,涉及到因子计算的重要字段有:

字段名称数据类型数据说明
1SecurityIDSYMBOL证券代码
2TradeTimeTIMESTAMP数据生成时间
3PreCloPriceDOUBLE昨日收盘价
4NumTradesINT成交笔数
5TotalVolumeTradeINT成交总量
6TotalValueTradeDOUBLE成交总金额
7LastPriceDOUBLE最近价
8OpenPriceDOUBLE开盘价
9HighPriceDOUBLE最高价
10LowPriceDOUBLE最低价
11ClosePriceDOUBLE今日收盘价
12TotalBidQtyINT委托买入总量
13TotalOfferQtyINT委托卖出总量
14OfferPriceDOUBLE VECTOR卖价 10 档
15BidPriceDOUBLE VECTOR买价 10 档
16OfferOrderQtyINT VECTOR卖量 10 档
17BidOrderQtyINT VECTOR买量 10 档
18MarketSYMBOL交易所名称

2.2.2 Level-2 逐笔委托数据

Level-2 逐笔委托数据记录了市场中每一笔委托行为,包括新委托的提交、现有委托的撤销以及委托价格或数量的修改。其中,涉及到因子计算的重要字段有:

字段名称数据类型数据说明
1SecurityIDSYMBOL证券代码
2TradeTimeTIMESTAMP报价时间
3PriceDOUBLE委托价格
4OrderQtyINT委托数量
5SideSYMBOL买卖方向
6MarketSYMBOL交易所名称

2.2.3 Level-2 逐笔成交数据

Level-2 逐笔成交数据是交易所公布的买卖双方具体成交的每一笔数据,每 3 秒发布一次,每次包含这 3 秒内的所有成交记录。每一笔成交撮合都由买方和卖方的一笔具体委托组成,是交易过程的真实成交情况。其中,涉及到因子计算的重要字段有:

字段名称数据类型数据说明
1SecurityIDSYMBOL证券代码
2TradeTimeTIMESTAMP成交时间
3BidApplSeqNumLONG买方委托索引
4OfferApplSeqNumLONG卖方委托索引
5TradPriceDOUBLE委托价格
6TradeQtyDOUBLE委托数量
7TradeMoneyDOUBLE成交金额
8MarketSYMBOL交易所名称

3. 因子存储

因子挖掘是量化交易的必备环节之一,随着量化交易和 AI 模型训练规模的发展,量化投资团队在投研环节势必需要处理大量因子数据。因子的存储也是一个关键问题,目前 DolphinDB 支持宽表和窄表两种存储模式。相较于宽表,窄表存储支持更加高效地添加、更新、删除因子等操作,推荐使用窄表存储因子库。

3.1 建立因子库

针对日频因子库,经过各项测试后(测试见 中高频多因子库存储最佳实践,推荐采用“时间维度按年 + 因子名”的组合分区方式存储,使用 TSDB 存储引擎,以作为排序列。更多金融数据与因子库分区方案见 存储金融数据的分区方案最佳实践具体脚本如下:

// 创建日频因子库
create database "dfs://factor_day"
partitioned by RANGE(date(datetimeAdd(1980.01M,0..80*12,'M'))), VALUE(`f1`f2),
engine='TSDB',
atomic='CHUNK'

// 创建分区表
create table "dfs://factor_day"."factor_day"(
     SecurityID SYMBOL,
     TradeDate DATE[comment="时间列", compress="delta"],
     Value DOUBLE,
     FactorName SYMBOL,
     UpdateTime TIMESTAMP,
 )
partitioned by TradeDate, FactorName
sortColumns=[`SecurityID, `TradeDate],
keepDuplicates=ALL, //保留所有写入的因子值
sortKeyMappingFunction=[hashBucket{, 500}]

3.2 处理计算结果并入库

因子计算结果是一个五列的表格,分别是 SecurityID(证券代码)、TradeDate(数据日期)、Value(因子值)、FactorName(因子名)以及 UpdateTime(更新日期)。本文推荐采用窄表方式存储因子,因此可将计算结果直接入库,其代码如下:

//读取数据库并将结果入库
loadTable("dfs://factor_day","factor_day").append!(select * from res)

4. 因子计算流程

本章将完整地介绍如何调取数据进行因子计算并将计算结果存储入库。考虑到部分因子具有特殊的数据需求或计算方式,其实现方式与其他因子有所区别,相关内容将在 4.2 小节单独介绍。

4.1 因子通用计算流程

本因子库内所有 dos 脚本均由三部分构成:因子计算函数,后台任务提交函数以及因子计算样例。用户正确配置参数并直接运行脚本即可实现因子的计算与入库。接下来将分别介绍每一部分的具体内容及使用方法。

4.1.1 因子计算函数

本小节定义了因子计算函数。这些函数均以因子计算依赖的基础数据表作为唯一入参,并返回一个表。输出表包含五列:SecurityID(证券代码)、TradeDate(数据日期)、Value(因子值)、FactorName(因子名)以及 UpdateTime(更新日期),其中每一行对应单只股票在单个交易日的因子值。

以成交量占比偏度因子为例,其因子计算函数如下:

def skewVolProp(snapshot){
    snap = 
        select 
            TradeDate, TradeTime, SecurityID,
            deltas(TotalVolumeTrade)\last(TotalVolumeTrade) as volProp
        from snapshot 
        context by TradeDate, SecurityID csort TradeTime
        having TradeTime >= 09:30:00.000
    //日内tick成交量除以总成交量序列的偏度
    res = 
        select 
            SecurityID, 
            TradeDate,
            skew(volProp) as Value,
            "skewVolProp" as FactorName, 
            now() as UpdateTime
        from snap 
        group by TradeDate, SecurityID
    return res
}

4.1.2 后台任务提交函数

因子计算通常涉及较长时间跨度的数据,处理耗时较长,因此更适合将任务提交至服务器后台执行。本节介绍的函数旨在将因子的计算流程与存储逻辑封装为可执行单元,并以异步任务的形式提交至后台运行。

后台任务提交函数的入参为一个包含因子计算基本信息的字典,其具体内容如下:

配置项配置内容类型
1func计算因子的函数名FUNCTION
2funcsec调整因子的函数名FUNCTION
3factorName因子名SYMBOL
4dataDB计算所需数据的数据库STRING
5dataTB计算所需数据的数据表STRING
6factorDB存储因子的数据库STRING
7factorTB存储因子的数据表STRING
8startDay计算因子的起始日期DATE
9endDay计算因子的结束日期DATE

该函数首先根据 dataDB 库中 dataTB 表的分区信息,生成一个由多条 SQL 元代码构成的向量 ds。每条 SQL 会查询 startDay 到 endDay 期间每日给定时段的数据,这些数据将作为并行计算任务的数据源。随后,函数通过 mr 函数并行调用因子计算函数 func 进行处理,并使用 unionAll 函数合并所有分区的计算结果。最终,函数将结果按 factorDB 库中 factorTB 表所需的格式进行整理后将数据存入目标因子库。

以成交量占比偏度因子为例,其后台任务提交函数如下:

def factorJob(conf){
    dataTB = loadTable(conf[`dataDB], conf[`dataTB])
    days = conf[`startDay]..conf[`endDay]
    startTime = 09:27:00.000
    endTime = 14:57:00.000
    //提取计算所需数据,sqlDS生成元代码
    ds = sqlDS(<select SecurityID, TradeDate, TradeTime, TotalVolumeTrade
        from dataTB 
        where TradeDate in days and (TradeTime between startTime and endTime) and (SecurityID like "00%" or SecurityID like "30%" or SecurityID like "6%")>)
    //计算因子,mr函数将因子在不同节点并行计算,unionAll函数将不同节点的计算结果汇总
    res = mr(ds, conf[`func]).unionAll()
    //写入因子库,存储到磁盘做持久化
    loadTable(conf[`factorDB], conf[`factorTB]).append!(select * from res)
}

4.1.3 计算样例

本小节将提供参数配置和提交后台任务的一个样例。首先,基于 4.1.2 小节中的入参字典配置参数 conf,其次使用 submitJob函数将任务函数提交到服务器后台执行。

以成交量占比偏度因子为例,其计算样例如下:

// 配置计算因子的参数
// conf = {
//     func : 计算因子的函数名
//     funcsec : 计算再调整因子的函数名
//     factorName : 因子名
//     dataDB : 计算所需数据的数据库
//     dataTB : 计算所需数据的数据表
//     factorDB : 存储因子的数据库
//     factorTB : 存储因子的数据表
//     startDay : 计算因子的起始日期
//     endDay : 计算因子的结束日期
// }
conf = {
    func : skewVolProp,
    funcsec : NULL,
    factorName : `skewVolProp,
    dataDB : "dfs://Level2",
    dataTB : "snapshot",
    factorDB : "dfs://factor_day",
    factorTB : `factor_day,
    startDay : 2023.02.01,
    endDay : 2023.02.28
}

//提交计算和存储因子的任务到服务器并返回任务 id
id = submitJob("factor_job", conf[`factorName], factorjob, conf)

在该例子中,计算的因子名为 skewVolProp ,计算因子的函数为 skewVolProp计算所需的 2023 年 2 月的通联 Level-2 行情快照数据存储于数据库 dfs://Level2 下的 snapshot 表中计算的时间区间为 2023 年 2 月 1 日到 2023 年 2 月 28 日计算得到的因子将存储在数据库 dfs://factor_day 下的表 factor_day 中。因为该因子不涉及调整因子的函数,因此配置项 funcsec 为 NULL 。

配置完成后,submitJob 函数将任务提交到后台服务器,提交的任务名为 factor_jo,任务描述为因子名 skewVolProp,执行的函数为 4.1.2 小节中的 factorJob 函数,入参为 conf。执行 submitJob 函数后等待后台完成计算任务即可完成因子计算到入库的全流程。

4.2 特殊因子实现方式

部分因子实现方式与其他因子有所区别,因此这一小节将单独介绍这些因子的计算和使用方式。

4.2.1 需要额外数据集的因子

部分因子的计算涉及基础数据表与其它数据库表(如历史数据或市场指数数据)。在分布式计算框架下,由于数据按时间和标的分区并行处理,某些因子(如依赖历史窗口的因子或其他市场指数)无法仅从当前传入的数据块中获取全部所需信息。

为解决此问题,本因子库允许在计算函数内部直接读取数据库。对于需要额外数据的因子,其计算函数内已预设了读取逻辑。因此,用户在使用这些因子前,需根据实际环境,在相应的因子计算函数中修改所依赖数据的数据库路径参数。

本因子库中包含的该类因子如下:

因子名涉及的额外数据集
1日度惊恐因子Level-2 行情快照数据
2日内主买占比因子Level-2 行情快照数据
3开盘后净主买占比因子Level-2 行情快照数据
4日内主买强度因子Level-2 行情快照数据
5开盘后净主买强度因子Level-2 行情快照数据
6开盘后买入意愿强度Level-2 逐笔成交数据
7开盘后买入意愿占比Level-2 逐笔成交数据

以开盘后买入意愿强度因子为例,其计算函数如下:

def netBuyIntenOpen(entrustTB){
    //净委买增额:1分钟委托买单增加量减去委托卖单变化量(逐笔委托)
    tmp1 =
        select
            sum(OrderMoney*iif(Side==`B or Side==`1, 1.0, 0.0)) - sum(OrderMoney*iif(Side==`S or Side==`2, 1.0, 0.0)) as enrustNetBuy
        from entrustTB
        group by TradeDate, SecurityID, interval(X=TradeTime, duration=60s, label='left', fill=0) as TradeTime
    //净主买成交额:1分钟主动买入成交额减去主动卖出成交额(逐笔成交)
    //根据逐笔委托当天的标的去逐笔成交表查询计算依赖的行情数据
    calDate = first(entrustTB[`TradeDate])
    codes = exec distinct SecurityID from entrustTB
    tradeTB = 
        select SecurityID, TradeDate, TradeTime, TradePrice*TradeQty as TradeMoney, iif(BidApplSeqNum > OfferApplSeqNum, `B, `S) as BSFlag
        from loadTable("dfs://Level2", "trade")
        where TradeDate=calDate, SecurityID in codes and TradeTime between 09:30:00.000 and 10:00:00.000, TradePrice>0
    tmp2 =
        select
            sum(TradeMoney*iif(BSFlag==`B, 1.0, 0.0))- sum(TradeMoney*iif(BSFlag==`S, 1.0, 0.0)) as tradeNetBuy,
            sum(TradeMoney) as tradeTotal
        from tradeTB
        group by TradeDate, SecurityID, interval(X=TradeTime, duration=60s, label='left', fill=0) as TradeTime
    //开盘后买入意愿强度:开盘后时间段(09:30-10:00)内1分钟买入意愿序列的均值除以标准差
    tmp3 = 
        select 
            mean(tradeNetBuy+enrustNetBuy)\stdp(tradeNetBuy+enrustNetBuy) as Value
        from lj(tmp1, tmp2, `TradeDate`SecurityID`TradeTime)
        where tradeNetBuy!=NULL
        group by TradeDate, SecurityID
    //因子
    res =
        select
            SecurityID,
            TradeDate,
            Value,
            "netBuyIntenOpen" as FactorName,
            now() as UpdateTime
        from tmp3
  return res
}

注: 该类因子的后台任务提交函数与计算样例部分与通用模板一致,遵循通用模板的流程即可计算因子并入库。

4.2.2 基于日频因子的再调整因子

部分因子需在已生成的日频因子上进行二次修正,无法一次性计算得出。对此,本小节采用两步计算策略:先运行日频因子计算函数,再将其结果传入修正函数进行二次处理。因此,这类因子的实现方式与其他因子不同。

在函数定义上,该类因子将有两个关联函数:一个用于计算基础日频因子,另一个用于后续修正。需要特别说明的是,由于日频因子已经过降频处理,修正函数将采用更高效的本地计算,而非分布式计算。

本因子库中包含的该类因子主要:

因子名测试数据集
修正日模糊价差因子分钟 K 线数据

以修正日模糊价差因子为例,其计算因子的函数如下:

//自定义因子计算函数
def fuzzinessDiff(minKTB){
    /**@test 少量数据临时调试
    minKTB = 
        select SecurityID, date(DateTime) as TradeDate, time(DateTime) as TradeTime, LastPx, Volume, Amount
        from loadTable("dfs://stockMinKSH", "stockMinKSH")
        where date(DateTime) between 2021.01.04 and 2021.01.31, SecurityID in `603189`000001 and LastPx>0
    */
    //计算模糊性
    fuzziness = 
        select
            SecurityID,
            TradeDate,
            TradeTime,
            Volume,
            Amount,
            mstd(mstd(percentChange(LastPx), 5, 5), 5, 5) as fuzziness
        from minKTB
        context by SecurityID, TradeDate
    //计算每日起雾时刻模糊性阈值及成交量均值、成交金额均值
    threshold = 
        select 
            SecurityID,
            TradeDate,
            avg(Volume) as avgVolume,
            avg(Amount) as avgAmount,
            avg(fuzziness) as thresholdFuzzy
        from fuzziness
        group by SecurityID, TradeDate
    //日模糊价差=日模糊金额比-日模糊数量比
    res = 
        select 
            SecurityID,
            TradeDate,
            avg(Volume)\first(avgVolume)-avg(Amount)\first(avgAmount) as Value,
            "fuzzinessDiff" as factorName,
            now() as updateTime
        from lj(fuzziness, threshold, `SecurityID`TradeDate)
        where fuzziness > thresholdFuzzy
        group by SecurityID, TradeDate
    return res
}

def adjFuzzinessDiff(diffTB){
    /**@test
    diffTB = select * from res
     */
    //修正日模糊价差:将横截面上值为负的日模糊价差求和,记为 s1;将负的日模糊价差除以其过去 10 日日模糊价差的标准差,值为正的日模糊价差不变
    s1 = 
        select 
            TradeDate,
            sum(Value) as s1 
        from diffTB 
        where Value<0 
        group by TradeDate
    adjDiff = 
        select 
            SecurityID,
            TradeDate,
            iif(Value<0, Value\mstd(Value, 10), Value) as adjFuzzDiff
        from diffTB
        context by SecurityID
    //调整数量级:将横截面上值为负的修正日模糊价差求和,记为 s2;将值为负的修正日模糊价差除以 s2 后乘以 s1
    s2 = 
        select 
            TradeDate,
            sum(adjFuzzDiff) as s2
        from adjDiff 
        where adjFuzzDiff<0 
        group by TradeDate
    s = 
        select 
            TradeDate,
            s1\s2 as s
        from ej(s1, s2, `TradeDate)
    res = 
        select 
            SecurityID,
            TradeDate,
            iif(adjFuzzDiff<0, adjFuzzDiff*s, adjFuzzDiff) as Value,
            "adjFuzzinessDiff" as FactorName,
            now() as UpdateTime
        from lj(adjDiff, s, `TradeDate)
        context by SecurityID, TradeDate
    return res
}

由于该类因子在计算时需要调用两个函数,其任务函数也有所区别。修正模糊价差因子的任务函数如下:

//后台任务计算函数模版
def factorjob(conf){
    dataTB = loadTable(conf[`dataDB], conf[`dataTB])
    days = conf[`startDay]..conf[`endDay]
    startTime = 09:30:00.000
    endTime = 14:57:00.000
    //提取计算所需数据,sqlDS生成元代码
    ds = sqlDS(<select SecurityID, date(DateTime) as TradeDate, time(DateTime) as TradeTime, LastPx, Volume, Amount
        from dataTB
        where date(DateTime) in days and (time(DateTime) between startTime and endTime) and (SecurityID like "00%" or SecurityID like "30%" or SecurityID like "6%") and LastPx>0>)
    //计算因子,mr函数将因子在不同节点并行计算,unionAll函数将不同节点的计算结果汇总
    diffTB = mr(ds, conf[`func]).unionAll()
    res = conf[`funcsec](diffTB)
    //写入因子库,存储到磁盘做持久化
    loadTable(conf[`factorDB], conf[`factorTB]).append!(select * from res)
}

与通用流程的区别在于,此类计算需配置 funcsec 参数以实现两步计算:先分布式执行 func 函数生成日频因子,再通过 funcsec 函数进行修正。配置时,需将修正函数赋值给 conf 的 funcsec。其计算样例如下:

//计算模版配置参数
conf = {
    func : fuzzinessDiff,
    funcsec : adjFuzzinessDiff,
    factorName : "fuzzinessDiff",
    dataDB : "dfs://stockMinKSH",
    dataTB : "stockMinKSH",
    factorDB : "dfs://factor_day",
    factorTB : "factor_day",
    startDay : 2021.01.01,
    endDay : 2021.01.31
}

//提交计算和存储因子的任务到服务器
id = submitJob("factorjob", conf[`factorname], factorjob, conf)

4.3 批量计算因子

本因子库支持批量计算因子。所有脚本开箱即用,只需将参数配置完成的脚本上传至 DolphinDB 服务器,并通过循环执行即可实现批量计算与入库。

以基于逐笔成交的日频因子为例,将所需脚本上传至 /ssd/ssd0/singleDDB/server/高频因子库/基于逐笔成交的日频因子 文件目录下,执行以下代码即可批量计算:

//登录服务器.
login("xxxxxx","xxxxxxxx");
go
//脚本所在目录
scriptdir = "/ssd/ssd0/singleDDB/server/高频因子库/基于逐笔成交的日频因子"

//获取脚本所在目录下的脚本名称
scriptFiles = files(scriptdir)

//批量运行脚本
for(script in scriptFiles){
    run(scriptdir+"/"+script[`filename], newSession = true, clean = true)
    print("已运行脚本:"+script[`filename])
}

用户实际使用时可自行设置脚本所在目录和是否打印运行信息。

4.4 因子更新

本因子库的因子在入库时默认追加至尾部,如用户需要更新已计算的因子值,可以通过在建立存储因子的数据库的时候调整配置项实现。以下示例演示了具体操作。请注意,为保证代码复用性,在建库之前将删除已存在的数据,实际操作时请谨慎执行该行代码。

//删除已有数据库
if(existsDatabase("dfs://factor_day")) dropDatabase("dfs://factor_day")

// 创建日频因子库
create database "dfs://factor_day"
partitioned by RANGE(date(datetimeAdd(1980.01M,0..80*12,'M'))), VALUE(`f1`f2),
engine='TSDB',
atomic='CHUNK'

// 创建分区表
create table "dfs://factor_day"."factor_day"(
     SecurityID SYMBOL,
     TradeDate DATE[comment="时间列", compress="delta"],
     Value DOUBLE,
     FactorName SYMBOL,
     UpdateTime TIMESTAMP,
 )
partitioned by TradeDate, FactorName
sortColumns=[`SecurityID, `TradeDate],
keepDuplicates=LAST, //支持重复写入,保留最新写入的因子值
sortKeyMappingFunction=[hashBucket{, 500}]

创建数据表时 keepDuplicates 参数设置为 LAST 时,将依据 sortColumns 中的数据列保留最新入库的数据。此外,因子表中的 UpdateTime 列可用于记录当前数据入库时间。

5. 计算性能

5.1 测试环境与数据集

5.1.1 测试环境

测试使用的 DolphinDB server 版本为 2.00.16 ,硬件配置如下:

OS(操作系统)CentOS Linux 7 (Core)
内核3.10.0-1160.el7.x86_64
CPUIntel(R) Xeon(R) Gold 5220R CPU @ 2.20GHz 16 逻辑 CPU 核心
内存8*32GB RDUNN, 3200MT/s 总共 256 GB
磁盘固态硬盘(SSD)6*3.84TB 固态硬盘 SATA 读取密集型 6Gbps 512 2.5 英寸 Flex Bay AG 硬盘, 1DWPD单盘测试随机写平均写入IO:430MB/s单盘测试混合随机读写平均写入IO:73MB/s平均读取IO:443MB/s
网络9.41Gbps(万兆以太网)

5.1.2 测试数据集

计算各因子依赖的的数据集及其数据量展示:

因子类型测试数据集数据量(条)
基于行情快照的因子2023 年 2 月沪深 Level-2 快照数据475,627,079
基于逐笔委托数据的因子2023 年 2 月沪深逐笔委托数据2,712,071,019
基于逐笔成交数据的因子2023 年 2 月沪深逐笔成交数据2,067,012,875
基于分钟 K 线的因子2021 年 1 月 K 线数据38,594,699

5.2 测试结果

所有因子测试数据及耗时情况如下:

因子名测试数据计算耗时(s)
1最短路径非流动性因子2021 年 1 月 K 线数据0.29
2一致买入交易因子2021 年 1 月 K 线数据0.25
3绝对收益与调整后滞后成交量相关性因子2021 年 1 月 K 线数据78.75
4成交量“潮汐”的价格变动速率因子2021 年 1 月 K 线数据0.48
5跌幅时间重心偏离因子2021 年 1 月 K 线数据77.94
6一致交易因子2021 年 1 月 K 线数据0.33
7成交额占比熵因子2021 年 1 月 K 线数据0.23
8日内持续异常交易量因子2021 年 1 月 K 线数据0.56
9日耀眼波动率因子2021 年 1 月 K 线数据0.35
10日午蔽古木因子2021 年 1 月 K 线数据1.52
11单一成交额占比熵因子2021 年 1 月 K 线数据0.27
12日度灾后重建因子2021 年 1 月 K 线数据1.01
13滞后绝对收益与调整后成交量相关性因子2021 年 1 月 K 线数据78.53
14日耀眼收益率因子2021 年 1 月 K 线数据0.27
15日度勇攀高峰因子2021 年 1 月 K 线数据1.04
16绝对收益与成交量相关性因子2021 年 1 月 K 线数据0.41
17绝对收益与滞后成交量相关性因子2021 年 1 月 K 线数据0.18
18滞后绝对收益与成交量相关性因子2021 年 1 月 K 线数据0.19
19日朝没晨雾因子2021 年 1 月 K 线数据0.92
20T分布主动占比因子2021 年 1 月 K 线数据0.61
21置信正态分布主动占比因子2021 年 1 月 K 线数据0.30
22朴素主动占比因子2021 年 1 月 K 线数据0.63
23T分布主动占比因子2021 年 1 月 K 线数据0.21
24成交量波峰计数因子2021 年 1 月 K 线数据0.22
25日模糊金额比因子2021 年 1 月 K 线数据0.36
26日模糊数量比因子2021 年 1 月 K 线数据0.38
27P 型成交量分布因子2021 年 1 月 K 线数据0.42
28B 型成交量分布因子2021 年 1 月 K 线数据0.44
29修正日模糊价差因子2021 年 1 月 K 线数据日模糊价差因子:0.38;修正版:0.41
30成交量支撑区域下限与收盘价差异因子2021 年 1 月 K 线数据0.43
31模糊关联度因子2021 年 1 月 K 线数据0.32
32时间加权平均的股票相对价格位置因子2023 年 2 月通联 Level-2 快照数据7.96
33高频上行波动占比因子2023 年 2 月通联 Level-2 快照数据5.94
34高频下行波动占比因子2023 年 2 月通联 Level-2 快照数据5.94
35已实现波动率因子2023 年 2 月通联 Level-2 快照数据5.78
36上行已实现波动率因子2023 年 2 月通联 Level-2 快照数据5.20
37下行已实现波动率因子2023 年 2 月通联 Level-2 快照数据5.05
38高频已实现偏度因子2023 年 2 月通联 Level-2 快照数据5.27
39高频已实现峰度因子2023 年 2 月通联 Level-2 快照数据4.93
40上下行波动率不对称性因子2023 年 2 月通联 Level-2 快照数据6.98
41中间价变化率偏度因子2023 年 2 月通联 Level-2 快照数据30.27
42中间价变化率最大值因子2023 年 2 月通联 Level-2 快照数据31.44
43大成交量已实现偏度因子2023 年 2 月通联 Level-2 快照数据7.41
44大成交量价量相关性因子2023 年 2 月通联 Level-2 快照数据7.35
45已实现双幂次变差因子2023 年 2 月通联 Level-2 快照数据5.85
46已实现三幂次变差因子2023 年 2 月通联 Level-2 快照数据6.16
47日度惊恐因子2023 年 2 月通联 Level-2 快照数据4.01
48成交量分桶熵因子2023 年 2 月通联 Level-2 快照数据5.68
49已实现跳跃波动率因子2023 年 2 月通联 Level-2 快照数据6.72
50交易量变异系数因子2023 年 2 月通联 Level-2 快照数据5.76
51上行已实现跳跃波动率因子2023 年 2 月通联 Level-2 快照数据6.34
52下行已实现跳跃波动率因子2023 年 2 月通联 Level-2 快照数据6.69
53聪明钱因子2023 年 2 月通联 Level-2 快照数据7.51
54成交量占比偏度因子2023 年 2 月通联 Level-2 快照数据5.24
55成交量占比峰度因子2023 年 2 月通联 Level-2 快照数据5.26
56日度主力交易情绪因子2023 年 2 月通联 Level-2 快照数据8.34
57趋势占比因子2023 年 2 月通联 Level-2 快照数据6.69
58上下行跳跃波动的不对称性因子2023 年 2 月通联 Level-2 快照数据6.80
59最大涨幅因子2023 年 2 月通联 Level-2 快照数据5.44
60大单资金净流入率因子2023 年 2 月通联 Level-2 快照数据8.35
61大单驱动涨幅因子2023 年 2 月通联 Level-2 快照数据7.84
62每单成交量筛选的局部反转因子2023 年 2 月通联 Level-2 快照数据8.63
63平均单笔流出金额占比因子2023 年 2 月通联 Level-2 快照数据8.03
64大的上行跳跃波动率因子2023 年 2 月通联 Level-2 快照数据8.03
65大的下行跳跃波动率因子2023 年 2 月通联 Level-2 快照数据8.22
66小的上行跳跃波动率因子2023 年 2 月通联 Level-2 快照数据8.13
67小的下行跳跃波动率因子2023 年 2 月通联 Level-2 快照数据7.83
68日内条件在险价值因子2023 年 2 月通联 Level-2 快照数据8.73
69隔夜收益率因子2023 年 2 月通联 Level-2 快照数据5.18
70日内最大回撤因子2023 年 2 月通联 Level-2 快照数据5.09
71日内成交量占比标准差因子2023 年 2 月通联 Level-2 快照数据5.26
72每笔成交量收益率相关性因子2023 年 2 月通联 Level-2 快照数据8.33
73日内收益率因子2023 年 2 月通联 Level-2 快照数据5.04
74分钟成交额方差因子2023 年 2 月通联 Level-2 快照数据5.39
75尾盘半小时收益率因子2023 年 2 月通联 Level-2 快照数据2.03
76日度盘口价差因子2023 年 2 月通联 Level-2 快照数据30.64
77尾盘半小时成交额占比因子2023 年 2 月通联 Level-2 快照数据2.04
78大的上下行跳跃波动不对称性因子2023 年 2 月通联 Level-2 快照数据9.44
79小的上下行跳跃波动不对称性因子2023 年 2 月通联 Level-2 快照数据10.33
80日度价格弹性因子2023 年 2 月通联 Level-2 快照数据7.31
81日度盘口平均深度因子2023 年 2 月通联 Level-2 快照数据29.77
82加权收盘价比因子2023 年 2 月通联 Level-2 快照数据6.32
83结构化反转因子2023 年 2 月通联 Level-2 快照数据6.98
84日度有效深度因子2023 年 2 月通联 Level-2 快照数据28.92
85分钟成交额自相关性因子2023 年 2 月通联 Level-2 快照数据5.60
86尾盘半小时成交量占比因子2023 年 2 月通联 Level-2 快照数据2.01
87加权偏度因子2023 年 2 月通联 Level-2 快照数据8.94
88交易量同步的知情交易概率因子2023 年 2 月通联 Level-2 快照数据8.52
89开盘后买入意愿强度因子2023 年 2 月通联 Level-2 逐笔委托11.80
90开盘后净委买增额占比因子2023 年 2 月通联 Level-2 逐笔委托3.56
91开盘后买入意愿占比因子2023 年 2 月通联 Level-2 逐笔委托5.69
92卖出反弹偏离因子2023 年 2 月通联 Level-2 逐笔成交87.86
93大单买入占比因子2023 年 2 月通联 Level-2 逐笔成交38.15
94买单集中度因子2023 年 2 月通联 Level-2 逐笔成交32.47
95卖单集中度因子2023 年 2 月通联 Level-2 逐笔成交31.79
96开盘后大单净买入占比因子2023 年 2 月通联 Level-2 逐笔成交14.73
97日内主买占比因子2023 年 2 月通联 Level-2 逐笔成交49.80
98大单买入强度因子2023 年 2 月通联 Level-2 逐笔成交38.02
99开盘后净主买占比因子2023 年 2 月通联 Level-2 逐笔成交17.61
100日内主买强度因子2023 年 2 月通联 Level-2 逐笔成交38.02
101开盘后净主买强度因子2023 年 2 月通联 Level-2 逐笔成交16.81
102卖单非流动性因子2023 年 2 月通联 Level-2 逐笔成交29.79
103买单非流动性因子2023 年 2 月通联 Level-2 逐笔成交29.64
104卖出反弹占比因子2023 年 2 月通联 Level-2 逐笔成交34.94
105剔除超大单后的普通大单买入占比因子2023 年 2 月通联 Level-2 逐笔成交35.77
106超大单买入占比因子2023 年 2 月通联 Level-2 逐笔成交29.00
107小买单主动成交度因子2023 年 2 月通联 Level-2 逐笔成交1,035.52
108剔除超大单影响后的大单涨跌幅因子2023 年 2 月通联 Level-2 逐笔成交25.44
109基于物理时间交易量加权的知情交易概率2023 年 2 月通联 Level-2 逐笔成交28.24
110超大单涨跌幅因子2023 年 2 月通联 Level-2 逐笔成交19.43
111买入浮亏占比因子2023 年 2 月通联 Level-2 逐笔成交33.64
112买入浮亏偏离因子2023 年 2 月通联 Level-2 逐笔成交20.28
113开盘后大单净买入强度因子2023 年 2 月通联 Level-2 逐笔成交14.06
114大成交量委托单成交量占比因子2023 年 2 月通联 Level-2 逐笔成交34.27
115大成交量成交单成交量占比因子2023 年 2 月通联 Level-2 逐笔成交31.57

6. 常见问题解答(FAQ)

6.1 窄表存储的因子如何按照因子名转变为宽表形式?

本因子库推荐以窄表的形式存储因子。若实际业务场景需要宽表计算,用户可以使用 pivot by 语句将因子窄表按照因子名转变为宽表形式,示例代码如下:

dailyFactor = loadTable("dfs://factor_day","factor_day")
factorTB1 = select 
                Value 
            from dailyFactor 
            where FactorName in `skewVolProp`netBuyIntenOpen 
            pivot by SecurityID, TradeDate, FactorName

6.2 如何把一个按照因子名展开的宽表处理成一个窄表?

若需要将宽表转化为窄表,可以使用 unpivot 函数:

factorTB2 = 
  select
    SecurityID, TradeDate, value as Value, valueType as FactorName 
  from factorTB1.unpivot(`SecurityID`TradeDate, `skewVolProp`netBuyIntenOpen)

6.3 如何将每个因子单独存储在独立的数据表中?

若用户需要将每个因子单独存储于同一个数据库下的不同表中,以成交量占比偏度因子为例,可将建库建表代码和任务函数调整为:

//删除已有数据库
if(existsDatabase("dfs://factor_day")) dropDatabase("dfs://factor_day")

//建立日频因子数据库
create database "dfs://factor_day" 
partitioned by RANGE(date(datetimeAdd(1980.01M,0..80*12,'M'))),
engine='TSDB',
atomic='CHUNK'

//任务函数
def factorjob(conf){
    dataTB = loadTable(conf[`dataDB], conf[`dataTB])
    days = conf[`startDay]..conf[`endDay]
    startTime = 09:27:00.000
    endTime = 14:57:00.000
    //提取计算所需数据,sqlDS生成元代码
    ds = sqlDS(<select SecurityID, TradeDate, TradeTime, TotalVolumeTrade
        from dataTB 
        where TradeDate in days and (TradeTime between startTime and endTime) and (SecurityID like "00%" or SecurityID like "30%" or SecurityID like "6%")>)
    //计算因子,mr函数将因子在不同节点并行计算,unionAll函数将不同节点的计算结果汇总
    res = mr(ds, conf[`func]).unionAll()
    //创建因子表
    db = database(conf[`factorDB])
    tbName = conf[`factorName]
    if(existsTable(conf[`factorDB], tbName)){dropTable(db, tbName)}

    colNames = `SecurityID`TradeDate`Value`FactorName`UpdateTime
    colTypes = [SYMBOL, DATE, DOUBLE, SYMBOL, TIMESTAMP]
    t = table(1000:0, colNames, colTypes)
    pt = createPartitionedTable(dbHandle=db, 
                                table=t, 
                                tableName=tbName, 
                                partitionColumns=`TradeDate, 
                                sortColumns=`SecurityID`TradeDate,keepDuplicates=ALL, 
                                sortKeyMappingFunction=[hashBucket{, 500}])
    //写入因子库,存储到磁盘做持久化
    loadTable(conf[`factorDB], conf[`factorName]).append!(select * from res)
}

请注意,这种存储因子的方式会导致一个数据库下有大量数据表,而每个表内仅有少量数据,不利于因子的查询与管理。因此,不建议采用此种存储方式。

6.4 如何处理用户数据字段名与因子计算字段名不一致的问题?

如果用户在计算因子时使用的数据集字段名与本教程中所列字段名不同,则需要调整任务函数中构造分布式数据源的 SQL 代码以成交量占比偏度因子为例,示例如下:

def factorjob(conf){
    dataTB = loadTable(conf[`dataDB], conf[`dataTB])
    days = conf[`startDay]..conf[`endDay]
    startTime = 09:27:00.000
    endTime = 14:57:00.000
    //提取计算所需数据,sqlDS生成元代码
    //此处修改字段名
    ds = sqlDS(<select ticker as SecurityID, 
                      date(tradeTime) as TradeDate, 
                      time(tradeTime) as TradeTime, 
                      cumVolume as TotalVolumeTrade
        from dataTB 
        where date(tradeTime) in days and (time(tradeTime) between startTime and endTime) and (ticker like "00%" or ticker like "30%" or ticker like "6%")>)
    //计算因子,mr函数将因子在不同节点并行计算,unionAll函数将不同节点的计算结果汇总
    res = mr(ds, conf[`func]).unionAll()
    //写入因子库,存储到磁盘做持久化
    loadTable(conf[`factorDB], conf[`factorTB]).append!(select * from res)
}

注:如果计算的因子属于 4.2.1 小节中列出的需要额外数据集的因子,请在计算函数中修改额外数据集中的字段。

6.5 如何对计算得到的因子进行相关性分析?

DolphinDB 内置了多种相关性分析函数,如corr计算 Pearson 相关系数、spearmanr计算 Spearman 相关系数等。本小节提供了一个因子相关性分析的示例,具体代码如下:

// 计算相关性函数
def factorCorr(factor1, factor2, method){
    con = ej(factor1, factor2, `SecurityID`TradeDate)
    if(method == `pearson){
        return corr(con[`Value], con[`factor2_Value])
    }
    if(method == `spearman){
        return spearmanr(con[`Value], con[`factor2_Value])
    }
    if(method == `kendall){
      return kendall(con[`Value], con[`factor2_Value])
    }
}

//相关性分析
factorTB = loadTable("dfs://factor_day", `factor_day)
factor1 = select * from factorTB where FactorName = `skewVolProp
factor2 = select * from factorTB where FactorName = `netBuyIntenOpen
result = factorCorr(factor1, factor2, `pearson)

该相关性计算函数可以计算两个因子之间的 Pearson 相关系数、Spearman 相关系数和 Kendall 相关系数传入参数为两张因子表和需要计算的相关系数类型,输出为 DOUBLE 类型的相关系数。

7. 因子与计算代码汇总

7.1 因子库代码

本因子库中所有因子脚本均整理在以下压缩包中,用户可根据自有数据库表进行修改使用。详细脚本请添加小助手获取。

7.2 因子库因子列表

7.2.1 基于分钟线的因子

因子名因子计算逻辑和含义参考文献
1最短路径非流动性因子股价变动最短路径:2*(high-low)-abs(close-open) 最短路径非流动性因子:股价变动最短路径与成交额的比值之和基于K线路径构造的非流动性因子,光大证券
2一致买入交易因子集体一致交易:分钟数据满足 abs(close-open)≤α*abs(high-low) 的 K 线,其中 α 为给定常数一致买入交易因子:在满足集体一致交易条件的 K 线中,上涨 K 线的总成交量与当日总成交量的比值一致交易因子:挖掘集体行为背后的收益,光大证券
3绝对收益与调整后滞后成交量相关性因子调整后成交额:(amount-μ)/σ,其中 μ, σ 分别为前 20 个交易日相同时刻成交额的均值和标准差绝对收益:对数收益率的绝对值绝对收益与调整后滞后成交量相关性:绝对收益与前一时刻调整后成交额的相关系数量价关系的高频乐章,方正证券
4成交量“潮汐”的价格变动速率因子领域成交量:日内第 n 分钟及其前后 4 分钟的总成交量顶峰时刻:领域成交量最大值所在时刻涨潮时刻:顶峰时刻前领域成交量最低点所在时刻 m退潮时刻:顶峰时刻后领域成交量最低点所在时刻 n潮汐价格变动速率:涨潮时刻较退潮时刻的收盘价变动速率除以 n-m个股成交量的潮汐变化及“潮汐”因子构建,方正证券
5跌幅时间重心偏离因子涨(跌)幅时间重心:上涨(下跌)时间依价格变动幅度的加权平均数跌幅时间重心偏离:在截面跌时间重心对涨时间重心进行回归,得到的残差均值日内分钟收益率的时序特征:逻辑讨论与因子增强,开源证券
6一致交易因子集体一致交易:满足 abs(close-open)≤α*abs(high-low) 的 K 线,其中 α 为给定常数一致交易:一致交易 K 线的总成交量与当日总成交量的比值一致交易因子:挖掘集体行为背后的收益,光大证券
7成交额占比熵因子每分钟成交额占当日总成交额的比值的熵高位成交因子一从量价匹配说起,长江证券
8日内持续异常交易量因子异常交易量:当前分钟交易量与过去一段时间分钟交易量均值的比值(本因子库中为过去 10 个交易时刻)日内持续异常交易量:mean(rankATV)/std(rankATV)+kurt(rankATV),其中 rankATV 为股票在全市场横截面上异常交易量的排名百分位“持续异常交易量”选股因子PATV, 招商证券
9日耀眼波动率因子成交量激增时刻:成交量增长量大于当日差值序列均值 +1 倍标准差的时刻耀眼波动率:成交量激增时刻及其随后四分钟区间内的 1 分钟收益率标准差日耀眼波动率:交易日内所有耀眼波动率的均值成交量激增时刻蕴含的 alpha值息,方正证券
10日午蔽古木因子对每天第 6 分钟到第 240 分钟的增量成交量数据进行带截距项的最小二乘回归:其中,volDiff 为 1 分钟增量成交量。若回归方程的 F 值小于其横截面均值,午蔽古木因子为截距项 t 值的绝对值的负值,反之为截距项 t 值的绝对值。推动个股价格变化的因素分解与“花隐林间”因子,方正证券
11单一成交额占比熵因子单一成交额占比熵计算公式为:其中,voli 和 closei 分别为每分钟成交量和每分钟收盘价,VOL 和 CLOSE 分别为整个时间段总成交量和收盘价之和。高位成交因子一从量价匹配说起,长江证券
12日度灾后重建因子更优波动率:对当前时刻及其前四分钟的高开低收的标准差与均值之比的平方收益波动比:收益率与更优波动率之比日度灾后重建因子:收益波动比与更优波动率的协方差个股波动率的变动及“勇攀高峰”因子构建,方正证券
13滞后绝对收益与调整后成交量相关性因子调整后成交额:(amount-μ)/σ,其中 μ, σ 分别为前 20 个交易日相同时刻成交额的均值和标准差绝对收益:对数收益率的绝对值滞后绝对收益与调整后成交量相关性:前一时刻绝对收益与调整后成交额的相关系数量价关系的高频乐章,方正证券
14日耀眼收益率因子成交量激增时刻:成交量增长量大于当日差值序列均值 +1 倍标准差的时刻耀眼收益率:成交量激增时刻的分钟收益率日耀眼收益率:交易日内所有耀眼收益率的均值成交量激增时刻蕴含的 alpha值息,方正证券
15日度勇攀高峰因子更优波动比:对当前时刻及其前四分钟的高开低收的标准差与均值之比的平方收益波动比:收益率与更优波动率之比波动率异常高时刻:更优波动率大于其日内均值+1 倍标准差的时刻日度勇攀高峰因子:当日波动率异常高时刻的收益波动比序列和更优波动率序列的协方差个股波动率的变动及“勇攀高峰”因子构建,方正证券
16绝对收益与成交量相关性因子对数收益率:当前价格与前一时刻价格之比的对数绝对收益与成交量相关性:对数收益率的绝对值与成交额的相关系数量价关系的高频乐章,方正证券
17绝对收益与滞后成交量相关性因子绝对收益与滞后成交量相关性:对数收益率的绝对值与前一时刻成交额的相关系数量价关系的高频乐章,方正证券
18滞后绝对收益与成交量相关性因子前一时刻对数收益率的绝对值与成交额的相关系数量价关系的高频乐章,方正证券
19日朝没晨雾因子对每天第 6 分钟到第 240 分钟的增量成交量数据进行带截距项的最小二乘回归:其中,volDiff 为 1 分钟增量成交量。日朝没晨雾因子:五阶增量成交量回归系数的 t 值的标准差推动个股价格变化的因素分解与“花隐林间”因子,方正证券
20T 分布主动占比因子T 分布主动买入金额:amount*t(ret/σ, df),其中 σ 为收益率标准差,df 为自由度T 分布主动占比因子:T 分布主动买入金额除以当日总成交额分布估计下的主动成交占比,长江证券
21置信正态分布主动占比因子置信正态分布主动买入金额:amountN(ret/0.11.96),即每分钟成交额与对应分钟的标准正态分布累积函数的乘积置信正态分布主动占比因子:置信正态分布主动买入金额除以当日总成交额分布估计下的主动成交占比,长江证券
22朴素主动占比因子朴素主动买入金额:amount*t(Δclose/σ, df),其中 σ 为收盘价增长量标准差,df 为自由度朴素主动占比因子:主动买入金额除以当日总成交额分布估计下的主动成交占比,长江证券
23均匀分布主动占比因子均匀分布主动买入金额:amount*(ret-0.1)/0.2,其中 amount 为每分钟成交额,ret 为对应分钟收益率均匀分布主动占比因子:均匀分布主动买入金额除以当日总成交额分布估计下的主动成交占比,长江证券
24成交量波峰计数因子成交量波峰:成交量大于当日成交量均值 + 1 倍标准差的时刻成交量波峰计数因子:统计每条记录与上一条记录时间差超过 1 分钟的记录条数高频波动中的时间序列信息,长江证券
25日模糊金额比因子波动率:当前时刻及之前 4 分钟内收益率的标准差模糊性:当前时刻及之前 4 分钟内波动率的标准差起雾时刻:模糊性大于当日模糊性均值的时刻雾中金额:起雾时刻的成交金额均值日模糊金额比:雾中金额除以当日成交金额均值波动率的波动率与投资者模糊性厌恶,方正证券
26日模糊数量比因子波动率:当前时刻及之前 4 分钟内收益率的标准差模糊性:当前时刻及之前 4 分钟内波动率的标准差起雾时刻:模糊性大于当日模糊性均值的时刻雾中数量:起雾时刻的成交量均值日模糊数量比:雾中数量除以当日成交量均值波动率的波动率与投资者模糊性厌恶,方正证券
27P 型成交量分布同价成交量:将日内分钟收盘价相同的成交量累加在一起,得到成交量随价格的分布成交量支撑点和成交量支撑区域:成交量累计最大的价格及其附近区域(区域累积成交量达全天成交量 50% 的最小区域)P 型成交量分布:成交量支撑区域下限价格与当日最高价之差成交量分布中的 Alpha,兴业证券
28B 型成交量分布同价成交量:将日内分钟收盘价相同的成交量累加在一起,得到成交量随价格的分布成交量支撑点和成交量支撑区域:成交量累计最大的价格及其附近区域(区域累积成交量达全天成交量 50% 的最小区域)B 型成交量分布:成交量支撑区域上限价格与当日最低价之差成交量分布中的 Alpha,兴业证券
29修正日模糊价差因子日模糊价差:日模糊金额比-日模糊数量比修正日模糊价差:将横截面上值为负的日模糊价差求和,记为 s1;将负的日模糊价差除以其过去 10 日日模糊价差的标准差,值为正的日模糊价差不变调整数量级:将横截面上值为负的修正日模糊价差求和,记为 s2;将值为负的修正日模糊价差除以 s2 后乘以 s1波动率的波动率与投资者模糊性厌恶,方正证券 Ambiguity about velatlity and investor behaviot, Journal of Financial Economics
30成交量支撑区域下限与收盘价差异因子同价成交量:将日内分钟收盘价相同的成交量累加在一起,得到成交量随价格的分布成交量支撑点和成交量支撑区域:成交量累计最大的价格及其附近区域(区域累积成交量达全天成交量 50% 的最小区域)成交量支撑区域下限与收盘价差异:成交量支撑区域最低价与当日收盘价的差成交量分布中的 Alpha,兴业证券
31模糊关联度因子波动率:当前时刻及之前 4 分钟内收益率的标准差模糊性:当前时刻及之前 4 分钟内波动率的标准差模糊关联度:模糊性序列和时刻成交额序列的相关系数波动率的波动率与投资者模糊性厌恶,方正证券

7.2.2 基于Level-2行情快照的因子

因子名因子计算逻辑和含义参考文献
1时间加权平均的股票相对价格位置因子股票当期价格相对区间最高最低价的分位数:时间加权平均的股票相对价格位置:基于时间尺度度量的日内买卖压力,东方证券
2高频上行波动占比因子收益率:price / 上一时刻 price - 1上行收益率:收益率大于0高频上行波动占比:上行收益率的平方和与收益率平方和之比高频因子之已实现波动分解,海通证券
3高频下行波动占比因子收益率:price / 上一时刻 price - 1下行收益率:收益率小于0高频下行波动占比:下行收益率的平方和与收益率平方和之比高频因子之已实现波动分解,海通证券
4已实现波动率因子对数收益率序列:收益率的对数已实现波动率:对数收益率序列平方和的平方根The distribution of exchange rate volatlity. Jounal of the Amencan Statistical Association 96,42-55
5上行已实现波动率因子对数收益率序列:收益率的对数上行已实现波动率:大于 0 的收益率的平方和的平方根Measuting downside risk realised semivariance, In Volatlity and Time Series Econometncs Essays in Honor of Robert F Engle Edited by T Boliersiev.J Russell and M. Watson), Oxford University Press,117-136.
6下行已实现波动率因子对数收益率序列:收益率的对数下行已实现波动率:小于 0 的收益率的平方和的平方根Measuting downside risk realised semivariance, In Volatlity and Time Series Econometncs Essays in Honor of Robert F Engle Edited by T Boliersiev.J Russell and M. Watson), Oxford University Press,117-136.
7高频已实现偏度因子收益率:price / 上一时刻 price - 1高频已实现偏度:收益率的偏度高频因子之股票收益分布特征,海通证券
8高频已实现峰度因子收益率:price / 上一时刻 price - 1高频已实现峰度:收益率的峰度高频因子之股票收益分布特征,海通证券
9上下行波动率不对称性因子已实现波动率:对数收益率序列平方和上行已实现波动率:大于 0 的收益率的平方和下行已实现波动率:小于 0 的收益率的平方和上下行波动率不对称性:上行已实现波动率与下行已实现波动率之差除以已实现波动率Measuting downside risk realised semivariance, In Volatlity and Time Series Econometncs Essays in Honor of Robert F Engle Edited by T Boliersiev.J Russell and M. Watson), Oxford University Press,117-136.
10中间价变化率偏度因子市场中间价:买一价与卖一价的均值中间价变化率:(当前时刻中间价/前一时刻中间价)-1中间价变化率偏度:中间价变化率的偏度高频订单失衡及价差因子,中信建投证券
11中间价变化率最大值因子市场中间价:买一价与卖一价的均值中间价变化率:(当前时刻中间价/前一时刻中间价)-1中间价变化率最大值:中间价变化率的最大值高频订单失衡及价差因子,中信建投证券
12大成交量已实现偏度因子大成交量:分钟成交量在当日排名前 1/3 的成交量大成交量已实现偏度:大成交量订单收益率的偏度高频价量数据的因子化方法,广发证券
13大成交量价量相关性因子大成交量:分钟成交量在当日排名前 1/3 的成交量大成交量价量相关性:大成交量订单成交量和价格的相关系数高频价量数据的因子化方法,广发证券
14已实现双幂次变差因子已实现双幂次变差:日内对数收益率的绝对值与前一时刻对数收益率的绝对值的乘积之和Power and bipower variation with stochastic volatility and jumps. Journal of Financial Econometrics.2.1-48
15已实现三幂次变差因子已实现三幂次变差:首先计算每一时刻与 t-1 时刻、t-2 时刻对数收益率绝对值的乘积的 2/3 次方,其次计算日内所有该值之和Power and bipower variation with stochastic volatility and jumps. Journal of Financial Econometrics.2.1-48
16日度惊恐度因子偏离度:个股收益率与市场收益率的差的绝对值(选取中证全指 000985 代表市场水平)基准项:个股收益率的绝对值+市场收益率的绝对值+0.1日度惊恐度:偏离度与基准项之比显著效应、极端收益扭曲决策权重和“草木皆兵”因子,2022.方正证券Cosemans M, Frehen R.2021, Salience theory and stock prices: Empirical evidence, Journal of Financial Economics.140(2),480-483
17成交量分桶熵因子将日内分钟成交量基于最大值、最小值区间进行等距分桶,并统计各个区间的概率;分桶信息熵:每个区间计算pk*ln(pk) 的值并求和,然后乘以-1成交量分布中的Alpha,兴业证券
18已实现跳跃波动率因子已实现三幂次变差:首先计算每一时刻与 t-1 时刻、t-2 时刻对数收益率绝对值的乘积的 2/3 次方,其次计算日内所有该值之和积分波动估计量:已实现三幂次变差乘以常数 1.935792405 (正态分布的 2/3 阶绝对矩)已实现跳跃波动率:max(对数收益率的平方和与积分波动估计量之差,0)Power and bipower variation with stochastic volatility and jumps. Journal of Financial Econometrics.2.1-48.New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
19交易量变异系数因子日内成交额序列的标准差除以均值再觅知情交易者的踪迹,招商证券
20上行已实现跳跃波动率因子已实现三幂次变差:首先计算每一时刻与 t-1 时刻、t-2 时刻对数收益率绝对值的乘积的 2/3 次方,其次计算日内所有该值之和积分波动估计量:已实现三幂次变差乘以常数 1.935792405 (正态分布的 2/3 阶绝对矩)上行已实现跳跃波动率:max(收益率大于 0 的对数收益率的平方和与积分波动估计量的一半之差,0)New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
21下行已实现跳跃波动率因子已实现三幂次变差:首先计算每一时刻与 t-1 时刻、t-2 时刻对数收益率绝对值的乘积的 2/3 次方,其次计算日内所有该值之和积分波动估计量:已实现三幂次变差乘以常数 1.935792405 (正态分布的 2/3 阶绝对矩)下行已实现跳跃波动率:max(收益率小于 0 的对数收益率的平方和与积分波动估计量的一半之差,0)New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
22聪明钱因子原始聪明钱因子:每分钟涨跌幅绝对值与成交量的四次方根之比聪明钱交易:将原始聪明钱因子按从大到小排序后,成交量累计占比 20% 的分钟交易成交量加权平均价:将价格按照成交量大小进行加权平均聪明钱因子:聪明钱交易的成交量加权平均价除以所有交易的成交量加权平均价聪明钱因子模型的2.0版本, 开源证券
23成交量占比偏度因子日内成交量占比序列的偏度高频因子(四). 高阶矩高频因子, 长江证券
24成交量占比峰度因子日内成交量占比序列的峰度高频因子(四). 高阶矩高频因子, 长江证券
25日度主力交易情绪因子日内单笔成交金额序列和收盘价序列的秩相关性高频因子:分钟单笔金额序列中的主力行为刻画,开源证券
26趋势占比因子当日收盘价减开盘价,除以每一时刻价格变化量绝对值之和高频价量数据的因子化方法,广发证券
27上下行跳跃波动的不对称性因子已实现三幂次变差:首先计算每一时刻与 t-1 时刻、t-2 时刻对数收益率绝对值的乘积的 2/3 次方,其次计算日内所有该值之和积分波动估计量:已实现三幂次变差乘以常数 1.935792405 (正态分布的 2/3 阶绝对矩)上行(下行)已实现跳跃波动率:max(收益率大于(小于) 0 的对数收益率的平方和与积分波动估计量的一半之差,0)上下行跳跃波动的不对称性:上行已实现跳跃波动率与下行已实现跳跃波动率之差New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
28最大涨幅因子日内涨跌幅最大的前 10% 时刻的涨跌幅加 1 后连乘高频选股因子分类体系,中信建投证券
29大单资金净流入率因子平均单笔成交金额:每分钟成交金额总额除以成交笔数大单筛选:平均单笔成交金额最大的 30% 的时刻大单资金净流入金额:收益率为正的成交总额与收益率为负的成交总额之差大单资金净流入率:大单资金净流入金额除以当日成交总额日内分时成交中的玄机,海通证券
30大单驱动涨幅因子平均单笔成交金额:每分钟成交金额总额除以成交笔数大单筛选:平均单笔成交金额最大的 30% 的时刻大单驱动涨幅:大单收益率加 1 后连乘日内分时成交中的玄机,海通证券
31每笔成交量筛选的局部反转因子每笔成交量(成交量/成交笔数)位于 80%~100% 区间对应时间段的收益率之和量价关系中的反转微观结果,长江证券
32平均单笔流出金额占比因子收益率小于 0 的平均单笔成交金额除以总体平均单笔成交金额日内分时成交中的玄机,海通证券
33大的上行跳跃波动率因子上行已实现跳跃波动率:max(收益率大于 0 的对数收益率的平方和与积分波动估计量的一半之差,0)判别阈值:其中,α 经验参数为 4,Δ 为日内股票收益率的采样间隔,IV 为积分波动估计量大的上行跳跃波动率: min(上行已实现跳跃波动率,高于判别阈值的对数收益率的平方和)Empincal evidence on the importance of aggregaton, asymmetry and jumps for volatlty ored cnon jourral af Econometrics.187 606-621New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
34大的下行跳跃波动率因子下行已实现跳跃波动率:max(收益率小于 0 的对数收益率的平方和与积分波动估计量的一半之差,0)判别阈值:其中,α 经验参数为 4,Δ 为日内股票收益率的采样间隔,IV 为积分波动估计量大的下行跳跃波动率: min(下行已实现跳跃波动率,小于判别阈值相反数的对数收益率的平方和)Empincal evidence on the importance of aggregaton, asymmetry and jumps for volatlty ored cnon jourral af Econometrics.187 606-621New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
35小的上行跳跃波动率因子上行已实现跳跃波动率:max(收益率大于 0 的对数收益率的平方和与积分波动估计量的一半之差,0)判别阈值:其中,α 经验参数为 4,Δ 为日内股票收益率的采样间隔,IV 为积分波动估计量大的上行跳跃波动率: min(上行已实现跳跃波动率,高于判别阈值的对数收益率的平方和)小的上行跳跃波动率: 上行已实现跳跃波动率与大的上行已实现跳跃波动率之差Empincal evidence on the importance of aggregaton, asymmetry and jumps for volatlty ored cnon jourral af Econometrics.187 606-621New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
36小的下行跳跃波动率因子下行已实现跳跃波动率:max(收益率小于 0 的对数收益率的平方和与积分波动估计量的一半之差,0)判别阈值:其中,α 经验参数为 4,Δ 为日内股票收益率的采样间隔,IV 为积分波动估计量大的下行跳跃波动率: min(下行已实现跳跃波动率,小于判别阈值相反数的对数收益率的平方和)小的下行跳跃波动率: 下行已实现跳跃波动率与大的下行已实现跳跃波动率之差Empincal evidence on the importance of aggregaton, asymmetry and jumps for volatlty ored cnon jourral af Econometrics.187 606-621New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
37日内条件在险价值因子分钟 VWAR:分钟收益率序列依交易量的加权平均数VaR (在险价值):CVaR:VCVaR:交易日分钟 VWAR 的置信度为 α 的 CVaR分钟线的尾部特征,方正证券
38隔夜收益率因子当日开盘价与前一日收盘价之比减 1Overnight Return: the invisible Hand Behind intraday Returns, Journal of Financial Econometrics. 2.90-100
39日内最大回撤因子交易日内价格峰值到随后谷值的最大跌幅高频价量数据的因子化方法,广发证券
40日内成交量占比标准差因子日内时刻成交量占比的标准差高阶矩高频因子, 长江证券
41每笔成交量收益率相关性因子分钟平均每笔成交量与收益率的相关系数量价关系中的反转微观结果,长江证券
42日内收益率因子当日收盘价与当日开盘价之比减 1Overnight Return: the invisible Hand Behind intraday Returns, Journal of Financial Econometrics. 2.90-100
43分钟成交额方差因子日内分钟成交额的方差高频视角下成交额蕴藏的Alpha,华安证券
44尾盘半小时收益率因子14:30~15:00 的收盘价收益率高频价量数据的因子化方法,广发证券
45日度盘口价差因子盘口价差:2*(a1-b1)/(a1+b1),其中 a1 和 b1 分别为盘口卖一价和买一价日度盘口价差:盘口价差序列的均值高频视角下的微观流动性与波动性,中金公司
46尾盘半小时成交额占比因子14:30~15:00 的成交额占当日总成交额比值高频视角下成交额蕴藏的Alpha,华安证券
47大的上下行跳跃波动不对称性因子上行(下行)已实现跳跃波动率:max(收益率大于(小于) 0 的对数收益率的平方和与积分波动估计量的一半之差,0)判别阈值:其中,α 经验参数为 4,Δ 为日内股票收益率的采样间隔,IV 为积分波动估计量大的上行跳跃波动率: min(上行已实现跳跃波动率,高于判别阈值的对数收益率的平方和)大的下行跳跃波动率: min(下行已实现跳跃波动率,小于判别阈值相反数的对数收益率的平方和)大的上下行跳跃波动不对称性:大的上行跳跃波动率与大的下行跳跃波动率之差Empincal evidence on the importance of aggregaton, asymmetry and jumps for volatlty prediction, journal of Econometrics.187 606-621New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
48小的上下行跳跃波动不对称性因子上行(下行)已实现跳跃波动率:max(收益率大于(小于) 0 的对数收益率的平方和与积分波动估计量的一半之差,0)判别阈值:其中,α 经验参数为 4,Δ 为日内股票收益率的采样间隔,IV 为积分波动估计量大的上行跳跃波动率: min(上行已实现跳跃波动率,高于判别阈值的对数收益率的平方和)大的下行跳跃波动率: min(下行已实现跳跃波动率,小于判别阈值相反数的对数收益率的平方和)小的上行(下行)跳跃波动率: 上行(下行)已实现跳跃波动率与大的上行(下行)已实现跳跃波动率之差小的上下行跳跃波动不对称性:小的上行跳跃波动率与小的下行跳跃波动率之差Empincal evidence on the importance of aggregaton, asymmetry and jumps for volatlty prediction, journal of Econometrics.187 606-621New Evidence of the Marginal Predictve Content of Small and Large Jumps in the Cross-Section, Econometrics, MDPI, 8(2), 1-52.
49日度价格弹性因子价格弹性:最高价与最低价之差与成交额的比值日度价格弹性:价格弹性序列的均值高频视角下的微观流动性与波动性,中金公司
50日度盘口平均深度因子盘口平均深度:买卖一量均值日度盘口平均深度:盘口平均深度序列的均值高频视角下的微观流动性与波动性,中金公司
51加权收盘价比因子其中,VOL 为整个时间段总成交量高位成交因子一从量价匹配说起,长江证券
52结构化反转因子动量时间段和反转时间段:将成交量从小到大进行排序,将小于等于10%的时间段记为动量时间段,大于10%的时间段记为反转时间段动量时间段反转因子:反转时间段反转因子:结构化反转因子:反转时间段反转因子与动量时间段动量因子之差结构化反转因子,长江证券
53日度有效深度因子有效深度:买卖一量的最小值日度有效深度:有效深度序列的均值高频视角下的微观流动性与波动性,中金公司
54分钟成交额自相关性因子分钟成交额与其前1分钟的分钟成交额的相关系数高频视角下成交额蕴藏的Alpha,华安证券
55尾盘半小时成交量占比因子14:30~15:00 的成交量占当日总成交量比值高频因子的现实与幻想,海通证券
56加权偏度因子其中,权重 ω 为成交量占当日总成交量的比值,分母为收盘价的标准差的三次方高位成交因子一从量价匹配说起,长江证券
57交易量同步的知情交易概率因子交易量桶:将交易量等量划分为交易量桶(此处设置单桶交易量为 100,000)桶内买方交易量:桶内逐笔交易的加权和,权重为标准正态分布累计密度函数,其参数为环比增量与其标准差之比向量桶内卖方交易量:桶量与买方交易量估计值之差交易量同步的知情交易概率:买卖方交易量的绝对差之和,除以总交易量Flow toxicity and liquidity in a high frequency world, Review of Financial Studies, 25(5),457-1493.

7.2.3 基于逐笔委托的因子

因子名因子计算逻辑和含义参考文献
1开盘后买入意愿强度因子净委买变化额:委托买单增加量减去委托卖单增加量(逐笔委托)净主买成交额:主动买入成交额减去主动卖出成交额买入意愿:净主买成交额与净委买变化额之和开盘后买入意愿强度:开盘后时间段(9:30~10:00)内买入意愿序列的均值除以标准差基于直观逻辑和机器学习的高频数据低频化应用,海通证券
2开盘后净委买增额占比因子净委买变化额:委托买单增加量减去委托卖单增加量开盘后净委买增额占比:开盘后时间段(9:30~10:00)内净委买变化额的总量除以同时间段内总成交额捕捉投资者的交易意愿,海通证券高频因子的现实与幻想,海通证券
3开盘后买入意愿占比因子净委买变化额:委托买单增加量减去委托卖单增加量(逐笔委托)净主买成交额:主动买入成交额减去主动卖出成交额买入意愿:净主买成交额与净委买变化额之和开盘后买入意愿强度:开盘后时间段(9:30~10:00)内买入意愿的总和除以同时间段内总成交额基于直观逻辑和机器学习的高频数据低频化应用,海通证券

7.2.4 基于逐笔成交的因子

因子名因子计算逻辑和含义参考文献
1卖出反弹偏离因子(低于当日收盘价的卖单平均成交价之和 / 当日收盘价)-1基于逐笔成交数据的遗憾规避因子,国金证券
2大单买入占比因子大单筛选:成交量对数调整后,成交量大于均值+1 倍标准差的成交单大单买入占比:大买单成交总额除以总成交额大单的精细化处理与大单因子重构,海通证券买卖单数据中的Alpha,海通证券
3买单集中度因子买单成交额的平方和与总成交额的平方之比买卖单数据中的Alpha,海通证券
4卖单集中度因子卖单成交额的平方和与总成交额的平方之比买卖单数据中的Alpha,海通证券
5开盘后大单净买入占比因子大单筛选:成交量对数调整后,成交量大于均值+1 倍标准差的成交单开盘后大单净买入占比:开盘后(9:30~10:00)大买单成交额与大卖单成交额之差 / 总成交额买卖单数据中的Alpha,海通证券大单的精细化处理与大单因子重构,海通证券
6日内主买占比因子主动买入成交额:剔除处于涨跌停分钟上的主动买入卖出金额数据,逐笔成交数据中的标识为“Buy”的成交额日内主买占比:主动买入成交额占当日总成交额之比基于主动买入行为的选股因子,海通证券
7大单买入强度因子大单筛选:成交量对数调整后,成交量大于均值+1 倍标准差的成交单大单买入强度:大买单成交额的日内均值 / 大买单成交额的日内标准差大单的精细化处理与大单因子重构,海通证券
8开盘后净主买占比因子净主买成交额:剔除处于涨跌停分钟上的主动买入金额数据,主动买入成交额与主动卖出成交额之差开盘后净买入占比:开盘后(9:30~10:00)净主买成交额占总成交金额之比基于主动买入行为的选股因子,海通证券高频因子的现实与幻想,海通证券
9日内主买强度因子主动买入成交额:剔除处于涨跌停分钟上的主动买入卖出金额数据,逐笔成交数据中的标识为“Buy”的成交额日内主买强度:主动买入成交额的均值与标准差之比基于主动买入行为的选股因子,海通证券
10开盘后净主买强度因子净主买成交额:剔除处于涨跌停分钟上的主动买入金额数据,主动买入成交额与主动卖出成交额之差开盘后净主买强度:开盘后(9:30~10:00)净主买成交额的均值与标准差之比基于主动买入行为的选股因子,海通证券高频因子的现实与幻想,海通证券
11卖单非流动性因子以收益率为因变量,主动卖出成交额和主动买入成交额为自变量进行线性回归,其中主动卖出成交额的回归系数Sell-order liquidity and the cross section of expected stock retutns, Journat of Financial Economeics 105(3) 523-541 技术类新 Alpha 因子的批量测试, 东方证券
12买单非流动性因子以收益率为因变量,主动卖出成交额和主动买入成交额为自变量进行线性回归,其中主动买入成交额的回归系数Sell-order liquidity and the cross section of expected stock retutns, Journat of Financial Economeics 105(3) 523-541 技术类新 Alpha 因子的批量测试, 东方证券
13卖出反弹占比因子卖价小于收盘价的所有卖单的成交量之和与总成交量的比值基于逐笔成交数据的遗憾规避因子,国金证券
14剔除超大单后的普通大单买入占比因子大单筛选:成交金额的分位数大于 70% 的订单超大单筛选:订单成交金额占当日成交总额比例超过 1% 的订单剔除超大单后的普通大单买入占比:剔除超大单后的大买单成交金额占全部大单成交金额的比例超大单冲击对大单因子的影响,东方证券
15超大单买入占比因子超大单筛选:订单成交金额占当日成交总额比例超过 1% 的订单超大单买入占比:超大单买入成交金额占全部超大单成交金额的比例超大单冲击对大单因子的影响,东方证券
16小买单主动成交度因子小单筛选:成交量对数调整后,成交量小于均值的成交单小买单主动成交度:小买单主动成交金额占小买单成交金额的比例买卖单主动成交中的隐藏信息,海通证券
17剔除超大单影响后的大单涨跌幅因子大单筛选:成交金额的分位数大于 70% 的订单超大单筛选:订单成交金额占当日成交总额比例超过 1% 的订单对数价格变动:当前成交价格的对数与上一笔成交价格的对数之差剔除超大单影响后的大单涨跌幅:剔除超大单后,大单主动成交订单的累计对数价格变动超大单冲击对大单因子的影响,东方证券
18基于物理时间交易量加权的知情交易概率因子其中,Si 和 Bi 分别第 i 个交易时段内的卖单数和买单数知情交易概率与风险定价——基于不同PIN测度方法的比较研究,管理科学学报. 23(1). 33-46
19超大单涨跌幅因子超大单筛选:订单成交金额占当日成交总额比例超过 1% 的订单对数价格变动:当前成交价格的对数与上一笔成交价格的对数之差超大单涨跌幅:超大单主动成交订单的累计对数价格变动超大单冲击对大单因子的影响,东方证券
20买入浮亏占比因子买单成交价大于当日收盘价的的买单成交量之和,除以当日总成交量基于逐笔成交数据的遗憾规避因子,国金证券
21买入浮亏偏离因子买单成交价大于当日收盘价的的买单平均成交价之和,除以收盘价,减去1基于逐笔成交数据的遗憾规避因子,国金证券
22开盘后大单净买入强度因子大单筛选:成交量对数调整后,成交量大于均值+1 倍标准差的成交单开盘后大单净买入强度:开盘后(9:30~10:00)大买单成交额与大卖单成交额之差的日内均值除以其标准差大单的精细化处理与大单因子重构,海通证券
23大成交量委托单成交量占比因子大成交量委托单筛选:按照委托单号统计成交量,成交量排前 5% 的委托单大成交量委托单成交量占比:大成交量委托单成交总量占全天成交总量的比例
24大成交量成交单成交量占比因子大成交量成交单筛选:逐笔成交数据中成交量排前 5% 的订单大成交量成交单成交量占比:大成交量成交单成交总量占全天成交总量的比例

7.3 建库建表、计算因子及因子入库全流程代码

因子计算通用模板请添加小助手获取