Skip to main content

Wyckoff method quantitative analysis system for A-shares

Project description

🏛 Wyckoff Trading Agent 3.1 — 嚁科倫亀易智胜䜓

🔥 3.1 已䞊线 — 嚁科倫倧垈走进䜠的呜什行

䞍再只是冷冰冰的量化筛选脚本。3.0 把䞀䞪掻的嚁科倫倧垈塞进了䜠的浏览噚3.1 又把他塞进了䜠的终端 — 他胜听懂䜠的话、调劚九倧歊噚库、自䞻䞲联倚步掚理最终给出"打还是䞍打"的明确结论。

䞀句话总结䜠诎人话他读盘面党自劚。Web + CLI 双通道流匏蟓出。

👉 立即䜓验线䞊 Agent

👉 终端甚户uv venv && source .venv/bin/activate && uv pip install youngcan-wyckoff-analysis && wyckoff


⚡ 3.1 有什么䞍䞀样

绎床 2.x脚本时代 3.0Agent 时代 3.1双通道
亀互方匏 点按钮、填参数、等结果 对话即呜什 — Web 读盘宀 Web + CLI 双通道 — 终端里也胜对话
决策流皋 人工䞲联各暡块 LLM 自䞻猖排 — 自劚调诊断→查行情→对比→䞋结论 同巊CLI 完党倍甚
工具调床 固定流氎线 10 倧歊噚随叫随到调几次、调哪䞪AI 实时决策 同巊
暡型支持 单厂商 GeminiADK 原生 Gemini / Claude / OpenAI 䞉选䞀CLI 原生倚暡型
底座 无 Agent 框架 Google ADK — 工䞚级 Agent 运行时 CLI 端裞写 Agent 埪环零框架
安装 clone + pip 同巊 pip install youngcan-wyckoff-analysis && wyckoff

2.x 的党郚胜力五层挏斗、AI 研报、私人决断、回测党郚保留䞔已接入 Agent3.x 是超集而非替代。


🧚 栞心歊噚库10 䞪 FunctionTool

Agent 䞍是玩具。以䞋是嚁科倫倧垈手里的十把刀每䞀把郜连接着真实的量价匕擎和数据管线

歊噚 胜力 杀䌀力
🔍 search_stock_by_name 名称/代码/拌音暡糊搜玢 䞍知道代码诎名字就行
🩺 diagnose_stock 单股 Wyckoff 结构化诊断 䞀键看穿吞筹/掟发/markup
📋 diagnose_portfolio 批量持仓健康扫描 党仓䜓检谁该留谁该走
📈 get_stock_price 近期 OHLCV 行情 实时量价数据盎送倧垈案倎
🌡 get_market_overview 倧盘氎枩抂览 牛熊䞀目了然
🏗 screen_stocks 五层挏斗党垂场筛选 4500→30暎力压猩
📰 generate_ai_report 䞉阵营 AI 深床研报 逻蟑砎产/傚倇/起跳板䞉振出局
⚔ generate_strategy_decision 持仓去留 + 新标买入决策 䞋蟟最终䜜战指什
📊 get_recommendation_tracking 历史掚荐及后续衚现 事后验证绝䞍甩锅
🔔 get_signal_pending 信号确讀池查询 L4 信号 1-3 倩确讀后才可操䜜

Agent 的杀手锏䜠诎"垮我看看 000001 和 600519 哪䞪曎倌埗买"他䌚自䞻决定先调 diagnose_stock 䞀次、再调 get_stock_price 对比行情、最后绌合掚理给出结论。敎䞪过皋无需预猖排工具调甚顺序和次数由 LLM 实时决策。


䜠还胜做什么

功胜 诎明
💬 读盘宀 銖页即对话界面嚁科倫倧垈坐镇——甚自然语蚀让他审盘、筛选、诊断、䞋蟟去留指什支持䞊䞋文记忆
📊 每日选股 GitHub Actions 定时跑 Wyckoff Funnel从䞻板+创䞚板筛选候选并掚送飞乊
📘 策略手册 见 README_STRATEGY.md含栞心量化金融术语、风控公匏及各层筛选指标执行口埄
🧭 沙里淘金 Web 前台提亀参数GitHub Actions 后台执行倚层挏斗筛选
🀖 倧垈暡匏 单股本地深床分析默讀近 320 䞪亀易日含囟衚生成
🕶 私人决断 结合䞪人持仓䞎倖郚候选生成 Buy/Hold/Sell 私密指什Telegram 单独发送
🛡 RAG 防雷 基于新闻检玢自劚过滀莟面舆情股祚
🧪 日线回测 蜻量回攟 Funnel 呜䞭后的 N 日收益蟓出胜率/分䜍数
📁 数据富出 A 股日线 + 自定义富出ETF/指数/宏观 CPI
💌 持仓管理 实时同步持仓至云端内眮 AI 订单建议面板
🎯 掚荐跟螪 历史掚荐股祚自劚同步收盘价并计算环计收益
📣 垂场信号栏 倧盘氎枩、A50盘前风向标䞎 VIX恐慌指数顶郚䞀栏尜览
🔐 登圕䞎配眮 飞乊/䌁埮/钉钉 Webhook 及倚厂商 API Key 云端同步

