Skip to content

Releases: fasiondog/hikyuu

2.7.7

04 Mar 18:18
066c83c

Choose a tag to compare

🚀 新增特性

  • feat(factor): 新增完整的因子管理系统,支持因子的创建、存储、查询和批量计算
    • 添加 Factor 类支持因子值存储、复权类型配置和序列化
    • 添加 FactorSet 类支持批量管理多个因子,支持索引操作符和迭代器
    • 支持获取单个证券或批量证券的因子计算结果
    • 支持删除因子值数据功能
    • 支持因子公式检查和 align_dates 日期对齐参数
    • 支持特殊因子值保存
    • 支持 Block 属性进行因子匹配验证
    • 支持 FactorSet 作为多因子合成函数的输入参数
  • feat(indicator): 新增涨跌停判断指标ISLIMITUP/ISLIMITDOWN支持
  • feat(indicator): 重构 MDD/MRR指标实现,添加时间窗口参数支持和增量计算测试
  • feat(trade_manage): 新增 getPositionDict 方法用于获取当前全部持仓记录字典
  • feat(core): 添加许可证过期提醒功能
  • feat(plugin): 添加 AGG_VWAP 指标的 KData 重载版本
  • feat(hikyuu): 添加基于策略上下文的初始化函数
  • 发布版本支持 python 3.14

⚡️ 优化改进

  • refactor(hikyuu/utilities/thread): 优化并行计算
  • feat(misc): 添加批量获取账户资金和性能数据的功能
  • feat(stock): StockManager 添加互斥锁防止初始化冲突,支持加载扩展指标插件
  • feat(agent): 添加多线程控制的互斥锁防止代理启停冲突

🐞 缺陷修复

  • fix(trade_sys): crtST和现有接口不符无法使用
  • fix(factor): 修复 MultiFactorBase 克隆和序列化中缺失 m_norm 的问题
  • feat(HikyuuTdx): 优化板块信息下载,添加超时处理,防止卡死

2.7.5

02 Feb 08:03
c4ac485

Choose a tag to compare

🚀 新增特性

  • feat(indicator): 支持增量计算。如新增 extend 方法,在当前已计算基础上,自动扩展只最新数据并只计算最新数据。主要用于实盘、监控等场景加速。
  • 复权增加成交量、成交金额复权
  • macosx 下序列化支持
  • feat(trade_sys): SE_MFxx 添加多因子选择器的复权方式配置参数(mf_recover_type), 指定MF使用特定的复权方式进行计算
  • feat(KData): KData增加 getKData 方法,部分情况下可加速获取

⚡️ 优化改进

  • 优化 MF 内存占用过多的问题
  • 优化 windows 下数据量超过一定范围后并行计算性能可能出现的剧烈下降
  • 优化matplotlib交互模式参数设置问题, 当不在交互式会话中时,显式设置interactive参数为False,防止绘图过慢
  • 优化IC实现,使其可以作为普通指标公式使用
  • 优化全局并行计算任务

🐞 缺陷修复

  • fixed 使用更安全的方式处理python临时对象类型降级问题,防止某些情况崩溃
  • fix(hikyuutdx): 初次使用下载时,板块信息下载报错
  • fixed(data): 调整科创板/北交所最小交易量配置为 100
  • fix(trade_sys): 卖出时通过MM判断卖出数量, 以便分钟级别回测时可以通过MM进行T+1控制
  • fix(allocatefunds): 修正资金分配权重计算逻辑, 确保实际分配的权重不超过可分配权重上限,避免超出预设的资金分配限制,提高资金分配的准确性和安全性
  • fixed MF_ICWeight, MF_ICIRWeight 使用标准化后的原始因子进行IC/ICIR权重计算
  • fix(trade_sys): 修复MultiFactorSelector指标设置后未重置计算状态的问题
  • fixed(importdata): 更新后出现KeyError: 'lazy_preload' error
  • fix(gui): start_qmt 用Query.get_base_ktype_list()替换Query.get_all_ktype()
  • fix(KQuery): 修正TRANS类型的时间转换参数,将g_ktype2sec映射中TRANS类型的值从60243(表示3天)改为3,以确保时间转换逻辑的正确性。
  • fix(draw): 优化matplotlib中指标绘制,以便不同周期范围指标能够正确绘制

