Skip to main content

Developer toolkit for CANSLIM-style investors (CLI, Gradio GUI, MCP)

Project description

canswim

Developer toolkit for CANSLIM investment style practitioners

NOT FINANCIAL OR INVESTMENT ADVICE. USE AT YOUR OWN RISK.

For a brief introduction read this blog post.

Here is also a video recording of a CANSWIM presentation for the Python Austin Meetup.

Documentation

Published site: https://ivelin.github.io/canswim/ (built from main / docs/ via GitHub Actions — not the legacy website branch).

Doc Contents
docs/cli.md CLI tasks, recipes, env vars
docs/run_triggers.md Get market data / run forecast (CLI · GUI · MCP)
docs/mcp.md MCP server (tools, opt-in writes)
docs/data_store.md Parquet (SoT) vs DuckDB (search/UI)
AGENTS.md CI, merge rules, docs DoD for agents

Flags: python -m canswim -h is the source of truth. Local site preview: pip install mkdocs-material && mkdocs serve.

Setup

pip install canswim
# pin a release: pip install canswim==0.0.20260714

# dev checkout
pip install -e ".[dev]"

# recommended for this repo
conda activate canswim

See CHANGELOG.md for release notes. Docs: https://ivelin.github.io/canswim/.

Local-first market data

By default gatherdata does not download or upload the full Hugging Face dataset. That HF snapshot step is slow and was a common reason the CLI “hung”. Instead:

  1. Use local parquet under data/data-3rd-party/ (created/updated by gather).
  2. Refresh from FMP / yfinance APIs as needed.
  3. Resolve ticker universes from checked-in symbol_lists/*.csv.
# full-universe local gather (no HF dataset sync)
hfhub_sync=False python -m canswim gatherdata

# scoped list via --tickers (same pipeline as Dashboard Run + MCP gather_tickers)
hfhub_sync=False python -m canswim gatherdata --tickers "AAPL, MSFT"
Env Default Meaning
hfhub_sync False Full dataset/model sync off
SYNC_SYMBOL_LISTS False If True, fetch only light CSVs from the HF dataset once
YFINANCE_USE_CACHE False Avoid multi‑GB SQLite cache hang
MCP_ALLOW_RUNS unset Enable MCP gather/forecast tools (CLI/GUI do not need this)

Train/forecast skip tickers without complete ground-truth OHLCV (no synthetic price fill). Details: docs/data_store.md, docs/cli.md.

Get market data & run forecasts (CLI · GUI · MCP)

Two separate steps, same backend (canswim.run_triggers). Details: docs/run_triggers.md.

Get market data Run a forecast Check start date
CLI gatherdata --tickers "…" forecast --tickers "…" [date] [--dry_run] resolve_start
GUI Refresh data & forecasts / Update market data Run forecast Check start date
MCP gather_tickers* forecast_tickers* resolve_forecast_start

*MCP write tools need MCP_ALLOW_RUNS=1. Full MCP guide: docs/mcp.md.

Scoped get-market-data uses ~2 years of history, fundamentals (unless --no_covariates), and skips downloads when local files are already complete. Forecasts stop if data is incomplete (no invented prices).

python -m canswim gatherdata --tickers "AAPL, MSFT"
python -m canswim resolve_start --forecast_start_date 2026-03-05
python -m canswim forecast --tickers AAPL --forecast_start_date 2026-03-05 --dry_run
python -m canswim dashboard --same_data True

Full recipes: docs/cli.md.

Dashboard (GUI)

python -m canswim dashboard --same_data True
Tab Purpose
Charts Price history + forecast bands for a symbol
Scans Filter forecasts by as-of date, reward, risk, confidence
Run Refresh data & forecasts (primary) · more options for gather-only / forecast-only / Rebuild Charts database
Advanced Queries Read-only SQL against the search DB

Sample screenshots

Charts

Scans

Run

(If images are missing in a fork, open the dashboard locally and refresh captures under docs/images/ — same PR as any UI change.)

Historical example chart:

example forecast

Command line (quick)

python -m canswim -h

Main tasks: dashboard, gatherdata, forecast, resolve_start, mcp, train, modelsearch, downloaddata, uploaddata.

Flag Used by Meaning
--tickers gatherdata, forecast Scoped run via shared orchestration
--forecast_start_date forecast, resolve_start Origin date (week-aligned for scoped runs)
--dry_run forecast --tickers Resolve start + validate only
--no_covariates gatherdata --tickers Prices only (skip fundamentals)
--same_data dashboard Reuse DuckDB search DB
--new_model train Fresh model vs continue

docs/cli.md

MCP server (quick)

Read-only by default. Write tools need MCP_ALLOW_RUNS=1.

python -m canswim mcp
MCP_ALLOW_RUNS=1 python -m canswim mcp

docs/mcp.md for tools, client config, and prerequisites.

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

canswim-0.0.20260714.tar.gz (125.0 kB view details)

Uploaded Source

Built Distribution

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

canswim-0.0.20260714-py3-none-any.whl (133.3 kB view details)

Uploaded Python 3

File details

Details for the file canswim-0.0.20260714.tar.gz.

File metadata

  • Download URL: canswim-0.0.20260714.tar.gz
  • Upload date:
  • Size: 125.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for canswim-0.0.20260714.tar.gz
Algorithm Hash digest
SHA256 4d0fd03a21ced490e6a0272c38f82d19295bd92cb7a1c588d8558c7dd20eff52
MD5 c83aa241b0d7f33c8a5554f48c85cc1b
BLAKE2b-256 30c9aac165a9593b5766e3fd597a37eda673f326906419c8743f7483f4324d48

See more details on using hashes here.

File details

Details for the file canswim-0.0.20260714-py3-none-any.whl.

File metadata

  • Download URL: canswim-0.0.20260714-py3-none-any.whl
  • Upload date:
  • Size: 133.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for canswim-0.0.20260714-py3-none-any.whl
Algorithm Hash digest
SHA256 d7057a11596b27fefadf8f74c3041a7d1699f03bce8fd15a518d096d307221a6
MD5 52f57fe878620c43b95f53a039dc38dd
BLAKE2b-256 b9535249f1a8e4098f0f9a7336b5ac0461057f66d0a969d37c5a247b730afd0d

See more details on using hashes here.

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