🧠 Wyckoff 量价分析 Skills

劂果䜠只想把这套 Wyckoff 量价分析思路 以蜻量方匏倍甚到 OpenClaw / AI Agent可以盎接䜿甚这䞪简易 Skills 仓库

  • 仓库地址YoungCan-Wang/wyckoff_skill
  • 定䜍将嚁科倫量价分析的栞心提瀺词、刀断框架、蟓出口埄拆成可倍甚的简易 Skill
  • 适合场景单股倍盘、持仓诊断、候选股结构刀断、给 AI 助手快速挂蜜䞀套"嚁科倫视角"

🚀 快速匀始

1. 环境

需芁 Python 3.11+。

cd Wyckoff-Analysis
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
python -m pip install -U pip
python -m pip install -r requirements.txt

2. 配眮

倍制 .env.example 䞺 .env填入

  • SUPABASE_URL、SUPABASE_KEY登圕甚项目䟝赖 Supabase
  • FEISHU_WEBHOOK_URL可选飞乊掚送地址可选 WECOM_WEBHOOK_URL、DINGTALK_WEBHOOK_URL 实现䌁埮/钉钉掚送
  • 倧暡型可配眮 GEMINI_API_KEY 或 OpenAI/智谱/Minimax/DeepSeek/Qwen 等厂商的 API Key 䞎暡型见讟眮页

Tushare 泚册掚荐可通过 歀铟接泚册双方可䞀起提升获取曎高级股祚数据的权益。

3. 运行

Web 界面打匀浏览噚盎接跟嚁科倫倧垈对话。

streamlit run streamlit_app.py

终端 CLI掚荐装完即甚䞍需芁 clone 仓库。

# 安装
uv venv
source .venv/bin/activate
uv pip install youngcan-wyckoff-analysis

# 运行
wyckoff              # 启劚终端读盘宀
wyckoff update       # 升级到最新版

启劚后圚 TUI 内亀互匏配眮

  • /model — 选择 ProviderGemini / Claude / OpenAI 及兌容端点、蟓入 API Key、选择暡型配眮自劚保存
  • /login — 登圕莊号打通持仓和云端凭证登圕态自劚保持
  • 盎接蟓入问题匀始对话

终端内支持流匏蟓出、Token 甚量星瀺、䞊䞋箭倎翻阅历史跚䌚话持久化、Alt+Enter 倚行蟓入、/ 呜什 Tab 补党、/help /new /clear /quit。

呜什行富出批量富出 CSV。

python -m integrations.fetch_a_share_csv --symbol 300364
python -u -m integrations.fetch_a_share_csv --symbols 000973 600798 601390

📅 每日选股Wyckoff Funnel

从党垂场䞻板 + 创䞚板倚蜮过滀最终蟓出高胜率的粟芁标的经过量化压猩后亀由 AI 研刀并掚送到飞乊。 氎枩刀断同时参考指数趋势 + 垂场广床站䞊 MA20 占比匱垂䌚自劚收玧筛选䞎买入容忍床。

从 v2.0.0 起Web 端䞍再本地重算挏斗。 Streamlit 页面莟莣提亀股祚池和参数真正的党量取数、挏斗计算、AI 候选敎理由 GitHub Actions 后台执行页面只展瀺运行状态和蜻量结果摘芁。

挏斗筛选逻蟑五层暎力压猩

层级 名称 做什么
Layer 1 剥犻垃土 剔陀 ST/北亀所/科创板保留垂倌 ≥ 35 亿、日均成亀额 ≥ 5000 侇
Layer 2 六倧独立通道甄选 ① 䞻升 ② 点火 ③ 朜䌏 ④ 吞筹 â‘€ 地量 ⑥ 技盘 — 六路包抄无死角
Layer 2.5 Markup 识别 MA50 䞊穿 MA200 + 角床验证 → 标泚已进入䞊升趋势
Layer 3 板块共振 行䞚分垃 Top-N筛选䞎热闚板块共振的标的
Layer 4 嚁科倫埮观狙击 Spring终极震仓、LPS极猩量回螩、SOS䜎䜍攟量点火、EVR高䜍攟量䞍跌
Layer 5/AI 䞉阵营 AI 审刀 LLM 独立审讯 → "逻蟑砎产 / 傚倇营地 / 倄于起跳板"䞉振出局

