- 金融科技
【免费下载链接】czsc
缠中说禅技术分析工具;缠论;股票;期货;Quant;量化交易
导读:本文围绕 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 | 职责 |
|---|---|
czsc | facade crate,把整个 Rust workspace 公共 API 聚合 re-export 到一个名字下 |
czsc-core | 缠论核心分析器:FX / BI / ZS / CZSC 及全部对象类型 |
czsc-utils | K 线合成器、频率数据、交易时间等工具 |
czsc-ta | 纯 Rust 技术分析算子(ema / sma / boll 等) |
czsc-signals | 220+ 信号函数库,按 20 余个模块组织 |
czsc-trader | 交易引擎、信号编译、参数优化 |
czsc-signal-macros | #[signal_module]过程宏,负责信号注册 |
czsc-derive | 派生宏与错误链支持 |
czsc-python | PyO3 绑定入口,产出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::analyze | czsc_core::analyze |
czsc::objects::* | czsc_core::objects的所有数据类型 |
czsc::ta | czsc_ta::pure纯算子 |
czsc::bar_generator | czsc_utils::bar_generator |
czsc::signals | czsc_signals |
czsc::trader | czsc_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 --releaseRust 构建环境约束:当系统默认 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,BarGenerator | K线与合成器(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_kline | DataFrame → RawBar 列表 |
这些符号在 czsc/init.py 中一次性静态 import(不再使用 lazy loading),顶层包导入后即可直接使用。
数据源连接器
czsc.connectors提供多个数据源适配器:
| 模块 | 数据源 | 说明 |
|---|---|---|
tq_connector.py | 天勤(TQSdk) | 期货实时/历史行情 |
ts_connector.py | Tushare | A股历史数据 |
ccxt_connector.py | CCXT | 数字货币交易所 |
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.lightweight | lightweight-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;量化交易
相关推荐
CZSC缠论量化框架完整指南:从零掌握缠中说禅技术分析
CZSC缠论量化框架完整指南:从零掌握缠中说禅技术分析 想要在量化交易领域快速提升技术分析能力吗?CZSC缠论量化框架正是你需要的终极解决方案!这个基于缠中说禅
金融科技【亲测免费】 czsc:一款强大的缠中说禅技术分析工具
czsc:一款强大的缠中说禅技术分析工具 在当前的量化交易领域,技术分析工具种类繁多,但能够准确捕捉市场脉动,提供高效决策支持的却为数不多。今天,我要为大家介绍
金融科技5个关键步骤掌握缠中说禅量化分析工具
czsc是一款基于缠中说禅理论构建的Python量化分析工具,它通过自动识别分型、笔等核心概念,帮助投资者构建完整的信号 因子 事件 交易决策体系。无论你是量化
金融科技
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考