daisy-financial-research

agent
Security Audit
Warn
Health Warn
  • 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 Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested
Purpose
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.
SUMMARY

Stock research skill for AI agents — A-share, HK, US. Plan → fetch → validate → report.

README.md

Daisy Financial Research — Autonomous Stock / Company Research Skill

中文 | GitHub | Releases

Daisy investment research workflow

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 --schema introspection and --dry-run, with documented exit codes 0–5.
  • Cross-session decision memory (v2.2.0+): append-only Markdown log with pending → resolved lifecycle, 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_basic Tushare 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-resolve fetches close[decision_date] and close[as_of_date] for the ticker plus the right benchmark (CSI 300 for *.SH/SZ/BJ, HSI for *.HK with 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 via stockstats, with a strict look-ahead-bias guard (rows with Date > --as-of are dropped before computation). Auto-routes by ts_code suffix to pro.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.json is 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 / --to window: 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 --rating now 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 from virattt/dexter. Always allows (returns allowed: true) but emits a warning when the same tool has already been called >= --max-calls times in the pad, or when the new query is textually similar to a prior call (stdlib difflib, 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
WeChat Pay
Alipay
Alipay
Buy Me a Coffee
Buy Me a Coffee
Give a Reward
Give a Reward

Author

Reviews (0)

No results found