启甚方匏

仓库内眮工䜜流.github/workflows/wyckoff_funnel.yml

  • 定时北京时闎呚日到呚四 18:25
  • 手劚Actions 页面选择 Wyckoff Funnel → Run workflow

Web 端后台任务架构

仓库内眮䞓闚给 Streamlit 页面䜿甚的后台工䜜流.github/workflows/web_quant_jobs.yml

  • Wyckoff Funnel 页面提亀后台挏斗筛选任务
  • AI 分析 页面提亀后台批量研报或蟓入预挔任务
  • 页面职莣觊发工䜜流、蜮询运行状态、读取 artifact 结果
  • 后台职莣拉党量 OHLCV、跑挏斗、调甚暡型、产出蜻量 JSON 结果

这样做的目的是把最耗内存、最容易超时的铟路从 Streamlit Community Cloud 进皋里移走。

配眮 GitHub Secrets

Settings → Secrets and variables → Actions添加

名称 必填 诎明
GEMINI_API_KEY 是 AI 研报䞎对话 Agent或䜿甚 DEFAULT_LLM_PROVIDER + 对应厂商 Key
TUSHARE_TOKEN 是 行情䞎垂倌数据
DEFAULT_LLM_PROVIDER 吊 定时任务䜿甚的厂商gemini / openai / zhipu / minimax / deepseek / qwen未配则 gemini
FEISHU_WEBHOOK_URL 吊 飞乊掚送地址未配则跳过飞乊通知 (配眮教皋)
WECOM_WEBHOOK_URL 吊 䌁埮矀机噚人 Webhook
DINGTALK_WEBHOOK_URL 吊 钉钉自定义机噚人 Webhook
GEMINI_MODEL 吊 未配则甚默讀暡型其他厂商可配 OPENAI_MODEL、ZHIPU_MODEL 等
SUPABASE_URL Step4 甹 吊走 USER_LIVE:<user_id> 路埄时需芁
SUPABASE_KEY ❌ Supabase 匿名 Key脚本䟧可䜜䞺读取兜底。
SUPABASE_SERVICE_ROLE_KEY ❌ Supabase 管理员 Key若 Step4 需芁皳定读写建议䌘先配眮。
SUPABASE_USER_ID ❌ 甚户锁定指定 Step4 运行的目标甚户 ID。
MY_PORTFOLIO_STATE ❌ 本地莊本兜底若 USER_LIVE:<user_id> 䞍可甚可甚 JSON 字笊䞲配眮持仓 (栌匏见 .env.example)。
TG_BOT_TOKEN ❌ 私密掚送Telegram Bot Token甚于接收私密亀易建议。
TG_CHAT_ID ❌ Telegram Chat ID。
TAVILY_API_KEY ❌ 防雷甚于 RAG 新闻检玢 (Tavily)掚荐配眮。
SERPAPI_API_KEY ❌ 防雷倇甚Tavily 挂了时自劚切换到 Google News (SerpApi)。

提瀺以䞊配眮只圚䜠需芁对应功胜时才需填写。最基础运行仅需 GEMINI_API_KEY + TUSHARE_TOKEN。IM 通知枠道飞乊/䌁埮/钉钉均䞺可选未配眮时筛选和研报仍正垞执行仅跳过消息掚送。

Web 端后台任务所需 Streamlit Secrets

劂果䜠垌望圚 Streamlit 页面里盎接点按钮觊发后台挏斗或后台批量 AI还需芁圚 Streamlit Secrets 䞭配眮

名称 必填 诎明
GITHUB_ACTIONS_TOKEN 是 GitHub API Token甚于觊发 workflow_dispatch 并读取 Actions 运行结果 artifact
GITHUB_ACTIONS_REPO_OWNER 吊 默讀 YoungCan-Wang
GITHUB_ACTIONS_REPO_NAME 吊 默讀 Wyckoff-Analysis
GITHUB_ACTIONS_REF 吊 默讀 main
GITHUB_ACTIONS_WORKFLOW_FILE 吊 默讀 web_quant_jobs.yml
GITHUB_ACTIONS_ALLOWED_USER_IDS 吊 逗号分隔的甚户 ID 癜名单配眮后仅癜名单莊号可圚页面里觊发后台任务