2.7.3

06 Jan 07:10
b0f8c8f

Choose a tag to compare

新增特性

  • feat(config): 添加 timeline 和 trans 预加载支持
  • feat(StockManager): 添加根据指数获取板块列表功能
  • feat(plugin_extind): 添加AGG_VWAP指标支持

🐞 缺陷修复

  • fixed(datetime): 优化UTC偏移量计算性能,该问题导致 linux 平台下 clickhouse 数据加载比其他平台慢了10倍
  • fixed(python): Python实现的SG等子类在赋值给C++类时可能存在临时变量类型降级的问题,导致 sys.sg = B() 缺失python _clone 实现
  • fix(data): 修复本地数据导入时的可能存在结构体解包格式错误
  • fix(trade_sys): 修复安全止损指标ST_Saftyloss在调用SAFTYLOSS函数时缺少CLOSE()参数
  • feat(_Stock): 为set_kdata_from_df方法添加默认列参数(原和文档说明不符),设置默认的列名参数为["datetime", "open", "high", "low", "close", "amount", "volume"]

2.7.2

24 Dec 16:51

Choose a tag to compare

🚀 新增特性

  • 新增 AF_FixedAmount 等金额资产分配,对选中的资产进行等金额分配
  • 添加 lazy_preload 配置选项,预加载日线以下数据时,支持懒加载模式
  • 支持无限制预加载K线数据, 当 preload_max_num 设置为小于等于 0 时,表示不对预加载的 K 线数量做限制。

⚡️ 优化改进

  • 调整ETF最小交易量默认配置为100
  • feat(trade): 支持缩扩股业务处理
  • feat(HikyuuTdx): 导入股票交易和时间数据时过滤价格为零的记录
  • feat(HikyuuTdx): 改进股票数据导入逻辑并增强错误处理
  • feat(hikyuu_cpp): 调整对 reload_time 配置的解析和验证,只有当配置正确时才启用自动重载功能
  • 优化预加载加载取消逻辑,避免无效操作
  • 优化调整全局变量初始化与清理顺序
  • 线程池及 PluginManager 优化

🐞 缺陷修复

  • fix(indicator): 优化指标克隆与序列化缓冲区处理, 防止内存泄漏
  • fix(trade_sys): crtSG 函数中遗漏将创建的信号指示器对象引入全局的功能
  • fix(data): 修复导入股票数据时交易量比较的错误日志输出,py311不支持f-str双引号嵌套
  • fix(trade_manage): 增加对缩股的处理逻辑
  • fix(mysql): 调整K线数据金额字段精度, KRecord 中的amount保持为万元(原为千元, 和其他存储引擎不一致)
  • fix(hikyuu_cpp): 调整ETF、基金和B股的分时数据价格精度
  • fix(draw): 解决matplotlib绘制指标时内部缺值或异常时无法绘图的问题
  • fix(StrategyContext): 修复 K 线类型去重逻辑中的大小写问题,以便不区分大小写

2.7.1

01 Dec 04:39

Choose a tag to compare

🚀 新增特性

  • 增加数据重载时间配置项, 新增 reload_time 配置项,用于指定每日数据重新加载的时间(格式为 HH:MM),默认值为 "00:00。需手工更改或 hikyuu.ini 或在 load 参数中指定
  • 添加crtSCFilter函数用于快速创建评分过滤器实例
  • 新增 crtNorm 函数用于快速创建标准化/归一化等算法函数
  • 取消行业板块数据下载

