Hikyuu 2.8.0:科创板全覆盖与统计指标大扩容,量化策略武器库再升级

2026-06-11 13 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

量化框架的迭代节奏往往决定了策略开发者的效率天花板。Hikyuu 2.8.0 这次更新,表面看是指标和板块号的补全,实际上把策略构建中几个高频但过去需要手写的统计计算直接下沉到了底层——C++ 级速度、Python 级易用,这才是真正省时间的地方。

科创板 689 号段:A股覆盖不再有盲区

科创板股票代码以 688/689 开头,此前 HikyuuTdx 数据对接只覆盖了 688 号段。2.8.0 补上了 689,意味着通达信数据源对科创板的抓取不再遗漏。对于做全市场选股或板块轮动策略的人来说,少一个号段就少一批候选标的,回测结果可能因此偏移。

实际影响:如果你的选股池是全 A 股动态扫描,升级后无需再手动拼接科创板数据。

四个新统计指标:从手写公式到一行调用

这次新增的 BETA、KURT、SKEW、COV 四个指标,覆盖了策略开发中最常见的统计需求:

指标 含义 典型用途
BETA 个股与基准的 Beta 系数 风险敞口评估、市场中性策略
KURT 超额峰度(Excess Kurtosis) 尾部风险识别、分布偏离检测
SKEW 总体偏度 收益分布不对称性判断
COV 样本协方差 因子相关性分析、组合权重优化

过去在 Python 里算这些,要么用 pandas + scipy 手写,要么在回测循环里逐行计算,速度瓶颈明显。Hikyuu 把它们下沉到 C++ Indicator 层,调用方式和内置的 MA、MACD 完全一致,执行速度直接拉开差距。

TS_RAN 系列时序指标:滚动窗口统计的标准化

摘要中提到的 TS_RAN... 被截断,但从命名规律推断,这是 Hikyuu 的时序滚动(Time-Series Rolling)指标家族扩展,可能包括 TS_RANKTS_RANK_N 等变体。这类指标的核心逻辑是:在指定窗口内对时序数据做排序/排名,广泛用于横截面选股中的因子标准化。

实战:用新指标搭建一个尾部风险过滤器

下面演示如何在 Hikyuu 中用 KURT 和 SKEW 过滤掉收益分布尾部风险过高的标的,再结合 BETA 做市场中性筛选。这段代码可以直接在 Hikyuu 交互环境中运行。

from hikyuu import *

# 初始化交互环境(需先配置好数据源)
h = HikyuuTdx()

# 获取沪深300成分股列表
stk_list = h.get_block("沪深300")

# 参数设定
ref_idx = sh000300  # 基准:沪深300指数
window = 60         # 滚动窗口天数
kurt_threshold = 2.0  # 超额峰度阈值,超过此值认为尾部风险偏高
beta_range = (0.8, 1.2)  # Beta 系数可接受区间

candidates = []

for stk in stk_list:
    kdata = stk.get_kdata(Query(-window))

    # 计算日收益率序列
    closes = kdata.close
    returns = closes / closes.shift(1) - 1

    # --- 新指标调用 ---
    kurt_val = KURT(returns)      # 超额峰度
    skew_val = SKEW(returns)      # 偏度
    beta_val = BETA(returns, ref_idx.get_kdata(Query(-window)).close / ref_idx.get_kdata(Query(-window)).close.shift(1) - 1)
    cov_val = COV(returns, ref_idx.get_kdata(Query(-window)).close / ref_idx.get_kdata(Query(-window)).close.shift(1) - 1)

    # 过滤逻辑:峰度低于阈值 + Beta 在中性区间
    if kurt_val[-1] < kurt_threshold and beta_range[0] < beta_val[-1] < beta_range[1]:
        candidates.append({
            "code": stk.code,
            "name": stk.name,
            "kurt": round(kurt_val[-1], 4),
            "skew": round(skew_val[-1], 4),
            "beta": round(beta_val[-1], 4),
            "cov": round(cov_val[-1], 6),
        })

# 输出候选标的
print(f"通过过滤的标的数量: {len(candidates)}")
for c in candidates[:10]:
    print(c)

运行前需确认:

  1. 已安装 Hikyuu 2.8.0:pip install hikyuu==2.8.0
  2. 已通过 hikyuu_init 配置好通达信数据目录
  3. KURTSKEWBETACOV 的输入参数为 Indicator 对象或序列,具体签名以 hikyuu.interactive 中的 help(KURT) 为准——不同版本参数形式可能有细微差异

如果指标函数签名与上述不一致,可以退回到 pandas 兼容写法:

import pandas as pd
import numpy as np

# 备用方案:当 Hikyuu Indicator 接口参数不确定时
# 用 pandas 计算后传入策略逻辑
returns_pd = pd.Series(closes.to_numpy()) / pd.Series(closes.to_numpy()).shift(1) - 1
kurt_val = returns_pd.kurtosis()       # pandas 的 kurtosis 默认就是超额峰度
skew_val = returns_pd.skew()

升级与兼容性提醒

  • 数据源刷新:升级后首次运行,建议重新拉取通达信数据,确保 689 号段历史行情完整入库
  • 指标命名冲突:如果你在旧版本中自定义了名为 KURTSKEW 的指标,升级后会产生命名覆盖,需要改名或删除自定义版本
  • C++ 底层依赖:2.8.0 的指标计算在 C++ 层完成,如果编译环境有变动(如 macOS ARM 架构),确认对应的预编译 wheel 是否可用

什么时候值得升级

如果你属于以下情况之一,2.8.0 是必须升级的:

  • 全市场选股策略:689 号段缺失会导致科创板标的遗漏
  • 因子研究/多因子模型:KURT、SKEW、COV、BETA 是因子构建的基础统计量,手写版本在回测速度上远不如内置版本
  • 横截面排名策略:TS_RAN 系列指标让滚动排名从自定义函数变成标准调用

如果只是做单标的择时或简单均线策略,新指标带来的边际收益不大,可以等下一个大版本再统一升级。


量化框架的价值不在于功能列表有多长,而在于高频操作能不能一行搞定且跑得够快。Hikyuu 2.8.0 把四个统计指标和科创板数据补齐,恰好踩在了策略开发最常踩的痛点上——值得花十分钟升级,然后删掉自己项目里那堆手写的协方差和峰度函数。


相关推荐