掚荐䜿甚细粒床单仓库 Token至少授予

  • Actions: Read and write
  • Contents: Read

验证

跑䞀次手劚觊发后检查

  • 日志䞭有 阶段汇总 侔 ok=True
  • Artifacts 䞭有 daily-job-logs-*
  • 飞乊收到挏斗结果 + 研报

垞规跑完纊 90130 分钟。报错时看日志里猺哪䞪配眮。

日线回测蜻量

䞍䟝赖分钟级和高价数据源盎接回攟 Funnel 呜䞭后的未来 N 日衚现

python -m scripts.backtest_runner \
  --start 2025-01-01 \
  --end 2025-12-31 \
  --hold-days 15 \
  --top-n 3 \
  --trading-days 320 \
  --board all \
  --exit-mode sltp \
  --stop-loss -9 \
  --take-profit 0 \
  --sample-size 300 \
  --output-dir analysis/backtest

圓前脚本默讀倌是 --hold-days 15 --top-n 3 --exit-mode sltp --stop-loss -9 --take-profit 0。 亀易日窗口默讀是 --trading-days 320。若芁做持有呚期对比建议分别回测 15 / 30 / 45 / 60 四档。

回测偏差口埄诎明重芁

  • 默讀关闭圓前截面垂倌/行䞚映射过滀降䜎 look-ahead bias。
  • 若䜠芁倍现旧口埄可星匏加 --use-current-meta䌚匕入前视偏差仅甚于对比。
  • 无论是吊匀启仍存圚幞存者偏差股祚池来自圓前圚垂名单。
  • 回测默讀纳入双蟹摩擊成本--buy-friction-pct 0.2 --sell-friction-pct 0.2可按刞商䞎滑点实况调敎。

蟓出文件

  • summary_*.md收益统计 + 风险统计最倧回撀、VaR95、CVaR95、最长连亏
  • trades_*.csv逐笔信号收益明细

垞见报错

  • 配眮猺倱: GEMINI_API_KEY
    • 原因未配眮暡型 Key 或已倱效
    • 倄理曎新 GEMINI_API_KEY 后重跑
  • 垂倌数据䞺空TUSHARE_TOKEN 可胜猺倱/倱效
    • 原因TUSHARE_TOKEN 猺倱/倱效/额床问题
    • 倄理检查并曎新 TUSHARE_TOKEN确讀莊号权限
  • [step3] 暡型 ... 倱莥 / llm_failed
    • 原因暡型䞍可甚、限流、眑络抖劚
    • 倄理曎换 GEMINI_MODEL 或皍后重试
  • [step3] 飞乊掚送倱莥 / feishu_failed
    • 原因Webhook 无效、限流、眑络问题
    • 倄理重新生成飞乊机噚人 Webhook 并替换 Secret
  • Step4 私人再平衡: 跳过SUPABASE_USER_ID 未配眮/甚户持仓猺倱
    • 原因未配眮 SUPABASE_USER_ID或 USER_LIVE:<user_id>/MY_PORTFOLIO_STATE 郜䞍可甚
    • 倄理圚 Secrets 配眮 SUPABASE_USER_ID䌘先保证 Supabase 有 USER_LIVE:<user_id>必芁时提䟛 MY_PORTFOLIO_STATE 兜底
  • Step4 私人再平衡: 跳过TG_BOT_TOKEN/TG_CHAT_ID 未配眮
    • 原因Telegram Secret 未配眮
    • 倄理配眮 TG_BOT_TOKEN 和 TG_CHAT_ID 后重跑
  • User location is not supported for the API use
    • 原因暡型地域限制
    • 倄理曎换可甚眑络出口或䟛应商
  • Action 超时或明星慢于 2 小时
    • 原因数据源抖劚、重试变倚
    • 倄理查看批次日志定䜍卡点必芁时手劚重跑

私人决断可选

Step4 完党由 GitHub Actions Secrets 驱劚读取 SUPABASE_USER_ID 定䜍 USER_LIVE:<user_id>读取 TG_BOT_TOKEN/TG_CHAT_ID 掚送 Telegram暡型䜿甚 GEMINI_API_KEY/GEMINI_MODEL。若 Supabase 持仓猺倱可甚 MY_PORTFOLIO_STATE 做兜底。


亀流

飞乊矀二绎码

飞乊矀二绎码

飞乊䞪人二绎码

飞乊䞪人二绎码


☕ 赞助䞎支持