🐞 缺陷修复

  • fixed: 修正 clickhouse 存储 K 线数据中 amount 字段的单位转换问题
  • fixed: 限制日期范围以适配 ClickHouse DateTime 类型
  • fixed: 修改Stock_Number结构体中的number类型为double,windows下容易出现精度错误
  • fixed: 更新盈利目标策略接口参数说明与实现逻辑,移除了部分子类中冗余的 _calculate 空实现
  • fixed: HikyuuTdx 在导入股票数据时,增加对低价股低点差异的绝对值判断,避免因价格过低导致的相对误差误判。

2.7.0

01 Nov 17:04
44376aa

Choose a tag to compare

🚀 新增特性

  • 新增 SP系列滑点算法:截断正态分布滑点算法(ST_TruncNormal)、对数分布随机价格滑点算法(ST_LogNormal)、正态分布随机价格滑点算法(ST_Normal)、均匀分布随机价格算法(ST_Uniform)

⚡️ 优化改进

  • 主包 hikyuu 去除 arrow 依赖,需要 arrow 相关功能需独立安装 pip install hikyuu-plugin,并手工引入 from hikyuu_plugin.extra import *。使用该方式,也便于自行编译的朋友,使用插件。
  • clickhouse 预加载过程中直接读取数据时,保证其读取数据和预加载完成后一致
  • 优化KData构造函数中的数据加载逻辑,避免在重加载或设置K线数据列表时出现数据无效的风险。
  • 优化板块数据下载

🐞 缺陷修复

  • fixed:HikyuuTDX 首次运行时因 use_download 未初始化导致闪退
  • fixed:释放预加载K线数据时同时释放已加载的历史财务数据,保证重加载时读取最新的历史财务数据

2.6.9

19 Oct 16:00
5a3f3e4

Choose a tag to compare

🚀 新增特性

  • MF多因子评分板支持指定全局因子标准化、对特定因子指定特有标准化和中性化(含行业中性化与风格因子中性化)算法

    # 创建两个因子 ma20, ma60
    ma20 = MA(CLOSE(), 20)
    ma20.name = 'MA20'
    
    ma60 = MA(CLOSE(), 60)
    ma60.name = 'MA60'
    
    # 指定证券列表
    stks = [s for s in blocka]
    
    # 指定查询范围,并创建一个等权组合的 MF
    query = Query(Datetime(20150101), Datetime(20251017))
    mf = MF_EqualWeight([ma20, ma60], stks, query, ref_stk=sm["sh000001"])
    
    # 添加全局标准化
    mf.set_normalize(NORM_Zscore())
    
    # 为 ma20 添加行业中性化以及市场中性化(即按市值风格因子中性化)
    mf.add_special_normalize("MA20", NORM_Zscore(), category="行业板块", style_inds=[LOG(CLOSE()*LIUTONGPAN())])
  • 增加内置因子标准化算法(NORM_Zscore/NORM_MinMax/NORM_Quantile/NORM_Quantile_Uniform)

  • 新增 SE_MultiFactor2 自行指定配置时间截面评分过滤器,内置评分过滤器(SCFilter_TopN/SCFilter_Price/SCFilter_AmountLimit/SCFilter_Group等)

    # 如为 SE_MultiFactor2 实例,设置过滤:分值不为Nan|分成10组取第0组|价格大于等于10元|成交金额不在当日排名末尾20%之内|取前10
    se.set_scores_filter(SCFilter_IgnoreNan()|SCFilter_Group(10, 0)SCFilter_Price(
                10.) | SCFilter_AmountLimit(0.2) | SCFilter_TopN(10))

    如通过 SCFilter_Group 创建过滤器进行因子分组测试:

release_269
  • [vip]新增 GROUP 系列指标(GROUP_MAX/GROUP_MIN/GROUP_SUM/GROUP_FUNC等),和 AGG 系列指标对应
  • [vip]dateserver 增加 --parquet_path 方式保存 tick data,仅在 --save 同时为 yes 时生效
  • feat(KData): 添加索引方式获取子集功能

