☰
czsc:基于 Rust 的缠中说禅(缠论)量化分析工具实战指南
2026/10/10 5:46:57 网站建设 项目流程
  • 金融科技

【免费下载链接】czsc

缠中说禅技术分析工具;缠论;股票;期货;Quant;量化交易

项目地址:https://gitcode.com/gh_mirrors/cz/czsc
点击查看免费下载

导读:本文围绕 czsc 开源仓库的 README.md 展开,系统讲解其Rust + Python 混合架构、安装构建流程、缠论核心分析(分型/笔/中枢)、信号-事件-交易体系、权重回测、多数据源接入与 HTML 可视化等实战能力。读完本文,你将掌握 czsc 1.0.X 的完整使用链路:从安装、K 线合成、信号生成,到策略回放、批量研究与可视化报告输出,并理解底层 Rust crate 的模块划分与调用关系。

项目定位:把缠论算法搬到 Rust

czsc(缠中说禅技术分析工具)是一个面向 A 股、期货、数字货币等市场的中文量化分析框架,核心算法源自缠中说禅博客的"缠论"理论。从1.0.X 版本开始,缠论核心算法(分型、笔、中枢等)已全部迁移到 Rust 实现,并通过 PyO3 扩展(czsc._native)暴露给 Python——这是理解整个项目的最关键前提。

需要注意的是,1.0.X 与历史 0.9.X 版本不兼容,旧代码需按新 API 迁移。仓库顶部还提供了"使用前必看"的免责声明:项目开源仅用于技术交流,不构成投资建议。

架构概览:Rust + Python 混合架构

czsc 采用清晰的上下双层架构:底层是 9 个 crate 组成的 Rust workspace,上层是纯 Python 门面包。

Rust workspace(9 个 crate),声明于 Cargo.toml:

crate职责
czscfacade crate,把整个 Rust workspace 公共 API 聚合 re-export 到一个名字下
czsc-core缠论核心分析器:FX / BI / ZS / CZSC 及全部对象类型
czsc-utilsK 线合成器、频率数据、交易时间等工具
czsc-ta纯 Rust 技术分析算子(ema / sma / boll 等)
czsc-signals220+ 信号函数库,按 20 余个模块组织
czsc-trader交易引擎、信号编译、参数优化
czsc-signal-macros#[signal_module]过程宏,负责信号注册
czsc-derive派生宏与错误链支持
czsc-pythonPyO3 绑定入口,产出czsc._nativecdylib

Python 包结构:

czsc (Python 包) ├── czsc._native ← Rust 扩展(PyO3),缠论核心 │ ├── CZSC / FX / BI / ZS / RawBar / NewBar / BarGenerator │ ├── Freq / Mark / Direction / Signal / Event / Position / Operate │ ├── CzscTrader / CzscSignals / generate_czsc_signals │ ├── signals.* ← 220+ 信号函数 │ └── ta.* ← Rust TA 算子 ├── czsc.traders ← Python 门面,汇聚 Rust 交易 API ├── czsc.utils ← 工具函数(绘图/缓存/统计/交易工具) ├── czsc.connectors ← 数据源连接器(天勤/Tushare/CCXT/本地缓存) ├── czsc.strategies ← 策略门面(CzscStrategyBase/CzscJsonStrategy) ├── czsc.fsa ← 飞书自动化工具 ├── czsc.mock ← 测试用模拟数据(转发自 wbt) └── czsc.envs ← 环境变量管理

facade crate 的命名空间约定

从源码结构看,czsc这个 Rust crate 本身不做业务实现,只做 re-export,让终端用户写czsc = "1.0"即可拿到全部公共 API(见 crates/czsc/src/lib.rs)。其命名空间映射非常规整:

子模块来源
czsc::analyzeczsc_core::analyze
czsc::objects::*czsc_core::objects的所有数据类型
czsc::taczsc_ta::pure纯算子
czsc::bar_generatorczsc_utils::bar_generator
czsc::signalsczsc_signals
czsc::traderczsc_trader的全部对外公共面

顶层直接 re-export 了最常用的类型:CZSC / RawBar / NewBar / Freq / FX / BI / ZS / Mark / Direction / Operate / Event / Position / Market / BarGenerator / is_trading_time。

PyO3 绑定入口:czsc._native 的诞生