各䜍股友觉埗这䞪脚本筛选的股祚圢态埈埗悚心蟛苊给䞪吆喝点䞪star。劂果这䞪借助这䞪脚本赚到钱了也欢迎赞助䜜者䞀顿汉堡升级䞋倧暡型和股祚数据非垞感谢

支付宝 (Alipay) 埮信支付 (WeChat)

🀖 系统架构

䞀䞪䌚思考的倧脑 + 䞀条䞍知疲倊的流氎线

╔══════════════════════════════════════════════════════════════════════════════════════╗
║                      🏛  WYCKOFF TRADING AGENT 3.1  ·  System Panorama             ║
╚══════════════════════════════════╀═══════════════════════════════════════════════════╝
                                   │
              ┌────────────────────┌────────────────────┐
              ▌                    ▌                    ▌
   ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
   │ Streamlit Web UI  │ │  CLI Terminal    │ │  GitHub Actions  │
   │ Reading Room      │ │  wyckoff cmd     │ │  cron Pipeline   │
   └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
            │                    │                     │
            ▌                    ▌                     ▌
┌───────────────────────────────────┐     ┌───────────────────────────────────┐
│      🧠 AGENT BRAIN               │     │      ⚙  ETL PIPELINE              │
│  Web: Google ADK  ·  CLI: 裞写    │     │      GitHub Actions  ·  cron      │
│                                   │     │                                   │
│  ┌─────────────────────────────┐  │     │  ┌─────────────────────────────┐  │
│  │      wyckoff_advisor        │  │     │  │  Step 2  Funnel Screening   │  │
│  │      LlmAgent               │  │     │  │  Step 3  AI Battle Report   │  │
│  │      Wyckoff Master Persona │  │     │  │  Step 4  Rebalance & Push   │  │
│  │                             │  │     │  └─────────────────────────────┘  │
│  │  Intent → Tools → Reason   │  │     │                                   │
│  │  Autonomous  Multi-step     │  │     │  Sun-Thu 18:25 CST  ·  Manual    │
│  └──────────────┬──────────────┘  │     │  Deterministic  ·  No autonomy   │
│                 │                  │     └────────────────┬──────────────────┘
│  ┌──────────────┮──────────────┐  │                      │
│  │  10 FunctionTools Arsenal   │  │                      │
│  │                             │  │                      │
│  │  search   diagnose  port.   │  │                      │
│  │  price    overview  funnel  │  │                      │
│  │  report   strategy  track   │  │                      │
│  │  signal_pending             │  │                      │
│  └──────────────┬──────────────┘  │                      │
└─────────────────┌─────────────────┘                      │
                  │                                        │
                  └──────────────┬──────────────────────────┘
                                 │
              ┌──────────────────┮──────────────────┐
              │         🔧 CORE ENGINE               │
              │                                      │
              │  wyckoff_engine ····· 5-Layer Funnel  │
              │  funnel_pipeline ··· Market Sweep     │
              │  batch_report ······ 3-Camp Verdict   │
              │  strategy ·········· Trade Decision   │
              │  holding_diagnostic  Health Check     │
              │  prompts ··········· Prompt Arsenal   │
              │  sector_rotation ··· Sector Radar     │
              └───────┬──────────────┬────────┬──────┘
                      │              │        │
           ┌──────────┘              │        └──────────┐
           ▌                         ▌                   ▌
┌────────────────────┐  ┌────────────────────┐  ┌────────────────────┐
│  📡 DATA SOURCES   │  │   🀖 LLM  x 8     │  │  ☁  CLOUD STORE   │
│                    │  │                    │  │                    │
│  tushare      ★   │  │  Gemini       ★   │  │  Supabase          │
│    ↓ akshare      │  │  OpenAI           │  │    Portfolio       │
│    ↓ baostock     │  │  DeepSeek         │  │    Recommendation  │
│    ↓ efinance     │  │  Qwen · Kimi      │  │    Settings        │
│                    │  │  Zhipu · Volc     │  │    Hist Cache      │
│  auto-fallback    │  │  Minimax           │  │                    │
└────────────────────┘  └─────────┬──────────┘  └────────────────────┘
                                  │
              ┌───────────────────┮───────────────────┐
              │           📣 NOTIFICATIONS             │
              │                                        │
              │  Feishu  ·  WeCom  ·  DingTalk  ·  TG  │
              └────────────────────────────────────────┘

Agent 决策流诊解

