-
Notifications
You must be signed in to change notification settings - Fork 724
分析工具
fasiondog edited this page Nov 22, 2025
·
1 revision
**本文引用的文件**
- [analysis.py](file://hikyuu/analysis/analysis.py)
- [_analysis.cpp](file://hikyuu_pywrap/analysis/_analysis.cpp)
- [analysis_main.cpp](file://hikyuu_pywrap/analysis/analysis_main.cpp)
- [analysis_sys.h](file://hikyuu_cpp/hikyuu/analysis/analysis_sys.h)
- [analysis_sys.cpp](file://hikyuu_cpp/hikyuu/analysis/analysis_sys.cpp)
- [combinate.h](file://hikyuu_cpp/hikyuu/analysis/combinate.h)
- [combinate.cpp](file://hikyuu_cpp/hikyuu/analysis/combinate.cpp)
- [Performance.h](file://hikyuu_cpp/hikyuu/trade_manage/Performance.h)
- [Performance.cpp](file://hikyuu_cpp/hikyuu/trade_manage/Performance.cpp)
- [_Performance.cpp](file://hikyuu_pywrap/trade_manage/_Performance.cpp)
- [analysis/__init__.py](file://hikyuu/analysis/__init__.py)
Loading
Loading
Loading
Loading
Loading
本文件聚焦于Hikyuu策略分析模块,系统性阐述Python侧analysis.py提供的组合分析能力,以及C++核心analysis_sys.cpp与combinate.cpp的实现机制与交互方式。文档旨在帮助用户完成:
- 加载回测结果与构建分析数据
- 执行指标组合分析与系统策略对比
- 生成性能统计与风险评估报告
- 进行参数优化与滚动寻优
- 在策略研究与优化中的高级应用场景
分析模块位于Python层与C++核心层之间,通过pybind11桥接。关键路径如下:
- Python层入口与封装:hikyuu/analysis/analysis.py、hikyuu/analysis/init.py
- C++核心分析接口:hikyuu_cpp/hikyuu/analysis/combinate.h/.cpp、hikyuu_cpp/hikyuu/analysis/analysis_sys.h/.cpp
- Python绑定:hikyuu_pywrap/analysis/_analysis.cpp、hikyuu_pywrap/analysis/analysis_main.cpp
- 性能统计:hikyuu_cpp/hikyuu/trade_manage/Performance.h/.cpp,Python绑定_hikyuu_pywrap/trade_manage/_Performance.cpp
graph TB
subgraph "Python 层"
PY_API["analysis.py<br/>组合分析API"]
PY_BIND["hikyuu_pywrap/analysis/_analysis.cpp<br/>pybind11绑定"]
PY_INIT["hikyuu/analysis/__init__.py<br/>导出入口"]
end
subgraph "C++ 核心"
COMB_H["analysis/combinate.h"]
COMB_CPP["analysis/combinate.cpp"]
SYS_H["analysis/analysis_sys.h"]
SYS_CPP["analysis/analysis_sys.cpp"]
PERF_H["trade_manage/Performance.h"]
PERF_CPP["trade_manage/Performance.cpp"]
end
PY_API --> PY_BIND
PY_BIND --> COMB_CPP
PY_BIND --> SYS_CPP
COMB_CPP --> PERF_CPP
SYS_CPP --> PERF_CPP
PY_BIND --> PERF_CPP
图表来源
- analysis.py
- _analysis.cpp
- analysis_sys.h
- analysis_sys.cpp
- combinate.h
- combinate.cpp
- Performance.h
- Performance.cpp
章节来源
- analysis.py
- analysis/init.py
- 组合分析(指标组合与系统对比)
- Python层:提供单股票与多股票的指标组合分析函数,以及系统策略列表分析函数
- C++层:实现指标组合生成、信号组合、并行回测与性能统计
- 性能统计(Performance)
- 提供回测期间的统一统计项与报告生成
- 最优系统选择
- 支持单系统与多系统的最优筛选,按指定统计项排序
章节来源
- analysis.py
- combinate.h
- combinate.cpp
- analysis_sys.h
- analysis_sys.cpp
- Performance.h
- Performance.cpp
Python侧analysis.py通过内部函数调用C++绑定,后者再调用C++核心实现。整体流程:
- Python准备Stock、Query、TradeManager、System等对象
- 调用inner_*绑定函数,释放GIL后进入C++核心
- C++核心执行指标组合、信号组合、并行回测与性能统计
- 将结果打包为字典或DataFrame返回给Python
sequenceDiagram
participant Py as "Python : analysis.py"
participant Bind as "Python : _analysis.cpp"
participant Core as "C++ : combinate.cpp / analysis_sys.cpp"
participant Perf as "C++ : Performance"
Py->>Bind : 调用 inner_combinate_ind_analysis(...)
Bind->>Bind : 释放GIL
Bind->>Core : combinateIndicatorAnalysis(...)
Core->>Core : 生成买入指标组合 EXIST(..., n)
Core->>Core : 遍历买入×卖出组合,构造信号 SG_Bool
loop 对每个信号
Core->>Core : sys.setSG(sg); sys.setTM(tm); sys.run(stk, query)
Core->>Perf : per.statistics(tm, now)
Core-->>Bind : 记录 Performance.values()
end
Bind-->>Py : 返回字典映射到组合名
图表来源
- analysis.py
- _analysis.cpp
- combinate.cpp
- Performance.cpp
- 指标组合生成
- 输入:一组买入/卖出指标序列,参数n表示指标在n周期内存在
- 输出:由EXIST(ind, n)与逻辑与组合构成的新指标序列
- 关键实现:combinateIndicator、combinateIndex模板
- 组合测试
- 对每个买入组合与每个卖出指标构造信号SG_Bool,运行系统并统计Performance
- 支持单股票与多股票(Block)批量测试
- 系统策略对比
- analysis_sys_list与analysis_sys_list_multi:对系统原型克隆后批量运行,按Performance统计项汇总
flowchart TD
Start(["开始"]) --> GenInd["生成买入指标组合 EXIST(ind, n)"]
GenInd --> BuildSig["遍历买入组合 × 卖出指标 构造 SG_Bool"]
BuildSig --> RunSys["sys.setSG(sg); sys.setTM(tm); sys.run(stk, query)"]
RunSys --> Stat["per.statistics(tm, now)"]
Stat --> Record["记录组合名与 Performance.values()"]
Record --> Next{"还有组合?"}
Next --> |是| BuildSig
Next --> |否| End(["结束"])
图表来源
- combinate.h
- combinate.cpp
- analysis.py
章节来源
- analysis.py
- combinate.h
- combinate.cpp
- 组合分析核心
- combinateIndicator:生成组合指标序列
- combinateIndicatorAnalysis:单股票组合测试
- combinateIndicatorAnalysisWithBlock:多股票并行组合测试(线程池+分段任务)
- 系统策略分析核心
- analysisSystemList:对系统列表与股票列表逐一运行,统计Performance
- findOptimalSystem / findOptimalSystemMulti:按指定统计项排序,返回最优系统
- 性能统计
- Performance::statistics:基于交易记录在指定时间点计算统计项
- Python侧通过绑定暴露values、names、report等接口
classDiagram
class Performance {
+exist(key) bool
+statistics(tm, datetime) void
+names() StringList
+values() PriceList
+report() string
+get(name) double
}
class AnalysisSystemOutput {
+string market_code
+string name
+PriceList values
}
class CombinateAnalysisOutput {
+string combinateName
+string market_code
+string name
+PriceList values
}
class AnalysisModule {
+analysisSystemList(sys_list, stk_list, query) vector~AnalysisSystemOutput~
+findOptimalSystem(sys_list, stock, query, sort_key, sort_mode) pair
}
class CombinateModule {
+combinateIndicator(inputs, n) vector~Indicator~
+combinateIndicatorAnalysis(stk, query, tm, sys, buy, sell, n) map
+combinateIndicatorAnalysisWithBlock(blk, query, tm, sys, buy, sell, n) vector~CombinateAnalysisOutput~
}
AnalysisModule --> Performance : "统计"
CombinateModule --> Performance : "统计"
AnalysisModule --> AnalysisSystemOutput : "输出"
CombinateModule --> CombinateAnalysisOutput : "输出"
图表来源
- analysis_sys.h
- analysis_sys.cpp
- combinate.h
- combinate.cpp
- Performance.h
章节来源
- analysis_sys.h
- analysis_sys.cpp
- combinate.h
- combinate.cpp
- Performance.h
- 绑定导出
- _analysis.cpp导出inner_combinate_ind_analysis、inner_combinate_ind_analysis_with_block、inner_analysis_sys_list、find_optimal_system、find_optimal_system_multi
- analysis_main.cpp聚合导出
- GIL管理
- 在执行耗时的组合分析与系统列表分析时,释放GIL,避免阻塞Python线程
- 结果封装
- 组合分析返回字典(组合名为键,Performance为值)
- 系统列表分析返回字典(包含列名与各列的值列表)
章节来源
- _analysis.cpp
- analysis_main.cpp
- analysis.py
- Python层依赖
- analysis.py依赖核心模块(TradeManager、System、Performance等)与内部绑定函数
- init.py导出组合分析与系统分析API
- C++层依赖
- combinate.cpp依赖Indicator、Signal、System、TradeManager、Performance
- analysis_sys.cpp依赖System、Performance、线程工具
- 绑定层依赖
- _analysis.cpp依赖analysis_sys.h与combinate.h,调用C++核心并返回Python对象
graph LR
PY["analysis.py"] --> BIND["_analysis.cpp"]
BIND --> CORE1["combinate.cpp"]
BIND --> CORE2["analysis_sys.cpp"]
CORE1 --> PERF["Performance.cpp"]
CORE2 --> PERF
图表来源
- analysis.py
- _analysis.cpp
- combinate.cpp
- analysis_sys.cpp
- Performance.cpp
章节来源
- analysis.py
- _analysis.cpp
- analysis_sys.cpp
- combinate.cpp
- 指标组合数量
- 组合总数为2^n - 1,输入序列长度需控制(模板限制最大15),避免组合爆炸
- 并发策略
- 多股票组合分析采用线程池与分段任务,提升吞吐
- 系统列表分析支持并行版本findOptimalSystemMulti
- 时间窗口与统计截止
- 统计严格限定至查询末尾交易日,避免持有头寸导致收益不准确
- GIL释放
- 在耗时计算阶段释放GIL,提高Python侧交互响应
章节来源
- combinate.h
- combinate.cpp
- analysis_sys.cpp
- 统计项不存在
- 若传入的keys不在Performance.names()中,将触发异常;请核对统计项名称
- 空序列或空股票列表
- 当输入为空时,核心函数会直接返回空结果;检查输入是否正确
- 系统或股票为空
- 对空系统或空股票的处理会跳过并记录错误日志;确保对象有效
- 组合数量超限
- 输入序列长度超过模板限制将抛出异常;建议减少指标数量或拆分分析
章节来源
- analysis.py
- combinate.h
- analysis_sys.cpp
本分析模块通过Python层的易用API与C++核心的高性能实现,提供了从指标组合到系统策略对比的完整分析链路。结合Performance统计与并行化设计,能够高效支撑策略研究与参数优化工作。建议在大规模组合场景中合理控制输入规模,并充分利用多线程与滚动寻优能力。
以下示例展示如何加载回测结果、执行组合分析与生成分析报告(以路径代替具体代码内容):
- 加载回测结果与准备对象
- 准备Stock、Query、TradeManager、System等对象,参考示例路径:examples_init.py
- 单股票指标组合分析
- 调用Python函数:combinate_ind_analysis(stk, query, tm, sys, buy_inds, sell_inds, n, keys)
- 参考实现路径:analysis.py
- 多股票指标组合分析
- 调用Python函数:combinate_ind_analysis_multi(stks, query, tm, sys, buy_inds, sell_inds, n, keys)
- 参考实现路径:analysis.py
- 系统策略列表分析
- 调用Python函数:analysis_sys_list(stks, query, sys_proto, keys)
- 参考实现路径:analysis.py
- 多股票系统策略列表分析
- 调用Python函数:analysis_sys_list_multi(stks, query, sys_proto, keys)
- 参考实现路径:analysis.py
- 生成分析报告
- 使用Performance的report或values接口查看统计项,参考绑定路径:_Performance.cpp
- 参数优化与滚动寻优
- 使用find_optimal_system/find_optimal_system_multi按指定统计项排序,参考C++实现路径:analysis_sys.cpp
- 高级应用场景
- 指标组合数量控制:遵循模板限制,避免组合爆炸
- 并行加速:利用多线程与并行版本函数,提升大规模分析效率
- 时间窗口一致性:确保统计截止时间与查询范围一致,避免持仓影响收益
章节来源
- analysis.py
- _Performance.cpp
- analysis_sys.cpp