NiuOne: a local-first A-share research desk with simulated trading built in
An intelligent market research workspace centered on simulated A-share trading, integrating market data aggregation, strategy research, and portfolio tracking | 一套以 A 股模拟交易为核心,融合行情聚合、策略研究与账户跟踪的智能市场研究工作台。
At a glance
- What is it?
- NiuOne, 牛牛1号, is a self-hosted workspace that aggregates A-share quotes, capital flows, sector themes and financial news into one web dashboard, layers strategy research and an LLM-assisted decision loop on top, and executes nothing: simulated accounts only, no broker interfaces, no real money. Apache-2.0, with English and Chinese READMEs.
- Who is it for?
- NiuOne fits individual A-share researchers who want aggregation, strategy notes, model-assisted analysis and paper trading in one self-hosted workspace, with every byte of account state, logs and configuration under their own management and no broker anywhere in the loop. It does not fit anyone who wants live trading execution, which the project explicitly does not do, or anyone unwilling to run and update a Python plus Vue stack themselves.
- Can I use it commercially?
- Yes. Apache-2.0 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 22 days 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
A research cockpit that never touches real money
NiuOne is a local-first market research and simulated trading system aimed primarily at the A-share market, with overnight US market information folded in. It concentrates quotes, news, strategy and a simulated account into one web dashboard, and can bring a large language model in to organize information and generate trading judgements under rules the user sets.
The boundary is stated early and repeated: the system operates simulated accounts only, does not connect to broker trading interfaces, and never touches real funds. The public demo at niuone.cn carries a disclaimer that the page is for personal research and information display, constitutes no investment advice or stock recommendation service, promises no returns, manages no client money and charges no recommendation fees. For a project in this domain, that posture is not decoration; it is the difference between a research tool and an unlicensed advisory service, and the repository keeps the line visible.
Who it is for: individual A-share researchers who want their data collection, strategy notes and paper trading in one private place, on their own machine or server, with configuration and research data under their own management.
What the dashboard actually shows
The workspace is organized into pages with distinct jobs, and the page table in the README doubles as a feature map. A mainline page pairs today's theme strength with cross-day structural rankings, adds effective coverage and representative stocks, and cross-checks against EastMoney's realtime rankings. Index and industry-flow pages carry indices, sectors, active stocks, industry-level main capital flow, market sentiment and volume. A dragon-tiger page shows seat-level activity by trading day with streak counts and an optional model precheck on related news.
The monitor page automates the daily rhythm: auction, midday and after-hours summaries for A-shares plus an overnight US digest, generated by a long-running scheduler with optional model enhancement. Realtime news runs on a bundled NewsNow instance aggregating selectable sources such as Cailianjing and Jin10, with per-source and importance filters, and local caching that keeps the page readable when an upstream source breaks.
The practice page is the trading side: simulated account overview, daily and cumulative equity curves, current holdings, a trading calendar, candidate lists, and the model's decisions with their rationale. Model decisions there require the DASHBOARD_DECISION_* configuration; the quote pages need no keys at all.
Strategies, and where the model sits
Strategy research ships with several built-in presets, a basic one plus named styles, alongside the interesting primitive: rules for candidates, buying, selling, position sizing and timing can be written in natural language rather than in a strategy DSL. The strategy documentation lives in its own docs directory, separate from the app architecture notes.
The model layer is deliberately optional and positioned as an assistant: compatible large model services are used for message retrieval, summarization and structured analysis, and, once enabled, the system completes news retrieval, quote analysis and simulated buy and sell decisions according to the user's strategy rules. Decision basis is stored alongside the account state and trade records, so a simulated fill can be traced back to the reasoning and the rule that produced it.
When a decision executes, notification goes out through Feishu, DingTalk, WeCom or Telegram. Everything stays local: configuration, database, logs and task outputs default to a private run directory, the settings page offers connection tests and version checks, and the project does not auto-update itself.
Install: one launcher script
Clone and run:
git clone https://github.com/kunkundi/niuone.git
cd niuone./run.shIf the script lacks execute permission on Linux:
chmod +x run.sh
./run.shWindows users double-click run.bat or run it in CMD. When startup finishes, the dashboard is at:
http://127.0.0.1:8787/The first run does six things automatically: it creates the .local-data private run directory, a Python virtual environment inside it, installs requirements.txt, installs and builds the Vue frontend from its lockfile, generates a dashboard.env, then initializes the run directory and starts the FastAPI dashboard. Launcher flags cover the common cases, for example a different port without opening a browser:
./run.sh --port 8877 --no-browserTo relocate run data:
NIUONE_LOCAL_DATA_DIR=/path/to/private-data ./run.shAdministration is key-based from the start. The dashboard home stays public, but the settings page and admin API always require administrator authentication; a bootstrap admin key is generated at first start under the run directory, and after logging in you set a proper password or pre-seed one in the environment file with 0600 permissions. The README explicitly warns against passing the password as a command-line argument, since that lands in shell history and process listings, which is the kind of small correctness that suggests the rest of the security thinking deserves credit.
Docker Compose, and a data-isolation warning
The container path builds one image and brings up an orchestration of the dashboard, a scheduled task runner and the official NewsNow instance:
./scripts/docker-build.sh
docker compose up -d --no-build
docker compose psNiuOne's own configuration, database, logs and task outputs live in a named volume, with NewsNow's data in a second one, so the news aggregator cannot bleed into the trading data. The build script cleans only dangling images carrying the project's tags, never the global Docker cache and never other projects' images, containers or volumes.
The warning that matters: Docker and native deployments do not synchronize their data. The README tells you not to alternate a single production instance between the two modes, because you will see a different, older set of accounts, configuration and trading calendar. Isolated development instances may run in parallel, but only with distinct ports and data locations. That is a data-loss footnote wearing plain clothes, and it is good that it is in the quickstart rather than an issue template.
Architecture, requirements, licence, and alternatives
The stack is a Vue 3 and Vite frontend with FastAPI and Uvicorn behind it, and the compute placement is deliberate: quote requests, trading decisions and record calculations all happen server-side, with the frontend receiving same-origin incremental snapshots rather than polling raw data endpoints. Requirements are Python 3.11 or newer, Node 22.12 or newer only for building the frontend, pnpm pinned at 11.15.1 invocable through npx, Git, a modern browser, and network access on first run for the package registries.
The licence is Apache-2.0, CI runs on the repository, a Docker Hub image is published, and releases are frequent and recent: v0.0.12 on 2026-08-31, v0.0.11 on 2026-08-25, v0.0.10 on 2026-08-18. The last push was on 2026-09-09.
The conventional alternative is a quant research stack such as vnpy or backtrader: Python frameworks built for strategy backtesting over historical data, often with live broker gateways. The approach difference is the direction of emphasis. Those frameworks center on the strategy engine and the backtest; NiuOne centers on the daily research workflow, the aggregation of quotes, flows, themes and news into one watched surface, with simulated execution and notification at the end. If your goal is to validate a strategy against history, use a backtesting framework; if your goal is to run a disciplined daily research and paper-trading desk over live A-share data, that is the job this workspace is shaped around.
Editorial conclusion
NiuOne fits individual A-share researchers who want aggregation, strategy notes, model-assisted analysis and paper trading in one self-hosted workspace, with every byte of account state, logs and configuration under their own management and no broker anywhere in the loop. It does not fit anyone who wants live trading execution, which the project explicitly does not do, or anyone unwilling to run and update a Python plus Vue stack themselves. Verify first: that the first-run bootstrap completes on your machine, which deployment mode owns your data going forward given the no-sync warning between Docker and native, and where your model key lives if you enable decision mode. The last push was on 2026-09-09.
Frequently asked questions
Does NiuOne connect to a broker or trade real money?
No. It operates simulated accounts only, connects to no broker trading interfaces, and never touches real funds. Simulated fills and their decision rationale are stored locally and can be pushed to Feishu, DingTalk, WeCom or Telegram.
What does NiuOne need to run?
Python 3.11 or newer, and Node.js 22.12 or newer with pnpm to build the Vue frontend; the container image skips the Node requirement. It runs from a personal computer or server via run.sh, run.bat or Docker Compose, with a browser for the dashboard.
Where is my data stored, and who can change settings?
Locally: the native launcher keeps everything under .local-data or a directory you set with NIUONE_LOCAL_DATA_DIR, while Docker keeps it in the niuone-data volume. The settings page and admin API always require administrator authentication, with a bootstrap key generated at first start.
Official sources
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.
[](https://hysenlabs.com/projects/kunkundi-niuone)