czsc._native由 crates/czsc-python/src/lib.rs 中的#[pymodule] fn _native聚合产出:依次注册czsc_core、czsc_utils、czsc_ta的 Python 表面,再通过inventory::collect!把czsc-signals贡献的信号描述符链入 cdylib,最后挂上CzscTrader / CzscSignals / generate_czsc_signals以及run_research / run_replay / run_optimize等研究入口。

打包侧由 pyproject.toml 的[tool.maturin]配置驱动:module-name = "czsc._native",manifest-path = "crates/czsc-python/Cargo.toml",python-source = "."会把纯 Python 的czsc/目录与编译好的扩展一起打进 wheel。

安装使用

注意:Python 版本必须 ≥ 3.10(README 明确声明;底层pyo3/pyo3-stub-gen0.22 同样要求 Python ≥ 3.10)。

方式一:PyPI 预编译版本(推荐)

pip install czsc -U

方式二:uv 安装(推荐开发环境)

uv pip install czsc

方式三:从源码构建(需要 Rust 工具链和 maturin)

# 安装 Rust:https://rustup.rs/ # 安装 maturin pip install maturin # 克隆并构建 git clone https://github.com/waditu/czsc.git cd czsc maturin develop --release

Rust 构建环境约束:当系统默认 Python 低于 3.10 时,请通过环境变量显式指定,否则cargo build/cargo test会在crates/czsc-python/build.rs提前 panic 并给出修复建议:

export PYO3_PYTHON=$(which python3.12) # 或任意 3.10+ 的解释器

用uv sync --extra dev走 UV 流程时,UV 会自动选择项目声明的 Python,不需要额外设置。

此外,pyproject.toml 还声明了 CLI 入口czsc = "czsc.cli:app",安装后可直接在命令行使用czsc命令。

快速开始:五条实战链路

1. 核心缠论分析:自动识别分型、笔、中枢

import czsc from czsc import CZSC, Freq, format_standard_kline from czsc.mock import generate_symbol_kines # 生成模拟 K 线数据 df = generate_symbol_kines('000001', '30分钟', '20240101', '20240601') # 转换为 RawBar 对象列表 bars = format_standard_kline(df, freq=Freq.F30) # 创建 CZSC 分析对象(自动识别分型、笔、中枢) czsc_obj = CZSC(bars) print(f"笔数量:{len(czsc_obj.bi_list)}") print(f"中枢数量:{len(czsc_obj.zs_list)}")

这里format_standard_kline是 DataFrame → RawBar 列表的格式转换入口(顶层定义于 czsc/_format_standard_kline.py,其 Rust 侧实现在czsc_core::analyze::utils)。CZSC对象即缠论核心分析器,负责在内部完成 K 线包含处理、分型识别、笔划分与中枢识别。

2. K 线合成与多级别分析

from czsc import BarGenerator, Freq # 使用 BarGenerator 进行 K 线合成 bg = BarGenerator(base_freq='1分钟', freqs=['5分钟', '30分钟', '日线']) for bar in raw_bars: bg.update(bar) # 获取各周期 K 线 bars_5m = bg.bars['5分钟'] bars_30m = bg.bars['30分钟']

BarGenerator由czsc_utils::bar_generator提供,是"由小周期合成大周期"的核心工具,配合多级别联立分析使用。

3. 信号生成:Rust 信号函数驱动

from czsc import generate_czsc_signals, get_signals_config, get_signals_freqs # 配置信号序列(使用 Rust 实现的信号函数) signals_seq = [ "czsc._native.signals.bar.bar_end_V230331", "czsc._native.signals.cxt.cxt_bi_status_V230101", ] # 解析信号所需的周期配置 freqs = get_signals_freqs(signals_seq) config = get_signals_config(signals_seq) # 生成信号序列 results = generate_czsc_signals(bars, signals_seq)

4. 权重回测

from czsc import WeightBacktest from czsc.mock import generate_klines_with_weights # 生成带权重的模拟数据 dfw = generate_klines_with_weights(seed=42) # 运行权重回测 wb = WeightBacktest(dfw, fee_rate=0.0002) print(wb.stats) # 回测统计汇总

WeightBacktest来自硬依赖wbt(Weight Back Test),是策略持仓权重回测引擎。

5. 策略研究:单品种回放与批量研究

from czsc import run_research, run_replay # 单品种回放 run_replay(bars, signals_seq, pos_seq, res_path='./results/') # 批量品种研究 run_research(symbols, signals_seq, pos_seq, res_path='./results/')

6. 缠论可视化与回测报告

# 缠论 K 线(多周期联立,自包含 HTML,离线即可打开) from czsc.utils.plotting.lightweight import plot_czsc, plot_czsc_trader html = plot_czsc(c, output="html") # 单周期 plot_czsc_trader(ct, output="html", path="trader.html") # 多周期 # 回测 HTML 报告:用 wbt.generate_backtest_report 一键产出 from wbt import generate_backtest_report generate_backtest_report(df=dfw, output_path="report.html", weight_type="ts")

核心 API 一览

类型符号说明
缠论对象CZSC,FX,BI,ZS缠论核心数据结构(Rust)
K线对象RawBar,NewBar,BarGeneratorK线与合成器(Rust)
枚举Freq,Mark,Direction,Operate方向/频率等枚举(Rust)
信号/事件Signal,Event,Position信号与持仓逻辑(Rust)
分析工具check_fx,check_bi,remove_include分型/笔校验工具(Rust)
TA算子顶层别名czsc.ema,czsc.sma,czsc.rolling_rank,czsc.boll_positions,czsc.ultimate_smoother技术指标算子顶层别名(Rust)
交易器CzscTrader,CzscSignals多级别交易决策(Rust)
信号生成generate_czsc_signals批量信号生成(Rust)
权重回测WeightBacktest权重序列回测(来自 wbt)
策略CzscStrategyBase,CzscJsonStrategy策略封装(Python)
模拟数据generate_symbol_kines测试用 K线数据(来自 wbt)
格式转换format_standard_klineDataFrame → RawBar 列表

这些符号在 czsc/init.py 中一次性静态 import(不再使用 lazy loading),顶层包导入后即可直接使用。

数据源连接器

czsc.connectors提供多个数据源适配器:

模块数据源说明
tq_connector.py天勤(TQSdk)期货实时/历史行情
ts_connector.pyTushareA股历史数据
ccxt_connector.pyCCXT数字货币交易所
local_data.py投研数据本地缓存CZSC 共享数据本地读取入口

可视化:统一 HTML 输出

项目已不再依赖 streamlit,可视化统一以 plotly + lightweight-charts 输出 HTML:

模块功能
czsc.utils.plotting.kline单周期 K 线 + 缠论结构(plotly Figure)
czsc.utils.plotting.weight权重时序图(plotly Figure)
czsc.utils.plotting.lightweightlightweight-charts 自包含 HTML,多周期联立 + 信号叠加
累计收益 / 回撤 / 月度热力图 / 综合回测概览改用wbt.generate_backtest_report或直接 plotly

如需 streamlit 集成,调用方自行pip install streamlit后用st.components.v1.html(plot_czsc(c, output='html'))嵌入即可。

源码深潜:信号体系的注册与分发

信号函数的模块化组织

czsc-signalscrate(见 crates/czsc-signals/src/lib.rs)把信号函数按语义分成 20 余个子模块,每个子模块用#[signal_module(category = "...")]过程宏包裹。类别分两档:

  • K 线类(kline):bar/cxt/tas/vol/pressure/obv/cvolp/ntmdk/kcatr/clv/ang/coo/byi/jcc/xl/zdy
  • 交易类(trader):cxt_trader/pos/cat/zdy_trader

每个#[signal(...)]函数在编译期被注册进全局inventory表,最终以SignalDescriptor形式聚合到czsc._native。

统一信号分发器

为避免给每个信号手写 PyO3 wrapper,crates/czsc-python/src/signals_dispatcher.rs 暴露了一个按名字查找的分发器:

  • call_signal(name, czsc, params):在给定CZSC实例上按名字调用 K 线类信号,返回Signal列表;
  • list_signal_names(category=None):列出已注册信号名,可按bar/cxt/tas/vol/pressure/obv/cvolp等前缀过滤;
  • get_signal_template(name)/get_signal_category(name):查询信号的参数模板与分类前缀。

该分发器同时挂载到czsc._native顶层、czsc._native.signals及按类别划分的子模块(czsc._native.signals.bar等),因此既支持from czsc._native.signals import call_signal,也支持from czsc._native.signals.bar import list_signal_names。依赖 trader 状态的信号则走CzscTrader.update_signals/CzscSignals.update_signals路径分发。

信号-事件-交易逻辑体系