甚户诎䞀句话Agent 自䞻完成党郚掚理——零预猖排纯 LLM 实时决策

 "垮我看看 000001 和 600519 哪䞪曎倌埗买"
                    │
                    ▌
  ┌─────────────────────────────────────────────────────────────────┐
  │  wyckoff_advisor  (Google ADK LlmAgent)                         │
  │                                                                 │
  │  1. 理解意囟 ──→ "甚户芁对比䞀只股祚"                             │
  │                                                                 │
  │  2. 自䞻调床 ──→ diagnose_stock("000001.SZ")  ──→ 吞筹末期      │
  │              ──→ diagnose_stock("600519.SH")  ──→ Markup 䞭段   │
  │              ──→ get_stock_price("000001.SZ") ──→ 近期量价      │
  │              ──→ get_stock_price("600519.SH") ──→ 近期量价      │
  │                                                                 │
  │  3. 绌合掚理 ──→ 对比结构、量价、风险收益比                       │
  │                                                                 │
  │  4. 蟓出结论 ──→ "000001 倄于 Spring 确讀阶段胜率曎高..."       │
  └─────────────────────────────────────────────────────────────────┘

䌚话管理

层级 实现 诎明
Session InMemorySessionService 进皋内存傚重启䞢倱
State session.state 存傚 user_id、偏奜 provider 等䞊䞋文

Pipeline 执行流

定时党垂场筛选.github/workflows/wyckoff_funnel.yml确定性 ETL + 䞀次 LLM 调甚

  cron (Sun-Thu 18:25 CST) / manual dispatch
    │
    │   ┌──────────────────────────────────────────────────────────┐
    ├──→│ Step 2 ·  FUNNEL                                         │
    │   │ Market Regime + ~4500 A-shares OHLCV → 5-layer → ~30    │
    │   └──────────────────────────────────────────────────────────┘
    │
    │   ┌──────────────────────────────────────────────────────────┐
    ├──→│ Step 3 ·  REPORT                                         │
    │   │ Prompt + 1x LLM call → 3-camp Markdown battle report    │
    │   └──────────────────────────────────────────────────────────┘
    │
    │   ┌──────────────────────────────────────────────────────────┐
    └──→│ Step 4 ·  REBALANCE                                      │
        │ Prompt + 1x LLM call → Hold/Sell/Buy JSON → OMS → Push  │
        └──────────────────────────────────────────────────────────┘
步骀 代码暡块 本莚
Funnel + Regime core/funnel_pipeline.py → wyckoff_engine.py + market_regime.py 确定性量价计算
Report step3_batch_report.py → core/batch_report.py 单次 LLM 调甚
Rebalance step4_rebalancer.py → core/strategy.py 单次 LLM + OMS 风控

LLM Provider8 倧厂商党通

  • Web Agent默讀 GeminiADK 原生可通过 LiteLLM 桥接切换
  • CLI AgentGemini / Claude / OpenAI 䞉选䞀TUI 内 /model 切换支持任意 OpenAI 兌容端点
  • Pipeline通过 llm_client.py 倚 provider 盎连
Provider 状态 诎明
Gemini ✅ 䞻力 Agent gemini-2.5-flash / Pipeline gemini-3.1-flash-lite-preview
OpenAI ✅ GPT-4o / GPT-4o-mini
DeepSeek ✅ DeepSeek-Chat
Qwen ✅ DashScope OpenAI-compatible
Kimi ✅ moonshot-v1
Zhipu ✅ GLM-4
Volcengine ✅ Doubao/ARK
Minimax ✅ abab 系列

附圕

目圕结构

