YuWuKunCheng b7c4e60420 1. thread_local! 导致跨线程缓存不可见(主要问题)
kline_py.rs 中 BSP_CACHE、KLINE_IDENTITY、BAR_IDENTITY 使用了 thread_local!。主线程调用 识别买卖点() →
  买卖点信息.add() 写入的是主线程的 PySet,backtrader 策略线程读取的是自己线程独立的空 PySet。

  修复:将三个缓存从 thread_local! 改为全局 static + std::sync::LazyLock<RwLock<HashMap<...>>>

  影响分析

  这些身份缓存的影响与 KLINE_IDENTITY/BAR_IDENTITY 不同——它们只影响 Python 对象身份(is
  比较),不直接影响数据内容(因为 Rust 数据通过 Arc 共享,读写都是同一份)。

  具体后果:
  - 不同线程访问同一个 Rust Arc 会得到不同的 Python wrapper 对象
  - a is b 跨线程比较返回 False,哪怕它们包装同一个底层 Rust 对象
  - 每个线程维护一份独立缓存,内存浪费(不过 wrapper 很小)
2026-05-30 22:15:09 +08:00
2026-05-30 13:03:37 +08:00
2026-05-26 23:23:12 +08:00
2026-05-26 23:23:12 +08:00
2026-05-26 23:23:12 +08:00
2026-05-25 02:16:35 +08:00
2026-05-25 02:16:35 +08:00
2026-05-24 20:11:39 +08:00
2026-05-26 23:23:12 +08:00

chanlun — 缠论技术分析 Python 绑定

PyPI License: MIT

基于 chanlun Rust 核心库的 PyO3 高性能 Python 绑定,API 与 chan.py 完全兼容。

安装

pip install chanlun

快速开始

import chanlun

# 创建配置(全部默认值)
config = chanlun.缠论配置()

# 读取 K 线数据文件,创建观察者
obs = chanlun.观察者.读取数据文件("path/to/data.nb", config)

# 查看各层级序列
print(f"K线数量: {len(obs.普通K线序列)}")
print(f"笔数量: {len(obs.笔序列)}")
print(f"线段数量: {len(obs.线段序列)}")
print(f"中枢数量: {len(obs.中枢序列)}")

# 或使用立体分析器进行多周期分析
analyzer = chanlun.立体分析器("BTCUSD", ["1min", "5min", "30min"], config)
# 逐根投喂 K 线...

从源码构建

前置依赖: Rust + maturin

pip install maturin

# 开发模式(直接安装到当前 venv)
maturin develop

# 或构建 wheel
maturin build --release
pip install target/wheels/chanlun-*.whl

也可使用项目内的 build.sh:

./build.sh develop   # 开发安装
./build.sh wheel     # 构建 wheel
./build.sh test      # 运行集成测试

导出类

类别 类名 说明
枚举 买卖点类型, 相对方向, 分型结构 缠论基础枚举
数据 缺口, K线, 缠论K线 K 线数据结构
结构 分型, 虚线, 线段特征, 特征分型 分析层级结构
指标 平滑异同移动平均线, 相对强弱指数, 随机指标 MACD/RSI/KDJ
算法 , 线段, 中枢, 背驰分析 识别算法
业务 缠论配置, 基础买卖点, 买卖点, 观察者, K线合成器, 立体分析器 分析框架

兼容性

  • Python 3.9+
  • 类名 / 方法名 / 字段名 / 签名与 chan.py 一致
  • 支持 .nb / .dat 二进制文件格式(大端字节序)

许可

MIT

S
Description
chanlun 是基于缠中说禅理论的技术分析 Rust 核心库 • 全中文标识符 — 类型名、方法名、字段名与 chan.py 保持 1:1 对应 • 流式增量计算 — 每根 K 线触发全管线运算,适合实时交易 • 线程安全 — Arc + RwLock + SyncF64,支持多线程并发读取 • PyO3 绑定 — 通过 chanlun-py crate 导出为 Python 模块,可直接替换 chan.py • 配置驱动 — 62 个参数集中控制所有分析阶段行为,支持 JSON 往返 • 双端验证 — 107+ 测试用例,含 Rust 核心层与 chan.py 的双端数据一致性对比
Readme MIT 6.3 MiB
Languages
JavaScript 73.4%
Python 13.1%
Rust 11.3%
HTML 1.4%
TypeScript 0.7%