mrkeyoor.com_
Sun 27 Sept 19:24 UTC
Dataevaluationupdated 26 Aug 2026

czsc review

CZSC is a Chinese-first Python and Rust toolkit for applying Chan theory to market charts, building signals, and researching trading strategies. No official English documentation is included in the repository, although the README links to a generated DeepWiki reference. It turns candlestick data into Chan structures, multi-timeframe signals, positions, visualizations, and backtest inputs.

+24stars / 7d
Verdict

Our CZSC run installed 57 packages in 753 seconds and passed 516 of 517 executed tests, with one datetime-precision assertion failing. Choose it when Chan theory and Chinese documentation already fit the research team. A general backtester is easier to learn and staff if you do not need CZSC's specific market structures.

We ran it

Lab card: what happened when we ran czscScreenshot of czsc (github.com/waditu/czsc)
Install✓ · 753s57 packages · 748 MB
Build✓ · 7s
Tests✗ · 29s516 passed · 1 failed · 6 skipped of 517 (pytest)
Known vulns0(pip-audit)
Repo626 files~69,317 lines of source · 3.9 MB · 4 CI workflows · tests dir

Answers from our run

Does czsc build from source?

Dependencies installed in 753 seconds (57 packages), and the build succeeded in 7 seconds. We cloned commit 701e480 into a clean Debian container with 3 CPUs and no project-specific setup.

Do czsc's tests pass?

Not all of them: 516 of 517 passed and 1 failed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does czsc have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use czsc?

English-only developers who need first-party tutorials and reference material: the README, public API guide, changelog, examples, issue discussion, and linked community resources are primarily Chinese.

What are the alternatives to czsc?

vectorbt, Backtrader, Zipline Reloaded. Our CZSC run installed 57 packages in 753 seconds and passed 516 of 517 executed tests, with one datetime-precision assertion failing.

Setup3/5753-second install; build passed and one datetime test failed
Docs3/5Detailed Chinese references, but no official English documentation
Community4/5Pushed August 16 with 8 combined issues and pull requests
Maturity3/5Established project with a newly incompatible Rust-based 1.0 core

Who it’s for

Chinese-speaking quantitative researchers who already understand or want to study Chan theory.
Python users who need reusable fractal, stroke, central-zone, signal, event, and position objects.
Strategy researchers working across Chinese equities, futures, or crypto data sources.
Performance-conscious developers comfortable using a Python API backed by Rust.

Who it’s NOT for

English-only developers who need first-party tutorials and reference material: the README, public API guide, changelog, examples, issue discussion, and linked community resources are primarily Chinese.
Existing CZSC 0.9 users expecting a routine upgrade: the README says 1.0 moved the core and signal functions to Rust and is incompatible with older code.
Teams that require a pure-Python implementation they can step through or patch: the 1.0 core is a PyO3 extension, and source builds require Rust plus maturin.
Researchers expecting market data to be bundled: connectors target TQSdk, Tushare, CCXT, and local caches, while AKShare support remains an open request.
Anyone seeking a validated profit system or brokerage execution product: the README frames the project as technical exchange, and its analysis and backtests still require independent data, cost, bias, and live-trading validation.

Setup reality

Our install succeeded in 753 seconds, adding 57 packages and using 748 MB. The build passed in 7 seconds. Tests exited 1 after 29 seconds: 516 passed, 1 failed, and 6 were skipped out of 517. Pip-audit found 0 known vulnerabilities.

Useful research needs correctly formatted candlestick data. TQSdk, Tushare, CCXT, and local-cache connectors have their own dependencies, credentials, limits, and symbol rules. The PyPI wheel hides Rust, while a source build needs Rust, maturin, and Python 3.10 or newer.

Version 1.0 moved the core to a PyO3 extension and is incompatible with 0.9. The failed test expected nanosecond datetimes but received microsecond datetimes; the log does not identify why. Migration may take longer than installation because imports, signal paths, and several modules changed.

Chan theory determines whether CZSC fits

CZSC implements Chan theory, a Chinese framework for breaking market bars into structures such as fractals, strokes, and central zones, then combining them across timeframes. The package turns that vocabulary into objects, more than 220 signal functions, logical events, positions, and a multi-level trader. Researchers can generate signals, replay a strategy, and pass position weights into a backtest.

Shared types cover raw bars, processed bars, frequency, direction, signals, events, and positions. A BarGenerator creates larger intervals from base bars, while CzscSignals and CzscTrader coordinate analysis across frequencies. HTML charts can overlay structures and signal points. If the team does not use Chan theory, most of this specialized API is unnecessary.

Version 1.0 moved the core into 9 Rust crates

Starting with 1.0, core algorithms moved from Python to Rust and are exposed through czsc._native using PyO3. Nine Rust crates cover objects, signals, trading, technical-analysis operators, macros, utilities, and Python bindings. Python remains the user-facing layer for pandas and Polars data, connectors, plotting, and research helpers.

The compatibility cost is explicit. The README says 1.0 is incompatible with 0.9, and the changelog lists removed namespaces, functions, Streamlit components, report builders, and renamed connector paths. Python 3.10 is now the minimum. Existing users should inventory imports and signal identifiers, then compare results on frozen data before replacing an older environment.

Contributors face another cost. Signal functions live in Rust modules and the old Python core has no fallback. Debugging a native extension or changing calculations requires Rust and maturin. Version 1.0.1 added structural-analysis functions and CZSC.zs_list after issue 343 reported that the README example failed on release candidate 8. Pin the package version used for research.

What happened when we ran it

Our sandbox installed commit 701e480 in 753 seconds, adding 57 packages and occupying 748 MB. The build completed in 7 seconds. We used an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, and no secrets. Pip-audit found 0 known vulnerabilities in the installed environment.

Pytest exited 1 after 29 seconds. It reported 516 passed, 1 failed, and 6 skipped out of 517. test_make_it_daily expected the dt column to use datetime64[ns], but received datetime64[us]. The log shows a precision mismatch; it does not identify whether CZSC, pandas, Python 3.12, or the test assumption caused it.

The 3.9 MB checkout contained 626 files and about 69,317 source lines. It had a tests directory and 4 CI workflow files, but no Dockerfile. Installation and compilation worked. One assertion in a trading utility kept the complete suite from passing, which matters if daily conversion feeds later calculations.

Market data and provider credentials stay outside CZSC

Prebuilt PyPI wheels hide the Rust toolchain on supported platforms. A source build needs Rust and maturin, plus an explicit Python 3.10-or-newer interpreter when the system default is older. The numerical and data stack includes pandas, Polars, SciPy, statsmodels, Plotly, and wbt, which supplies weight backtesting and reports.

Market data remains the user's responsibility. Connectors cover TQSdk for futures, Tushare for Chinese equities, CCXT for crypto exchanges, and a local cache. Each provider has its own dependencies, credentials, limits, and symbol conventions. Issue 346 asks for AKShare support, so that connector was not part of the documented 1.0 surface. Mock data teaches the API; it says nothing about a strategy's returns.

The ecosystem split is sensible once understood. CZSC handles analysis and signals, wbt performs offline weight backtests, and the separate wmr project stores weights for downstream use. A team still has to validate timestamps, corporate actions, fees, slippage, leakage, and execution assumptions around those pieces.

Chinese documentation is detailed; official English docs are absent

The README covers architecture, installation, examples, the public API, connectors, plotting, development commands, and ecosystem dependencies. Linked Feishu pages and Bilibili videos add case studies. Nearly all first-party material is Chinese, including many market terms and community discussions.

There is no official English README in the repository. A linked DeepWiki page can help an English-speaking developer explore the code, but it is generated documentation rather than the project's maintained contract. International teams should expect translation work and keep a shared glossary if signals and enum values enter production code.

The LICENSE file says Apache 2.0, although GitHub metadata returned no detected SPDX identifier. That mismatch is worth recording during procurement, then resolving by reviewing the actual file and package metadata.

An August 16 push follows the v1.0.1 migration

GitHub recorded the last push on August 16, 2026, and v1.0.1 was released on August 9. The repository had 5,922 stars and 8 open issues and pull requests combined when fetched. That is current activity around a project with years of history, but the Rust-backed public API is still young.

CZSC belongs on the shortlist for a Chinese-speaking researcher committed to Chan theory. Our 516 passing tests show considerable exercised behavior, while the remaining datetime assertion and the 0.9-to-1.0 break argue for pinned environments and output comparisons. For broad technical analysis with English-first documentation, vectorbt or an event-driven backtester asks less of the team.

Alternatives

ProjectWhat it isPick it when
vectorbtA NumPy and pandas-centered framework for fast, vectorized strategy research.pick this instead when broad indicator testing, parameter sweeps, and English documentation matter more than Chan-specific structures.
BacktraderA widely used Python engine for event-driven backtesting and trading strategies.pick this instead when you want a general strategy engine with feeds, brokers, and orders rather than a Chan-analysis toolkit.
Zipline ReloadedA maintained continuation of Zipline for event-driven quantitative backtests.pick this instead when portfolio simulation and a familiar general quant API take priority over CZSC's signal vocabulary.

What people are saying

  1. [github-trending] waditu/czsc

Sources

  1. CZSC README
  2. CZSC changelog
  3. CZSC public API reference
  4. CZSC 1.0.1 release
  5. Missing zs_list report on release candidate 8
  6. AKShare connector request

More data reviews

data-formulator · toasty · gfwlist · simdjson · go-stock · sqlitebrowser · the whole board →