.
├── streamlit_app.py        # Web 入口 — 智胜对话銖页Google ADK Chat Agent
├── app/                    # UI 组件layout/auth/navigation
│   ├── background_jobs.py  # Streamlit 䟧后台任务状态管理
│   └── ...
├── cli/                    # 🖥 终端 CLI Agent裞写零框架
│   ├── __main__.py         # 入口wyckoff 呜什 / python -m cli
│   ├── agent.py            # 栞心 Agent 埪环think → tool_call → execute → think
│   ├── providers/          # 倚暡型适配层
│   │   ├── base.py         # LLMProvider 抜象接口
│   │   ├── gemini.py       # Geminigoogle-genai SDK
│   │   ├── claude.py       # Claudeanthropic SDK
│   │   └── openai.py       # OpenAIopenai SDK支持自定义 base_url
│   ├── auth.py             # 讀证Supabase 登圕 + session 持久化
│   ├── tools.py            # 工具泚册衚倍甚 chat_tools.pyToolContext shim
│   └── ui.py               # 终端 UIrich Markdown + prompt_toolkit
├── agents/                 # 🀖 对话 Agent 层Google ADK
│   ├── wyckoff_chat_agent.py # 对话 Agent 定义ADK LlmAgent嚁科倫人栌
│   ├── chat_tools.py       # 10 䞪 FunctionTool — 包装匕擎胜力给对话 Agent
│   └── session_manager.py  # 䌚话管理ADK Runner + InMemorySessionService
├── core/                   # 栞心策略䞎领域逻蟑
│   ├── wyckoff_engine.py   # Wyckoff 倚层挏斗匕擎六通道L2 + Markup L2.5
│   ├── prompts.py          # AI 提瀺词投委䌚 / 挏斗 / 私人决断 / 对话 Agent
│   ├── sector_rotation.py  # 板块蜮劚分析
│   ├── holding_diagnostic.py # 持仓诊断
│   ├── stock_cache.py      # 股祚数据猓存
│   └── constants.py        # 垞量定义
├── integrations/           # 数据源/LLM/Supabase 适配层
│   ├── data_source.py      # 统䞀数据源tushare → akshare → baostock → efinance
│   ├── llm_client.py       # LLM 客户端原生倚 provider
│   ├── stock_hist_repository.py # Supabase 猓存 + gap-fill
│   ├── supabase_client.py  # Supabase 云端同步
│   ├── supabase_portfolio.py # 策略持仓同步
│   ├── supabase_recommendation.py # 掚荐跟螪
│   ├── rag_veto.py         # RAG 防雷暡块
│   └── github_actions.py   # GitHub Actions 觊发䞎结果查询
├── pages/                  # Streamlit 页面
│   ├── Export.py           # 数据富出A 股 CSV + 跳蜬自定义富出
│   ├── AIAnalysis.py       # 倧垈暡匏单股深床分析 + 囟衚生成
│   ├── WyckoffScreeners.py # 沙里淘金后台挏斗筛选高级参数调䌘
│   ├── Portfolio.py        # 持仓管理
│   ├── RecommendationTracking.py # 掚荐跟螪
│   ├── CustomExport.py     # 自定义富出ETF/指数/宏观 CPI
│   ├── Settings.py         # 讟眮
│   └── Changelog.py        # 版本曎新日志
├── scripts/
│   ├── daily_job.py        # 定时任务入口GH Actions cron 调甚
│   ├── wyckoff_funnel.py   # 党垂场挏斗筛选
│   ├── step3_batch_report.py  # AI 研报
│   ├── step4_rebalancer.py    # 私人决断
│   ├── web_background_job.py  # Web 后台任务执行入口
│   ├── premarket_risk_job.py  # 盘前风控预譊
│   └── backtest_runner.py  # 日线蜻量回测
├── tools/                  # 可倍甚工具凜数Agent / scripts 共享
│   ├── data_fetcher.py     # 数据拉取蟅助
│   ├── report_builder.py   # 研报拌装蟅助
│   ├── debug_io.py         # 暡型蟓入萜盘DEBUG_MODEL_IO
│   └── ...
├── tests/
│   ├── agents/             # Agent 层测试
│   └── ...                 # 现有单元测试
├── requirements.txt
└── .env.example

盘前风险䞎垂场信号栏

  • 盘前风控任务䌚绌合 A50 + VIX 刀断倖郚风险并蟓出 NORMAL / CAUTION / RISK_OFF / BLACK_SWAN 四档结果。
  • Web 端䌚将"盘后倧盘氎枩"侎"盘前倖郚风险"融合成䞀条顶郚垂场信号栏统䞀按"最新亀易日"口埄展瀺䞍芁求甚户理解内郚工皋标筟。
  • 页面展瀺采甚 A 股垞甚颜色习惯䞊涚偏红、䞋跌偏绿VIX 恐慌抬升也䌚按防守方向星瀺。

亀易日䞎时闎窗口

按亀易日计算自劚跳过呚末䞎节假日。

  • 结束日北京时闎口埄
    • 17:00-23:59 → 取 T圓倩
    • 00:00-16:59 → 取 T-1䞊䞀自然日
  • 最终䌚对霐到最近亀易日自劚跳过呚末䞎节假日
  • 匀始日从结束日向前回溯 N 䞪亀易日默讀 320
  • 参数--trading-days、--end-offset-days

CSV 蟓出诎明

  • hist_data.csvakshare 原始字段日期、匀高䜎收、成亀量、成亀额、振幅、换手率等
  • ohlcv.csv增区版OHLCV + 均价、行䞚䟿于回测䞎可视化

倍权

--adjust"" 䞍倍权qfq 前倍权hfq 后倍权。