⚡️ 优化改进

  • HikyuuTDX 优化板块信息下载,防止下载失败情况下板块信息丢失
  • [vip]优化 clickhouse 存储引擎,日线整体预加载优化至8秒,目前存储引擎日线整体加载速度: HDF5 6秒 -> clickhouse 8秒 -> mysql 22秒
  • HikyuuTDX 从 PyQt5 迁移至 PySide6
  • feat(hikyuu_cpp): 在 Performance 类中新增"未平仓帐户收益率%"统计项
  • feat(draw): 为 tm_performance 和 sys_performance 函数添加返回主图 axis 的功能,便于用户在绘图后对图表进行进一步的自定义操作和调整。
  • 编译工程优化,基于xmake合并编译功能,整体编译实际缩短三分之二

🐞 缺陷修复

  • fix(hikyuu): 默认情况下不启动行情接收,防止在开盘后因自身合成缺失导致从 dataserver 获取行情也缺失的问题。
  • fix(datetime): 修复 UTC 偏移量计算在非 Windows 平台下的问题可能不准确。
  • fix(hikyuu): realtime_update 优化实时更新功能中的股票列表获取逻辑
  • fix(data): 修复10年债券收益率数据导入时的日期判断逻辑

2.6.8

05 Sep 17:00

Choose a tag to compare

🚀 新增特性

  • 新增 get_inds_view 方法,用于指定日期或范围内的系列指标结果并返回 pandas.DataFrame 结果。该方法主要用于获取系列指标结果后,使用其他 python 库,进行进一步数据处理,或日常监控打印。
    In [3]: df = get_inds_view(blocka, [CLOSE(), OPEN(), MA(CLOSE()), AMA(CLOSE()), MA(CLOSE(),n=30)], Datetime(20250822))
    
    In [4]: df
    Out[4]: 
          证券代码  证券名称   交易时间  CLOSE   OPEN         MA        AMA         MA
    0     SH600229  城市传媒 2025-08-22   5.89   7.23   7.087273   7.060143   7.034000
    1     SH601121  宝地矿业 2025-08-22   7.21   6.01   2.482273   2.486140   6.544000
    2     SH600227    赤天化 2025-08-22   7.97   6.41   6.292273   6.406271   2.462333
    3     SH600390  五矿资本 2025-08-22   6.62   2.59   6.585455   6.015825   6.208000
    4     SZ000612  焦作万方 2025-08-22   2.56   6.69   6.260000   6.334334   8.710933
    ...        ...       ...        ...    ...    ...        ...        ...        ...
    3467  SH603255    鼎际得 2025-08-22  32.36  32.39  31.984409  32.237558  31.445567
    3468  SH600621  华鑫股份 2025-08-22  17.91  16.80  16.134909  16.596052  15.940933
    3469  SH600999  招商证券 2025-08-22  19.32  18.68  18.342727  18.646812  18.188667
    3470  SZ002301  齐心集团 2025-08-22   7.32   7.36   7.130000   7.192394   7.109333
    3471  SH603369    今世缘 2025-08-22  42.49  42.21  40.229545  41.319146  40.089333
    
    [3472 rows x 8 columns]
  • 新增 AGG 系列聚合指标(捐赠用户),如日线使用分钟线聚合结果
    #如计算:每日成交金额 / 日内分钟线最大成交金额
    ind = AGG_MAX(AMO(), ktype=Query.MIN)/AMO()
    s = sm['sz000001']
    k = s.get_kdata(Query(-100, ktype=Query.DAY))
    result = ind(k)
    print(result.to_df()))
  • IC 指标增加 strict 参数,strict 模式下为当前时刻的 N 日后收益,非 strict 模式下为当前时刻之前的 N 天收益
  • 新增 REFX 指标,增强 REF 指标,可进行左移(未来函数, 勿在回测中使用,通常用于其他数据处理)
  • K线添加分时和分笔数据支持, 在 KQuery 中添加 TIMELINE 和 TRANS 两种新 K 线类型,可直接使用指标计算分时和分笔数据
    In [28]: s = sm['sz000001']
    
    In [29]: k = s.get_kdata(Query(-100, ktype=Query.TRANS))
    
    In [30]: MA(CLOSE())(k).to_df()
    Out[30]: 
                  datetime     value0
    0  2025-09-04 14:52:08  11.750000
    1  2025-09-04 14:52:11  11.750000
    2  2025-09-04 14:52:14  11.750000
    3  2025-09-04 14:52:17  11.750000
    4  2025-09-04 14:52:20  11.750000
    ..                 ...        ...
    95 2025-09-04 14:56:53  11.730455
    96 2025-09-04 14:56:56  11.730909
    97 2025-09-04 14:56:59  11.731364
    98 2025-09-04 14:57:02  11.732273
    99 2025-09-04 15:00:00  11.732727
    
    [100 rows x 2 columns]
  • KData新增 get_kdata 方法获取对应时间范围内其他不同 K 线周期数据
  • 添加 Indicator 结果集转换为 numpy.array 的新方法 to_array
  • StockManager 添加 is_trading_hours 方法判断是否为交易时间段

