daisy-financial-research
Health Uyari
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Gecti
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
- Permissions — No dangerous permissions requested
This project is an autonomous financial research skill for AI agents. It automates the process of planning stock research, fetching market data, running technical analysis, and generating structured Markdown or HTML reports for A-share, Hong Kong, and US markets.
Security Assessment
Overall Risk: Low. The light code scan of 12 files found no dangerous patterns or hardcoded secrets, and the tool requests no excessive system permissions. However, by design, it makes extensive external network requests. It communicates with financial data APIs (like Tushare and AKShare), web search services (Brave / Bailian MCP), and benchmark trackers (yfinance). Developers should be aware that stock tickers and research topics will be sent to these third-party services during operation.
Quality Assessment
The project is actively maintained, with its most recent push occurring today. Despite active development, it suffers from low community visibility, currently sitting at only 5 GitHub stars. More importantly, the repository lacks a formal license file. This means that while you can view the open code, strictly speaking, you do not have explicit legal permission to use, modify, or distribute it.
Verdict
Use with caution — the code itself appears safe to run, but the complete lack of a software license introduces legal ambiguity for integration into commercial or broader open-source projects.
Stock research skill for AI agents — A-share, HK, US. Plan → fetch → validate → report.
Daisy Financial Research — Autonomous Stock / Company Research Skill

