Skip to main content

Python SDK for the CANSLIM Yanxiang cloud API

Project description

canslim-yanxiang

canslim-yanxiang is the lightweight Python SDK for the CANSLIM cloud service. It uses an API key and HTTPS to call /api/sdk/v1. Database credentials, membership checks, indicator calculations, and stock screening stay on the server; an SDK user never connects to the production database directly.

The current SDK includes L1 market and financial queries, L2-Class1 stock analysis, L2-Class2 industry analysis, L2-Class3 CANSLIM card indicators, L2-Class4 rule-based stock screening, and the first L2-Class5 market-analysis aggregate.

Install

Install the production package from PyPI:

python -m pip install --upgrade canslim-yanxiang

Verify the installation:

python -c "import canslim_yanxiang as cs; print(cs.__version__)"

On macOS (Intel or Apple Silicon), use Python 3.10 or newer:

python3 -m pip install --upgrade canslim-yanxiang
python3 -c "import canslim_yanxiang as cs; print(cs.__version__)"

The SDK is platform-independent and does not include B-XTrender.

For repository development:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e .

Start the Tkinter desktop screener from a repository checkout:

$env:CANSLIM_API_BASE_URL = "http://127.0.0.1:5000/api/sdk/v1"
python -m canslim_yanxiang.gui

After an editable install, the equivalent command is canslim-screener-gui. The desktop application reads the Chinese indicator names from the server registry, stores rule plans locally without the API key, and uses the same Class4, Class5, and L3 endpoints as the SDK.

Configure

Set the cloud endpoint and API key in the current PowerShell session:

$env:CANSLIM_API_BASE_URL = "https://canslim-lab.com/api/sdk/v1"
$env:CANSLIM_API_KEY = "csk_live_xxx"

Configuration can also be supplied in Python:

import canslim_yanxiang as cs

cs.configure(
    base_url="https://your-domain.example/api/sdk/v1",
    api_key="csk_live_xxx",
)

The API key is never written into the package. The server validates membership level and account expiry for every call.

L1 Queries

import canslim_yanxiang as cs

stocks = cs.stock_search("600519")
info = cs.stock_basic_info("600519")
latest = cs.stock_price_latest("600519")
prices = cs.stock_price_history("600519", start="2025-01-01")
financials = cs.stock_financials("600519", period="quarterly", limit=20)

List endpoints return pandas DataFrame objects by default and single-object endpoints return dictionaries. Pass raw=True to receive the complete response envelope.

L2 Analysis

L2-Class1 stock analysis:

current = cs.eps_current_quarter_score("600519")
eps = cs.eps_growth_history("600519", mode="quarter")
stock_score = cs.stock_rps_score("600519")       # defaults to rps_240
industry_score = cs.industry_rps_score("600519") # defaults to rps_120
industry = cs.stock_industry("600519")

L2-Class2 industry analysis:

industries = cs.industry_list()
basic = cs.industry_basic_info("340500")
members = cs.industry_constituents("340500")
fundamental = cs.industry_fundamental_analysis(top_n=20)
strength = cs.industry_strength_history("340500")
member_rps = cs.industry_constituent_rps_ranking("340500")

L2-Class3 CANSLIM card analysis:

c = cs.c_card("600519", report_date="2026-03-31")
a = cs.a_card("600519", report_date="2026-03-31")
n = cs.n_card("600519")
fresh_breakout = cs.n_fresh_resistance_breakout(
    "600519",
    lookback=240,
)
s = cs.s_card("600519", report_date="2026-03-31")
l = cs.l_card("600519")
i = cs.i_card("600519", report_date="2026-03-31")
m = cs.m_card()

# Nine-index consensus used by later L3 market gates.
market = cs.market_state_aggregate()

L3 industry-rotation opportunities default to evaluating industries without a market gate:

opportunities = cs.industry_rotation_opportunities(
    rps_top_n=30,
    eps_top_m=30,
    output_top_n=5,
    stocks_per_industry=10,
    market_gate="off",
)

Atomic indicators are also callable individually and can be registered in L2-Class4 screening rules. See the contracts under docs/ for stable parameters and response fields.

Six-Rule Screen

Run the frozen C/A/N/S/L/I rule set after installation:

python -m canslim_yanxiang.screen_six_rules

Use --rules to select a subset. The default intersection mode requires every selected rule, so this example only returns stocks that satisfy C, A, L and I:

python -m canslim_yanxiang.screen_six_rules --rules C A L I

Comma-separated input is also accepted. To return stocks matching at least three of those four selected rules:

python -m canslim_yanxiang.screen_six_rules `
  --rules C,A,L,I `
  --combine at_least `
  --min-matched-rules 3

Dates and output location can be fixed explicitly:

python -m canslim_yanxiang.screen_six_rules `
  --report-date 2026-03-31 `
  --as-of-date 2026-07-17 `
  --output .\results\six_rules.csv

The command writes a CSV and a matching .meta.json file. Each result contains matched_rule_count and matched_rules, so the selected rule names are visible for every stock. Because the current screening API is synchronous, the percentage shown while waiting is an elapsed-time estimate. Final counts and results always come from the cloud response.

Repository Boundaries

  • This repository contains the installable SDK and archived backtest CSV data.
  • The production backend owns API keys, permissions, quotas, logs, database access, and job execution.
  • The offline project owns heavy recomputation, historical backfills, and publishable data generation.
  • backtest_csv/ is not included in the SDK wheel. It is deployed separately as read-only cloud data when required by the backtest service.

See SDK framework and cloud deployment for the complete architecture.

Development Verification

python -m unittest discover -s tests -v
python -m build
python -m twine check dist/*

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

canslim_yanxiang-0.2.0.tar.gz (68.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

canslim_yanxiang-0.2.0-py3-none-any.whl (71.4 kB view details)

Uploaded Python 3

File details

Details for the file canslim_yanxiang-0.2.0.tar.gz.

File metadata

  • Download URL: canslim_yanxiang-0.2.0.tar.gz
  • Upload date:
  • Size: 68.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for canslim_yanxiang-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dbac69f5192863776dd74e6534a124c4458717c36302cc6ce9c34c604fd83c69
MD5 0f2fa7965c6d415d2b9c1e78a50dfc75
BLAKE2b-256 d2f42d1aa3c3cf3d3a8bf7db216465cd56b826ccf6f2e256152b8ac1f82815d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for canslim_yanxiang-0.2.0.tar.gz:

Publisher: publish-pypi.yml on johnhowl/canslim_lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file canslim_yanxiang-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for canslim_yanxiang-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b612451253d0935cc0ae2843d0333abec6b844c3f818204686b0c38e0700a36f
MD5 8b302d90d31b844de4fb72f76f4641a1
BLAKE2b-256 bf739be24e61ec03874b547165d0cfde887076e8e3c749c6e4bd8d6e809f3070

See more details on using hashes here.

Provenance

The following attestation bundles were made for canslim_yanxiang-0.2.0-py3-none-any.whl:

Publisher: publish-pypi.yml on johnhowl/canslim_lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page