4.4 KiB
4.4 KiB
信号计算器完全移植评估
- 日期:2026-06-23
- 前置:混合迁移(SignalEngine + SignalOrchestrator)已完成
1. 当前差距
1.1 未移植的 Python 信号函数(7/8)
| 函数 | 文件 | 行数 | 复杂度 | 移植工时 |
|---|---|---|---|---|
bar_zdt_V230331 |
demo.py | 38 | 极低 | ~1h |
macd_金叉 |
demo.py | 56 | 低 | ~1-2h |
tas_macd_direct_V221106 |
demo.py | 55 | 低 | ~1-2h |
tas_ma_base_V230313 |
demo.py | 57 | 低-中 | ~2-3h |
cxt_停顿分型_V230106 |
demo.py | 49 | 低-中 | ~3-5h |
cxt_bi_end_V230222 |
demo.py | 74 | 中 | ~4-8h |
模板_V日期 |
_template.py | 28 | 模板 | 不需要 |
总计:约 12-21 小时
已移植的只有
youwukuncheng_中枢第三买卖点_V230602(1/8)。
1.2 可移除的 Python 组件
| 组件 | 文件 | 替换方案 |
|---|---|---|
SignalsParser 类 |
chan_external.py:102-293 | 不再需要——配置由 Rust 注册表直接生成 |
get_signals_config() |
chan_external.py:296-310 | list_signals() + 直接构造配置 |
从信号列表提取配置() |
chan_external.py:522-530 | list_signals() + get_signal_template() |
create_single_signal() |
chan_external.py:312-319 | 不再需要(Rust 信号函数使用 Signal::new_empty) |
chanlun.signals 包 |
signals/*.py | 所有函数已移植到 Rust |
chanlun.parse |
parse.py | 仅被 SignalsParser 使用 |
chan.py 中的副本 |
chan.py:7394+ | 内部副本,可单独处理 |
2. 关键依赖链
strategies.py
└→ get_signals_config(position.unique_signals, signals_module)
└→ SignalsParser(signals_module).parse(signal_strings)
└→ 遍历 chanlun.signals 模块的所有函数
└→ 读取文档字符串 → 正则提取参数模板
└→ parse 库反向格式化 → 配置字典
完全移植后,这个链简化为:
strategies.py
└→ 直接构造 config = [{name, freq, params}] 从 Rust list_signals()
3. 建议:分两阶段执行
阶段 1:移植剩余信号函数(~12-21h)
按复杂度递增顺序:
| 子任务 | 内容 |
|---|---|
| 1.1 | 移植 bar_zdt_V230331 → chanlun/src/signal/functions/demo.rs |
| 1.2 | 移植 macd_金叉 → demo.rs |
| 1.3 | 移植 tas_macd_direct_V221106 → demo.rs |
| 1.4 | 移植 tas_ma_base_V230313 → demo.rs(需要均线计算辅助) |
| 1.5 | 移植 cxt_停顿分型_V230106 → demo.rs |
| 1.6 | 移植 cxt_bi_end_V230222 → demo.rs |
每个子任务:
- 编写 Rust 函数 +
#[signal]注册 - 编写 Rust 单元测试
- 编写 Python 对比测试(Rust vs Python 输出)
阶段 2:移除 Python 回退路径(~4-6h)
| 子任务 | 内容 |
|---|---|
| 2.1 | 简化 SignalOrchestrator → 仅使用 SignalEngine |
| 2.2 | 移除 SignalsParser、get_signals_config、从信号列表提取配置 |
| 2.3 | 移除 chanlun.signals 包(demo.py/youwukuncheng.py/_template.py) |
| 2.4 | 移除 chanlun.parse(vendored parse 库) |
| 2.5 | 更新 strategies.py 使用直接配置构造 |
| 2.6 | 更新测试文件 |
4. 收益
| 收益 | 说明 |
|---|---|
| 代码量减少 | 移除 ~1,200 行 Python(SignalsParser + signals 包 + parse.py + chan.py 副本) |
| 统一执行路径 | 不再有 Rust/Python 双路径,消除维护成本 |
| 编译时安全 | 所有信号函数编译时注册,不会运行时 import_by_name 失败 |
| 性能提升 | 批量 Rust 执行 vs 逐个 Python 调用 |
| 依赖精简 | 移除 vendored parse 库和 chanlun.signals 包 |
5. 风险
| 风险 | 缓解 |
|---|---|
cxt_bi_end_V230222 依赖笔/分型序列指针比较 |
Rust 已有 分型/笔 结构,使用 Arc 指针 |
cxt_停顿分型_V230106 依赖 与MACD柱子分型匹配 |
需要确认 Rust 侧是否有该方法或等效逻辑 |
tas_ma_base_V230313 依赖均线按需计算 |
Rust 已有 指标计算器::计算并挂载 和 k.ma(key) |
strategies.py 默认信号配置为空时依赖 get_signals_config |
切换到 list_signals() + 直接构造 |
6. 结论
完全移植可行,建议执行。 总工作量约 16-27 小时。7 个未移植信号函数按复杂度递增顺序逐个移植(阶段 1),然后移除 Python 回退路径(阶段 2)。完成后信号框架为纯 Rust 核心 + Python 薄绑定,不再有 Python 动态导入路径。