Model or dataset
shy3130/tick-stock-panel avatar
shy3130/tick-stock-panel

tick-stock-panel: a self-hosted A-share screener, monitor and backtest workbench

TSP自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | LLM能力驱使策略定制+个股分析+复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人开源 ,非第三方官方项目

5,346 stars1,294 forksPythonMIT

At a glance

What is it?
TSP is a Python and React quant workbench for China's A-share market, shipped as a single Docker service with a Polars scan engine, a plugin data-source layer and optional LLM assistance. It is a research tool, not a trading terminal, and the README says so plainly.
Who is it for?
Adopt tick-stock-panel if you already write Python, want a local A-share screener with backtesting and monitoring in one container, and accept that data acquisition is your problem. Do not adopt it if you expect a ready market feed, a brokerage connection, or a tool that tells you what to buy; the README explicitly refuses AI stock picking and limit-up prediction, and it warns beginners away.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What tick-stock-panel solves, and who it is built for

The gap this project targets is the one between a spreadsheet and a full trading terminal. An A-share researcher who wants to screen the whole market on a custom signal, watch a handful of names intraday, and check whether the signal would have survived a backtest normally ends up stitching three tools together. TSP puts screening, monitoring and backtesting behind one web UI that runs on your own machine.

The README is unusually direct about the audience. It states the project is for learning and research, forbids commercial use, and carries a warning that beginners should stay away: the project is meant to offer ideas and an approach for local quant work, not to serve as investment or quote-watching software. It also lists what it refuses to build, namely a Tonghuashun or Tongdaxin competitor and any built-in AI stock recommendation or limit-up prediction. If you want a product that suggests trades, this is the wrong repository, and it says so before you install anything.

The practical fit is a developer or quant hobbyist who already has Python on the machine, is comfortable reading a Dockerfile, and is willing to supply data access. The repository is a personal open-source project, not affiliated with any official product, and the last push was on 2026-09-09.

Capability routing: how data sources plug into the engine

The architecture is a single FastAPI service that also serves the built frontend bundle, with Polars as the compute engine and DuckDB and Parquet in the storage path. The docker-compose.yml comment describes this as a Phase 0 single-service design: FastAPI starts, runs the API, and hosts the frontend dist.

The part worth understanding before adopting is the data layer. TSP does not assume one vendor. Datasets are separated by kind (daily K, adjusted prices, real-time, minute bars, order book, financials) and each source declares which capabilities it can serve; the router then picks a source per dataset. The README calls this capability routing and points to docs/custom-data-source.md. Three plugins ship in the tree: TickFlow, fuyao and stock-sdk. The Dockerfile keeps stock-sdk out of the default build, because it scrapes third-party finance sites, and enabling it requires an explicit build argument with the compliance risk placed on the user.

A second mechanism is the indicator pipeline. The README describes 68 indicator and signal columns (MA, EMA, MACD, RSI, KDJ, Bollinger, volume ratio and others) computed in one table scan and written to an enriched Parquet file. That materialised file is what the screener and backtest read, which is why the README can describe screening as a millisecond-scale scan rather than a per-request computation. The trade-off is that the enriched table is only as fresh as the last pipeline run.

Running tick-stock-panel with Docker Compose

The repository ships a docker-compose.yml, a Dockerfile and a .env.example. The compose file builds from the Dockerfile, names the container TickFlow_Stock_Panel, mounts ./data into /app/data, mounts tiers.yaml read-only, and publishes port 3018 by default. The build takes two arguments you may need: BACKEND_EXTRAS for optional Python dependencies, and CODEX_CLI_VERSION, which defaults to 0.144.3.

Start by copying the environment template, then bring the stack up.

bash
cp .env.example .env
docker compose up --build -d

After the build finishes, the service listens on the host and port given by HOST and PORT in .env, both of which the compose file reads with defaults of 0.0.0.0 and 3018. Open http://localhost:3018 in a browser. The .env.example notes that if AUTH_PASSWORD is set before the first start, that value becomes the access password; it is read only once, and later changes go through the page UI.

The data source key is the one setting most people will touch first. Leaving it empty is a valid configuration.

bash
# .env
TICKFLOW_API_KEY=
AI_PROVIDER=openai_compat
AI_BASE_URL=https://api.deepseek.com/v1
AI_API_KEY=
AI_MODEL=deepseek-chat

With TICKFLOW_API_KEY blank, the .env.example states the project falls back to a free trial mode that can only retrieve historical daily K data for a single stock. That is enough to walk the UI and run a small backtest, but not enough for market-wide screening. AI variables are optional too: leaving AI_API_KEY empty skips the LLM features rather than breaking startup.

One detail in the compose file deserves attention. It forces DATA_DIR=/app/data inside the container regardless of what .env says, because a relative ./data value would resolve against the wrong working directory and data would vanish on every rebuild. If you run the backend outside Docker, that protection does not apply to you.

Where tick-stock-panel breaks down