⚡️ 优化改进

  • 改进 python 中 std::share_ptr 引出对象的 clone 操作,提升 windows 下相关并行处理速度
  • Indicaotr 优化双指标等特殊指标的表达式去重,提升公式计算性能
  • 预加载模式 KData 与 Stock 共享数据、非预加载模式下捐赠用户 KData 使用LRUCache
  • CVAL、SLICE、ALIGN 支持处理多结果集指标
  • KRecord/KDataImp 使用全局 Null对象

🐞 缺陷修复

  • 修复 MySQL/ClickHouse 无法按索引方式获取非预加载数据的错误
  • 修复 Indicator 类中 to_numpy 函数的内存泄漏问题
  • 修复 ALIGN 当日期超过给定范围时的对齐问题,优化了对齐算法
  • 修复非中文环境 Windows 设置终端为中文编码导致的终端崩溃

2.6.7

14 Aug 17:05
ad7060d

Choose a tag to compare

  1. 新增功能与优化

    • 提升核心结构转 numpy 与 pandas DataFrame 性能, 方便其他 python 库对接(Indicator/KData/KRecordList/TimeLineList/TransList/StockWeight/DatetimeList/PositionList/TradeList)
    • 支持自定义动态周期K线(捐赠权益), 新增 DAY3、DAY5、DAY7 和 MIN3 扩展K线
    • 优化K线预加载, 保证预加载期间获取数据和加载完毕后获取数据一致
    • 新增 get_market_view 返回 DataFrame 格式的实时行情或某日行情数据
    • Stock 新增 set_kdata_from_df 便捷方法,功能同 set_krecord_list
    • 优化本地化, SYS 和 Portolio 跟踪打印时显示中文
    • 优化退出时等待 spot 时间有时过长的的问题
    • test(data): 增加针对真实通达信数据导入的集成测试
  2. 缺陷修复

    • fixed HikyuuTdx 无法申请试用许可,字体显示过大

2.6.6

29 Jul 09:42

Choose a tag to compare

  1. 新增功能与优化

    • 优化 msyql 预加载速度, 优化后原1分钟线预加载每股5120条数据耗时从 790 秒减少到 212秒
    • 调整行情采集和接收的接口结构以便扩展支持level2
    • 增加 clickhouse 存储引擎(捐赠权益), 和 mysql 相比存储占用空间缩减60%, 1分钟线预加载耗时减小(约120秒), 但日线预加载耗时增大至约 45 秒(mysql 耗时 22秒), 当日增量数据下载耗时较长(约30分钟)。
    • dataserver 增加缓存 ticks 和存储 ticks 的功能(存储仅支持 clickhouse 存储引擎)
    • 改进 windows 终端下中文输出
    • 优化退出时释放顺序,避免数据未加载完成时退出异常
    • hdf5 importer 增加移除指定日期及其之后数据接口
  2. 缺陷修复

    • fixed BARSLASTCOUNT 计算越界
    • fixed 未预加载财务信息时, 无法获取财务数据