python -m integrations.fetch_a_share_csv --symbol 300364 --adjust qfq

垞见问题

  • ImportError: create_client from supabase → pip install supabase>=2.0.0
  • macOS pip externally-managed-environment → 甚虚拟环境安装䟝赖
  • 文件名有空栌 → 股祚名本身垊空栌脚本䌚做安党替换

AI 分析

  • 对话匏分析通过銖页智胜对话或 CLI甚自然语蚀觊发䞪股诊断、研报生成等分析胜力
  • 批量代码分析GitHub Actions 后台执行
  • 挏斗候选分析先圚后台 Funnel 页埗到候选再提亀后台批量研报

RAG 防雷莟面舆情过滀

每日选股流皋䞭集成 RAG 防雷暡块自劚过滀有莟面舆情的股祚

  • 数据源Tavily 新闻搜玢劂未配眮则跳过
  • 默讀莟面关键词立案、调查、证监䌚、倄眚、违规、造假、退垂、减持、莚抌爆仓、债务违纊、䞚绩预亏、䞚绩䞋滑、商誉减倌、诉讌、仲裁、冻结等
  • 配眮TAVILY_API_KEY 环境变量

数据源降级机制

䞪股日线䌘先䜿甚 tushare固定前倍权 qfq倱莥时䟝次降级

tushare → akshare → baostock → efinance
  • TUSHARE_TOKEN 未配眮时自劚跳过回退到 akshare 䌘先
  • 指数/倧盘数据始终 tushare 盎连确保皳定性
  • 可通过环境变量按需犁甚各源DATA_SOURCE_DISABLE_AKSHARE=1 / DATA_SOURCE_DISABLE_BAOSTOCK=1

自定义富出支持的数据源

数据源 诎明 倍权支持
A股䞪股历史 日线 K 线6 䜍代码 ✅
指数历史 䞊证/深证/创䞚板/北证 ❌
ETF 历史 510300 / 159707 等 ✅
宏观 CPI 月床 CPI 指标 ❌

Fork 䞎郚眲

  1. Fork 本仓库克隆到本地
  2. 按䞊文配眮 .env 后运行
  3. 郚眲到 Streamlit Cloud入口选 streamlit_app.py
  4. 至少配眮 SUPABASE_URL、SUPABASE_KEY、COOKIE_SECRET
  5. 若芁启甚页面内的后台挏斗/后台批量 AI再额倖配眮 GITHUB_ACTIONS_TOKEN

Open in Streamlit


版本曎新

诊见 CHANGELOG.md。Web 端「版本曎新日志」页面盎接读取该文件。


匀源协议 | License

本项目基于 GNU Affero General Public License v3.0 (AGPL-3.0) 匀源。

  • ✅ 䞪人孊习、研究、自甚自由䜿甚
  • ✅ 修改和再分发需保持同样的 AGPL-3.0 协议并匀源
  • ✅ 通过眑络提䟛服务SaaS必须向甚户公匀完敎源代码
  • 📧 联系方匏可通过埮信/飞乊或 GitHub Issue 联系

Copyright (c) 2024-2026 youngcan.


Star History

Star History Chart

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

youngcan_wyckoff_analysis-0.1.5.tar.gz (325.9 kB view details)

Uploaded Source

Built Distribution

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

youngcan_wyckoff_analysis-0.1.5-py3-none-any.whl (329.6 kB view details)

Uploaded Python 3

File details

Details for the file youngcan_wyckoff_analysis-0.1.5.tar.gz.

File metadata

  • Download URL: youngcan_wyckoff_analysis-0.1.5.tar.gz
  • Upload date:
  • Size: 325.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for youngcan_wyckoff_analysis-0.1.5.tar.gz
Algorithm Hash digest
SHA256 f33eec4dcb0856b718201e9535d14a3f3620ca28116abdce8bad3a7a7ba37477
MD5 7c28ba2be2f6db7e0b3401fc047d2eeb
BLAKE2b-256 2facaa5eab19aa6b9bbb309f949bdc81e3386ef1c1727e3cd040dd97088254c8

See more details on using hashes here.

File details

Details for the file youngcan_wyckoff_analysis-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: youngcan_wyckoff_analysis-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 329.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for youngcan_wyckoff_analysis-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 bf75df0fab274f67c310ca4b4eae8fb5e2705e958dfa1b150d8ed1689088a880
MD5 b015e01b944b5ada902d0719e1ce4088
BLAKE2b-256 a7058dfba08381a8727db3fac91f391ed09dfcba19343f7f3f2c094d8d4bb476

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