项目定义了完整的信号-事件-交易量化交易逻辑体系:事件通过signals_all/signals_any/signals_not实现信号的逻辑组合(全部满足 / 任一满足 / 明确排除),事件再聚合为开仓、平仓的Position持仓规则。Rust 侧Event与Position的序列化、MD5 校验与落盘逻辑可在 crates/czsc-python/src/trader/api.rs 中看到——位置文件以 JSON 形式写出,包含opens/exits/interval/timeout/stop_loss/T0等字段,用于策略的持久化与批量优化。

生态依赖:分析 + 回测 + 落地 + 校验闭环

czsc 在权重回测、权重落地与 TA 算子一致性校验上依赖三个独立开源项目:

项目角色与 czsc 的关系
wbt策略持仓权重回测引擎(Weight Back Test)硬依赖。提供WeightBacktest / daily_performance / top_drawdowns / generate_backtest_report等;czsc.mock也转发自wbt.mock。czsc 顶层from czsc import WeightBacktest即来自此包。
wmr策略持仓权重管理系统(Weight Manager,DuckDB / ClickHouse 双后端)下游配套(非硬依赖)。wbt 负责"离线回测权重",wmr 负责"实盘 / 投研环境下权重的持久化、版本管理与查询"。
talib-rs纯 Rust 实现的 TA-Lib 替代库测试可选依赖。仅测试中用于对czsc._native.ta(EMA / SMA 等)做数值 parity 校验,确保 czsc 自研 TA 算子与 TA-Lib 行为一致,运行时代码不依赖。

简言之:wbt = 回测,wmr = 权重落地,talib-rs = TA 基准;czsc 自身专注缠论核心算法(Rust)与信号-事件-交易体系,其余环节通过这三个项目解耦协同。

开发环境搭建

# 使用 UV 管理依赖(推荐) uv sync --extra dev # 构建 Rust 扩展(开发模式) maturin develop # 运行测试 uv run pytest tests/ -v # 代码格式化 uv run ruff format czsc/ tests/ uv run ruff check czsc/ tests/

仓库的测试覆盖相当完整:Rust 侧每个模块(czsc-core/czsc-utils/czsc-signals/czsc-trader)都有对应单元测试,Python 侧则有tests/unit(Rust/Python 核心一致性校验)、tests/smoke、tests/integration与tests/cli等多层测试组织。

关键环境变量

变量说明默认值
CZSC_MIN_BI_LEN最小笔长度6
CZSC_MAX_BI_NUM最大笔数量50
CZSC_VERBOSE是否输出详细日志False

这三个环境变量的解析实现位于 czsc/envs.py:约定环境变量名同时接受全大写与全小写写法(大写优先),函数参数显式传值时优先级最高。其中CZSC_MIN_BI_LEN指的是去包含后的 K 线根数,int(float(...))的解析方式兼容"6"/"6.0"/6.5等多种输入;CZSC_VERBOSE则通过一个真值集合(1 / true / y / yes)宽松判定布尔值。

使用前必看

  • 1.0.X 版本核心算法已迁移到 Rust,与 0.9.X 版本不兼容,旧代码需按新 API 迁移;
  • 免责声明:项目开源仅用于技术交流;
  • 发现 Bug 时,建议先在仓库 issues 中报告。

缠论思想附录:不测而测的分类原则

项目作者在 README 中收录了一段缠论核心方法论,对理解 czsc 的设计哲学很有帮助:

真正的预测,就是不测而测。所有预测的基础,就是分类,把所有可能的情况进行完全分类……对于预测分类的唯一正确原则就是不进行任何排除,而是要严格分清每种情况的边界条件。任何的分类,其实都等价于一个分段函数,就是要把这分段函数的边界条件确定清楚。边界条件分段后,就要确定一旦发生哪种情况就如何操作,也就是把操作也同样给分段化了。然后,把所有情况交给市场本身,让市场自己去当下选择。

这段"确定分段边界、不预测只应对"的思想,正是 czsc 中信号(条件)→ 事件(逻辑组合)→ 交易(应对动作)体系的理论根基:每个信号函数表达一类可复用的边界条件,事件用signals_all / signals_any / signals_not精确刻画触发组合,Position则把"发生哪种情况就如何操作"固化为可回测、可落盘的规则。

  • 金融科技

【免费下载链接】czsc

缠中说禅技术分析工具;缠论;股票;期货;Quant;量化交易

项目地址:https://gitcode.com/gh_mirrors/cz/czsc
点击查看免费下载

相关推荐

上一篇:终极指南:如何快速解包网易游戏NPK文件,获取宝贵资源
下一篇:DLSS Swapper终极指南:轻松管理游戏DLSS版本,释放显卡真正性能

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询