The largest limitation is stated by the project itself: it ships no market data. Every price you screen, monitor or backtest comes from a source you configure, and the default free tier covers historical daily bars for one stock at a time. Market-wide screening and intraday monitoring both require a working source with the right capability declared. If your source is rate-limited, slow, or blocked from your network, the workbench has nothing to chew on and no fallback appears in the documentation.

The second constraint is hardware and platform. The .env.example exposes BACKEND_EXTRAS and suggests legacy-cpu on older CPUs without AVX2 or FMA support, which tells you the default build assumes a modern x86-64 vector instruction set. The Dockerfile also defaults USE_CN_MIRROR to 1, pointing npm at registry.npmmirror.com and pip at the Tsinghua index with an Aliyun fallback. Outside mainland China you will likely want to override those build arguments, and the Dockerfile comments treat mirror use as the normal path rather than the exception.

Third, the project is honest about being unfinished in places. Several pages carry a Beta label in the README, including Stock Analysis and Review, and the pre-market auction scan is described as a pending collection task. The README also does not document any rollback procedure, migration path or schema versioning for the enriched Parquet data, so an upgrade that changes indicator columns is something you would discover rather than plan for.

How it differs from vectorbt and backtrader

If your goal is purely backtesting, vectorbt and backtrader are the established Python choices, and the difference in approach is real. Both are libraries: you write a script, feed it arrays or a data feed object, and you own the data plumbing, the scheduling and the result storage. Neither ships a web UI, a data-source router, an intraday monitor or a screening page. TSP inverts that. It is an application with a fixed set of pages and a plugin contract for data, so you get the UI and the pipeline for free and give up the freedom to restructure the execution model.

The same contrast applies to the LLM features. TSP wires an OpenAI-compatible endpoint (deepseek-chat by default, or a local ollama provider) into specific tasks: generating strategies, four-dimension analysis of a single stock, post-close market review, and generating custom signals. The README explicitly excludes AI stock recommendation, so the model is positioned as a research assistant that reads the data you already have, not as a signal source. If you want an LLM to produce trade calls, neither TSP nor the library ecosystem will give you that out of the box, and TSP refuses by design.

A closer comparison is a personal notebook stack: Jupyter plus Polars plus a scheduler plus a Telegram bot. That stack is more flexible and has no container to maintain. TSP's advantage is that the pieces are already wired, and its cost is that you inherit someone else's page structure and plugin interface.

Upgrade cost, licence terms and what to verify first

tick-stock-panel is MIT licensed, and the LICENSE file sits at the repository root. The MIT terms cover the code. They do not cover the market data you attach to it, and that distinction matters here more than in most projects: the Dockerfile comments flag that the optional stock-sdk plugin scrapes third-party finance sites without authorisation, which may breach their terms of service and touch exchange quote copyright. That plugin is disabled by default and enabling it is a deliberate build-arg decision. Whether your chosen source permits your use is a question for your own reading of its terms, not something the MIT licence answers.

Upgrading means rebuilding the image, since the frontend is compiled in stage one and copied into the backend image. Because ./data is a host mount, your Parquet files and enriched tables survive a rebuild, but nothing in the README describes a migration step for the data layout. The pragmatic sequence is to back up ./data before pulling a new revision, and to expect that a change in the indicator column set will require a full pipeline re-run rather than an incremental patch.

Before you invest time, verify three things: that at least one configured source returns market-wide daily bars rather than the single-stock free tier, that your CPU reports AVX2 and FMA so you do not need the legacy-cpu extra, and that the pages you actually need are not the ones marked Beta. The repository has no releases, so there is no versioned changelog to read between commits.

Editorial conclusion

Adopt tick-stock-panel if you already write Python, want a local A-share screener with backtesting and monitoring in one container, and accept that data acquisition is your problem. Do not adopt it if you expect a ready market feed, a brokerage connection, or a tool that tells you what to buy; the README explicitly refuses AI stock picking and limit-up prediction, and it warns beginners away. Before committing, check which data sources you can actually reach from your network, confirm your CPU supports AVX2 and FMA (the .env.example offers a legacy-cpu extra for machines that do not), and read docs/custom-data-source.md to see how much work a new source really is.

Frequently asked questions

What does tick mean in stocks?

The repository does not define the term, and its name refers to the TickFlow data source rather than to a tick-by-tick market feed. The project works with daily K, adjusted prices, real-time, minute bars, order book and financial datasets, so it is not a tick-data tool.

How many pips is 1 tick?

Not covered. The README describes A-share daily and minute data, screening, backtesting and monitoring, and does not discuss pips, forex conventions or tick-to-pip conversion.

How much is 1 tick in stocks?

Not covered. The project does not document minimum price increments or tick values; its documented datasets are daily K, adjusted prices, real-time, minute, order book and financials.

Are tick charts worth it?

The repository does not build tick charts. Its charting and analysis pages cover daily K lines, key price levels, concept and industry rotation matrices, and limit-up ladder statistics, so a tick-chart user would need a different tool.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. shy3130/tick-stock-panel on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/shy3130-tick-stock-panel.svg)](https://hysenlabs.com/projects/shy3130-tick-stock-panel)