What it does
A multi-platform agent skill for finance research. Given a stock/company/sector topic, it plans the research, pulls structured data from Tushare, searches the web via Brave / Bailian MCP, runs Python for math and valuation, and produces a sourced, reproducible Markdown + HTML (+ optional PDF) report.
Design borrows from virattt/dexter — iterative agent loop (plan → gather → validate → answer) — but packaged as a cross-platform skill, no separate CLI.
Key capabilities:
- Agent-native CLI (v2.1.0+): every script auto-emits a stable
{ok, data, meta}JSON envelope when stdout isn't a TTY, supports--schemaintrospection and--dry-run, with documented exit codes 0–5. - Cross-session decision memory (v2.2.0+): append-only Markdown log with
pending → resolvedlifecycle, atomic rewrites, win-rate / mean-alpha stats. Format wire-compatible with TradingAgents'memory.py. - AKShare HK fallback (v2.3.0+): closes the documented
pro.hk_daily_basicTushare gap with PE/PB/PS snapshots and ROE/EPS/BPS time series — no Tushare token, lazy-imported. - Borrowed prompt library (v2.4.0+): five reference docs adapted from TradingAgents — Bull / Bear / Synthesis debate, Aggressive / Conservative / Neutral risk debate, reflection prompt, decision schema, China-market analyst framing, technical-indicator cheatsheet. See
references/. - Auto-resolve workflow (v2.5.0+):
dexter_memory_log.py auto-resolvefetchesclose[decision_date]andclose[as_of_date]for the ticker plus the right benchmark (CSI 300 for*.SH/SZ/BJ, HSI for*.HKwith AKShare Sina fallback, SPY for US via yfinance), computes raw + alpha + holding days, then resolves the pending memory-log entry in one call. - Technical indicators + decision-level backtest + tighter agent loop (v2.6.0+):
scripts/technical_indicators.py— point-in-time SMA / EMA / MACD / RSI / Bollinger / ATR / VWMA viastockstats, with a strict look-ahead-bias guard (rows withDate > --as-ofare dropped before computation). Auto-routes by ts_code suffix topro.daily/pro.hk_daily/yfinance.download.references/data-source-routing.md— canonical (market × data type) routing table consolidating A-share / HK / US primary calls and documented fallback chains.references/hk-ticker-name.jsonis a curated 5-digit → Chinese-name dict for ~30 HK majors;akshare_hk_valuation.py name --ts-code <code>is a zero-API local lookup.dexter_memory_log.py backtest— risk-adjusted decision-level metrics over a--from/--towindow: per-rating mean alpha, hit rate,alpha_t_stat,annualized_alpha_pct, Sortino-flavored ratio, plus the cumulative-alpha curve and its max drawdown. Deliberately not called Sharpe — the log records discrete decisions, not a continuous NAV.dexter_memory_log.py record --ratingnow tolerates LLM-formatted input — accepts a canonical word, a markdown bold tag (**Rating**: Buy), or a full Portfolio Manager synthesis paragraph; rejects input with no 5-tier word loudly instead of silently defaulting to Hold.dexter_scratchpad.py can-call <pad> <tool> <query>— soft loop-limit + similarity guard ported fromvirattt/dexter. Always allows (returnsallowed: true) but emits a warning when the same tool has already been called >=--max-callstimes in the pad, or when the new query is textually similar to a prior call (stdlibdifflib, no embedding deps).
- Plan-first workflow with JSONL scratchpad recording every tool call, params, result, assumption.
- DCF valuation with sensitivity matrix and sanity checks.
- Bank / financial-sector valuation override (RoTE / CET1 / NIM / P/B / payout) instead of forcing DCF on the wrong frame.
- A-share + Hong Kong Stock Connect screening presets (dividend-quality, value, momentum, etc.).
- Three-layer report output (md → html → optional pdf), CSS already handles CN/EN font fallback.
- Brave MCP + Bailian WebSearch MCP for web context.
Multi-Platform Support
| Platform | Status | Notes |
|---|---|---|
| Claude Code | ✅ Full | Native SKILL.md format |
| Opencode | ✅ Full | Reads ~/.claude/skills/ automatically |
| OpenClaw / ClawHub | ✅ Full | metadata.openclaw namespace, dependency gating |
| Hermes Agent | ✅ Full | metadata.hermes namespace |
| OpenAI Codex | ✅ Full | agents/openai.yaml sidecar |
| SkillsMP | ✅ Indexed | GitHub topics configured |
Prerequisites
# Python 3.9+
pip install tushare pandas requests
# Optional: AKShare HK valuation/fundamentals fallback (no Tushare token needed)
pip install akshare
# Optional: PDF output
brew install pandoc
brew install --cask mactex # or basictex for a smaller install
Environment:
export TUSHARE_TOKEN=xxxxxxxx # required for any Tushare call
Installation
| Platform | Global | Project |
|---|---|---|
| Claude Code | git clone https://github.com/Agents365-ai/daisy-financial-research.git ~/.claude/skills/daisy-financial-research |
git clone ... .claude/skills/daisy-financial-research |
| Opencode | git clone ... ~/.config/opencode/skills/daisy-financial-research |
git clone ... .opencode/skills/daisy-financial-research |
| OpenClaw | clawhub install daisy-financial-research or git clone ... ~/.openclaw/skills/daisy-financial-research |
git clone ... skills/daisy-financial-research |
| Hermes | git clone ... ~/.hermes/skills/research/daisy-financial-research |
via external_dirs in ~/.hermes/config.yaml |
| OpenAI Codex | git clone ... ~/.agents/skills/daisy-financial-research |
git clone ... .agents/skills/daisy-financial-research |
| SkillsMP | skills install daisy-financial-research |
— |
Quick Start
# A-share dividend-quality watchlist + Markdown report draft
python <skill-dir>/scripts/screen_a_share.py --preset a_dividend_quality --top 50 --report
# Render the Markdown draft into the three-layer report
python <skill-dir>/scripts/financial_report.py ./financial-research/reports/<TIMESTAMP>_a-share-a_dividend_quality-screen.md \
--title "A-share dividend watchlist" --slug a-div-quality --pdf
All output lands under ./financial-research/{reports,watchlists,scratchpad,universes,memory}/ in your cwd by default.
Agent-native CLI
Every script under scripts/ follows a uniform contract designed for both humans at a terminal and agents calling via subprocess. Same shape, eight scripts:
# Discover the script's parameter and output schema (preferred over --help for agents)
python <skill-dir>/scripts/screen_a_share.py --schema
# Preview the request shape — no Tushare call, no file written
python <skill-dir>/scripts/screen_a_share.py --preset a_value --dry-run
# Force JSON regardless of TTY state
DAISY_FORCE_JSON=1 python <skill-dir>/scripts/screen_a_share.py --preset a_value
Output auto-detection: when stdout is not a TTY, scripts emit a single JSON envelope. When stdout is a TTY, scripts emit the legacy human table. Override with --format json|table.
Success envelope:
{
"ok": true,
"data": { "trade_date": "20260430", "candidates": 50, "csv": "...", "preview": [...] },
"meta": { "schema_version": "1.0.0", "request_id": "req_abc123", "latency_ms": 412 }
}
Error envelope:
{
"ok": false,
"error": { "code": "no_data", "message": "...", "retryable": true, "context": {...} },
"meta": { ... }
}
Exit codes: 0 ok · 1 runtime · 2 auth · 3 validation · 4 no_data · 5 dependency.
Long-running operations (screen_hk_connect.py --with-momentum, financial_report.py) emit NDJSON progress events on stderr, one JSON line per phase, so an agent can detect liveness without blocking on stdout.
Output paths
| Script | Default subdir | Purpose |
|---|---|---|
dexter_scratchpad.py |
./financial-research/scratchpad/ |
Per-task JSONL of tool calls, params, results, assumptions. v2.6.0+ adds can-call for soft loop-limit + similarity guard before each tool call |
dexter_memory_log.py |
./financial-research/memory/ |
Cross-session decision log; pending → resolved lifecycle. Subcommands include auto-resolve (v2.5.0+) which fetches close prices and benchmark, computes raw + alpha, and persists the resolution in one call. v2.6.0+ adds backtest (per-rating alpha t-stat / annualized alpha / Sortino-flavored / cumulative-alpha drawdown) and tolerant record --rating extraction |
financial_report.py |
./financial-research/reports/ |
Markdown → HTML → optional PDF report renderer |
screen_a_share.py |
./financial-research/watchlists/ (+ reports/ with --report) |
A-share multi-factor screener (presets) |
screen_hk_connect.py |
./financial-research/watchlists/ |
HK Stock Connect screener (only when 港股通 explicitly requested) |
hk_connect_universe.py |
./financial-research/universes/ |
Southbound Stock Connect universe export |
akshare_hk_valuation.py |
(read-only) | HK PE/PB/PS + ROE/EPS via AKShare — closes pro.hk_daily_basic gap. v2.6.0+ adds name subcommand for zero-API local-dict ticker → Chinese-name lookup |
technical_indicators.py (v2.6.0+) |
(read-only) | Point-in-time SMA/EMA/MACD/RSI/Bollinger/ATR/VWMA via stockstats, with look-ahead-bias guard. Auto-routes A-share/HK/US |
Every script accepts --out-dir <root> to override the root; the subdir is appended automatically.
Hermes users: to keep the legacy ~/.hermes/reports/financial-research/<subdir>/ layout, pass --out-dir ~/.hermes/reports/financial-research to every script.
Development with uv
pyproject.toml lists the runtime dependencies. Reproduce the env locally:
uv sync # core: tushare / pandas / numpy / requests
uv sync --extra akshare # also: akshare (HK valuation + HSI benchmark fallback)
uv sync --extra us # also: yfinance (US tickers in auto-resolve / technical_indicators)
uv sync --extra ta # also: stockstats (technical_indicators.py)
uv sync --all-extras # everything
Auto-update
The skill checks <skill-dir>/.last_update on first use per conversation. If older than 24 hours, it silently runs git pull --ff-only. Failures (offline, conflict, not a git checkout) are ignored without interrupting the workflow.
Manual update:
cd <skill-dir> && git pull
vs no skill
| Capability | Native agent | This skill |
|---|---|---|
| Plan-first + scratchpad | Sometimes | Always (JSONL on disk) |
| Cross-session decision memory | No | Append-only Markdown log + win-rate / mean-alpha stats |
| Agent-native CLI (JSON envelopes, schema introspection, dry-run) | Manual | Built-in for every script |
| Numerical validation checklist | No | Yes (units / currency / period / scale) |
| Bank valuation: skip DCF | Hit-or-miss | Default override to RoTE / CET1 / NIM / P/B |
| Tushare routing + known-bad-interface avoidance | No | Built-in gotchas list + AKShare fallback for HK |
| Multi-preset stock screening | No | Yes (a_dividend_quality, a_value, HK Connect) |
| Three-layer report (md+html+pdf) | Manual | One command |
| HK Connect universe export | No | Yes (with date back-fill) |
| Soft loop limits + repeat-query detection | No | dexter_scratchpad.py can-call (count + difflib-based similarity warning before each tool call) |
| Bull / bear / risk debate prompts | No | references/debate-prompts.md, references/risk-debate-prompts.md (with explicit Loop spec for round-counter exit) |
| Decision schema (5-tier rating + markdown render contract) | No | references/decision-schema.md |
| Tolerant rating extraction from PM synthesis output | No | dexter_memory_log.py record --rating "**Rating**: Buy ..." (rejects no-rating input loudly instead of silent Hold) |
| China-market analyst framing | No | references/cn-market-analyst-prompts.md |
| Auto-resolve memory log (fetch close + benchmark, compute alpha) | No | dexter_memory_log.py auto-resolve |
| Aggregate decision-level backtest (alpha t-stat, annualized alpha, Sortino-flavored, cum-alpha drawdown) | No | dexter_memory_log.py backtest --from --to --rating |
| Point-in-time technical indicators with look-ahead-bias guard | Manual | scripts/technical_indicators.py (auto-routes A-share / HK / US) |
| Per-market data-source routing reference (primary + documented fallback chain) | No | references/data-source-routing.md + references/hk-ticker-name.json |
Disclaimer
This skill produces data analysis and research records, not investment advice. All conclusions require independent judgement against the latest public information.
Support
If this skill helps you, consider supporting the author:
WeChat Pay |
Alipay |
Buy Me a Coffee |
Give a Reward |
Author
- Bilibili: https://space.bilibili.com/1107534197
- GitHub: https://github.com/Agents365-ai
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi