ma-pony
cryptotrader-ai
Python

加密货币 AI 自动交易与回测系统 · LangGraph 多代理辩论 + 硬性风控 + 决策日志 | AI-powered crypto trading & backtest with LangGraph multi-agent debate, hard risk controls, and Decision Journal

Last updated Jun 26, 2026
10
Stars
1
Forks
14
Issues
0
Stars/day
Attention Score
46
Language breakdown
No language data available.
Files click to expand
README

CryptoTrader AI

简体中文 · English

基于 LangGraph 多智能体辩论的 AI 加密货币交易系统。

Python 3.12+ License: MIT [Tests]()

概述

4 个专业 AI 智能体(技术面、链上数据、新闻情绪、宏观经济)独立分析市场数据,然后通过交叉挑战辩论轮次达成共识。硬编码的风控门(11 项规则检查,不依赖 LLM)强制执行仓位限制、损失限制和熔断机制。每个决策都记录在类 Git 的决策日志中,便于审计和基于经验的学习。

每个智能体在输出信号前都会运行领域专属的预信号检查清单(受 Devin 的先思后行模式启发),以减少过度自信和幻觉。

核心特性

  • 多智能体辩论 — 4 个智能体独立分析后,经辩论门控渐进过滤:共识或迷茫时跳过辩论,否则进入 2-3 轮并行交叉质疑
  • 三种图模式 — 完整辩论流程(含辩论门控)、轻量回测、多空对抗+评委
  • 11 项风控检查 — 纯规则,零 LLM:仓位限制、CVaR、相关性、熔断器
  • 决策日志链 — 类 Git 不可变提交链,存于 PostgreSQL decision_commits,支持相似搜索
  • 配置驱动 prompt — 4 agent 的 systemprompt / outputschema / token budget 全部外置到 config/agents/<name>.md,由 PromptBuilder 在运行时拼装
  • EvolvingSkillProvider(spec 019)— 两层检索(scope + regimetags 过滤 → idf + importance + recency 打分)从 agentskills/_internal/<id>/SKILL.md 选 top-k skill 进 prompt
  • Trilogy 进化系统(spec 016 → 020c)— 8 spec 累计:PromptBuilder + Memory Evolution(5-signal Maturity FSM)+ Skill Evolution + Pareto + Git Lineage + Evolution Daemon(每日 Pareto + Regime + Skill proposal)
  • Agent-Native Skill Protocol(spec 022)— 外部 Anthropic SKILL.md 协议:agentskills/external/{cryptotrader,verdict-feed,market-intel,evolution-insights,execution-replay}/ 让外部 agent 通过 Read /skill/cryptotrader 秒级集成;/api/events/heartbeat pull-mode 事件订阅;/api/memory/patterns 暴露 trilogy 产出
  • 强制 numeric SL/TP — LLM verdict 必须输出 stoploss + takeprofit 数字字段;missing / 方向反 / 过紧 / R:R < 1.5 → action 强制 hold
  • 回测引擎 — 历史模拟,含真实成本建模和防前视偏差
  • 实盘就绪 — 基于 ccxt 的 OKX perp 适配器,带重试、精度处理、配置驱动 perp 杠杆(setleverage 幂等重试 + longshort_mode 双侧应用)+ server-side OCO 保护
  • APScheduler 自动化 + Watchdog — 4 小时周期交易循环;scheduler watchdog 每 5min 检查 lastsuccessfulcycleat,超过 1.5× interval 强制 modifyjob reschedule,根治 IntervalTrigger silent miss 问题(生产 3 次自愈验证)
  • 61+ 数据源 — 统一 SQLite 存储,覆盖 7 个类别,按源独立限速
  • 可观测性优先 — 拒单事件携带 root cause 异常信息([ConnectionError: ...]);执行层失败与风控解耦(executionstatus vs riskgate);CI 守护禁止 logger.debug(..., exc_info=True) 吞异常
  • 完整 Anthropic prompt cache 观测applycachecontrol() 生产级;OTel span attr llm.cache.{read,creation,hitrate};Prometheus llmcachehitrate24havg gauge + 3 个 spec 022 heartbeat / external skill fetch gauge
  • Close 风控豁免 + cooldown fallbackclose 动作豁免全部风控("risk reduction must not be blocked");OKX venue cooldown 时 buildcloseorder 自动 fallback 到 positioncontext(DB),不会 silent drop(commit fc9211d)
  • Live steering — 用户实时引导通过 Redis 队列注入 live_steering section,每 cycle 即用即丢,不形成闭环

系统架构

数据采集 → tag_regime → 4 智能体(并行)
  → 辩论门控 → [跳过] → 上下文丰富 → 裁决
             → [辩论] → 2 轮辩论(轮内并行)
  → 裁决(含 SL/TP hard-reject)→ 风控门(11 项检查)→ 执行 / 拒绝 → 日志记录
                                                          ↓
                                                持仓回写 → 快照保存

三种图模式:

  • buildtradinggraph() — 完整流程,含辩论门控(共识/迷茫时跳过辩论)、2 轮辩论、AI 裁决可降级
  • buildlitegraph() — 跳过辩论,用于回测
  • builddebategraph() — 多空对抗辩论 + 评委(TradingAgents 风格)

智能体分工

| 智能体 | 类型 | 数据 | 职责 | |--------|------|------|------| | TechAgent | BaseAgent | OHLCV + pandas-ta 指标(RSI、MACD、SMA、BBands、ATR)| 技术形态识别 | | ChainAgent | ToolAgent | OI、资金费率、交易所净流量、鲸鱼转账、DeFi TVL | 链上信号检测 | | NewsAgent | ToolAgent | RSS 标题 + 关键词情绪 + CoinGecko 社交热度 | 新闻情绪分析 | | MacroAgent | BaseAgent | 利率、美元指数、BTC 主导率、恐惧贪婪、ETF 流量、VIX | 宏观环境评估 |

  • BaseAgent:单次 LLM 调用,结构化 JSON 输出
  • ToolAgent:LangChain 代理,带工具调用循环,可实时查询数据(回测模式下降级为单次调用,避免前视偏差)
每个智能体的系统提示都包含 5 点预信号检查清单:矛盾检查、证据落地、信心合理性、基准概率意识、近因偏差防范。data_sufficiency="low" 时信心值上限为 0.3。

辩论流程

  • 第 1 轮:4 个智能体独立分析
  • 辩论门控:评估智能体共识程度;达成共识或极度迷茫时跳过辩论直接进入裁决,否则进入辩论轮次
  • 第 2-3 轮(轮内并行):每个智能体看到其他人的分析结果,必须用具体数据点支持自己保持或修改立场
  • 收敛检查:每轮计算分歧度(confidence × direction 的总体标准差),相对变化 < 10% 或达到最大轮数时停止
  • 裁决:单个 LLM(temperature=0.1)综合所有智能体输出、持仓上下文(空仓/多头/空头、入场价、浮动盈亏)、价格趋势和风控约束 → 输出 {action, confidence, positionscale, reasoning, thesis, stoploss, take_profit}

Prompt 与技能系统

  • 目录拓扑(spec 022 重组):
- agentskills/internal/{tech,chain,news,macro,trading-knowledge}/SKILL.md — 注入 agent prompt 的内部能力 - agentskills/external/{cryptotrader,verdict-feed,market-intel,evolution-insights,execution-replay}/SKILL.md — 暴露给外部 AI agent(Codex / Cursor / Claude Code)的对外协议
  • Skill 检索EvolvingSkillProvider 读取 agentskills/internal/<id>/SKILL.md,按 scope + regimetags 过滤,按 idf + importance + recency 打分,取 top-5 注入 agent prompt 的 availableskills section;accesscount / lastaccessed_at 写入 gitignored sidecar
  • Skill 内容:人工维护 git-tracked Markdown 文件,仅含角色 + 思路 + checklist;不含历史 case dump、不含方向预测、不含数字阈值
  • Regime 标签tagregime() 把当前 snapshot 分类为离散标签(highfunding / highvol / trendingup / extreme_fear 等),用于 skill retrieval 过滤
  • SL/TP 强约束:verdict 输出的 stoploss + takeprofit 必须是数字,且通过 4 道 hard-reject:missing → hold / 方向反(long 但 stop ≥ entry)→ hold / stop 距离 < max(1.5×ATR, 1%) → hold / R:R < 1.5 → hold
  • Live steering:用户通过前端 chat 实时引导,写入 Redis 队列;cycle 启动时一次性消费并注入 live_steering section,cycle 结束失效
  • Agent-Native 集成(spec 022):外部 agent 单条 Read http://host:8003/skill/cryptotrader and register → 自动拉 bootstrap SKILL.md → 路由到 child skill → 调 /api/memory/patterns / /api/events/heartbeat / /api/verdicts/recent

快速开始

前置条件

  • Python 3.12+
  • uv 包管理器
  • 一个兼容 OpenAI 的 LLM API Key(OpenAI、Anthropic、DeepSeek 等)

安装

# 克隆并安装
git clone https://github.com/your-org/cryptotrader-ai.git
cd cryptotrader-ai
uv sync

配置 LLM 端点

cp config/default.toml config/local.toml

编辑 config/local.toml:设置 [llm] apikey 和 baseurl

或使用环境变量

export OPENAIAPIKEY=your_key

首次运行

# 运行单次分析(模拟交易)— 推荐 perp 线性合约(spot 账户无库存时无法做空)
arena run --pair BTC/USDT:USDT --mode paper

切换图模式

arena run --pair BTC/USDT:USDT --graph full # 含辩论门控 + 2 轮辩论 arena run --pair BTC/USDT:USDT --graph lite # 跳辩论(回测用) arena run --pair BTC/USDT:USDT --graph debate # 多空对抗 + 评委

查看决策日志

arena journal log --limit 10 arena journal show <hash>

回测

# AI 智能体回测
arena backtest --pair BTC/USDT --start 2024-01-01 --end 2024-06-01 --interval 4h

快速 SMA 交叉回测(无 LLM 调用)

arena backtest --pair BTC/USDT --start 2024-01-01 --end 2024-06-01 --no-llm

先同步历史数据,回测数据更丰富

arena sync

回测引擎特性:

  • 防前视偏差:bar[i] 生成信号,bar[i+1] 开盘执行
  • 真实成本:可配置滑点(5 bps)+ 手续费(10 bps)
  • 动态仓位:高信心 35%、中等 12%、低 6%
  • 丰富数据:ETF 流量、OI、多空比、DeFi TVL、VIX、S&P500、稳定币供应、哈希率
  • 指标输出:总收益、夏普比率(365 天年化)、最大回撤、胜率、权益曲线

调度器

# 启动周期性交易循环(需 config 中 scheduler.enabled=true)
arena scheduler start

查看组合状态

arena scheduler status

基于 APScheduler,IntervalTrigger(默认 4 小时,与 OKX perp 4h K 线 + funding 周期对齐)执行交易循环,CronTrigger 发送每日组合摘要。

Scheduler Watchdog(spec post-022 fix,commit 57eb884):AsyncIOSchedulernextfiretime 偶发被卡在过去时间戳导致 cycle 静默 miss。watchdog 每 5min 检查 lastsuccessfulcycleat,超过 1.5 × intervalminutes 视为 silent miss → modifyjob("tradingcycle", nextruntime=now+10s) 强制重排。生产 3 次实战自愈,0 人工干预。

仪表盘 & API

# Web 前端(React + Vite)
arena web --port 5173

FastAPI 服务

arena serve --port 8003

CLI 命令参考

| 命令 | 说明 | |------|------| | arena run --pair BTC/USDT --mode paper | 单次分析 + 执行 | | arena run --pair BTC/USDT --graph full\|lite\|debate | 选择图模式 | | arena backtest --pair BTC/USDT --start DATE --end DATE | 历史回测 | | arena sync | 同步所有历史数据到 SQLite | | arena serve --port 8003 | 启动 FastAPI 服务 | | arena web | 启动 React Web 前端 | | arena scheduler start | 启动周期调度器 | | arena scheduler status | 查看组合和仓位 | | arena journal log --limit 10 | 最近决策列表 | | arena journal show <hash> | 决策详情 | | arena migrate | 创建 PostgreSQL 表 | | arena risk reset-breaker | 重置熔断器 | | arena live-check --exchange okx | 实盘就绪检查 |

数据源

行情与链上

5 个数据源,支持优雅降级(无 API Key 也能运行):

| 数据源 | 数据 | 成本 | 需要 Key | |--------|------|------|---------| | Binance | 期货 OI、资金费率、清算、多空比 | 免费 | 否 | | DefiLlama | DeFi TVL、7 日变化、稳定币供应 | 免费 | 否 | | CoinGlass | 持仓量、清算数据 | 免费层(1000 次/月)| 是 | | CryptoQuant | 交易所净流入流出 | 免费层(每日)| 是 | | Whale Alert | 大额转账 | 免费层(10 次/分钟)| 是 |

新闻与情绪

| 数据源 | 数据 | 成本 | |--------|------|------| | CoinDesk, CoinTelegraph, Decrypt | RSS 标题抓取 | 免费 | | CoinGecko 社区 API | 社交热度(Twitter 粉丝、Reddit 订阅、情绪投票)| 免费 |

宏观

| 数据源 | 数据 | 成本 | |--------|------|------| | FRED | 美联储利率、美元指数、VIX、S&P 500 | 免费(需 Key)| | CoinGecko | BTC 主导率 | 免费 | | Alternative.me | 恐惧贪婪指数 | 免费 | | SoSoValue | BTC/ETH ETF 日流量、净资产 | 免费(需 Key)|

统一数据存储

所有数据缓存在 ~/.cryptotrader/market_data.db(SQLite,WAL 模式):

  • 61+ 数据源,覆盖 7 个类别(宏观、链上、衍生品、DeFi、情绪、ETF、稳定币)
  • 按源独立限速(5 分钟到 1 小时 TTL)
  • 交易日数据前向填充(FRED、ETF),处理周末和假期
  • arena sync 批量拉取全部历史数据用于回测

配置

配置文件

config/
├── default.toml          # 主配置(模式、模型、风控、调度器、数据源)
├── local.toml            # 本地覆盖(API Key,已 gitignore)
└── exchanges.toml.example  # 交易所凭证模板

先加载 default.toml,再深度合并 local.toml。首次加载后全局缓存。

关键配置段

[llm]
api_key = ""           # 统一 LLM API Key
base_url = ""          # API 端点(如 "http://localhost:3000/v1")

[models] # 按角色选择模型 — 模型名必须存在于 LLM 网关 analysis = "deepseek-v4-flash" debate = "deepseek-v4-flash" verdict = "gpt-5.5" tech_agent = "deepseek-v4-flash" chain_agent = "deepseek-v4-flash" news_agent = "deepseek-v4-flash" macro_agent = "deepseek-v4-flash" fallback = "deepseek-v4-flash"

任何留空字段会回退到 models.analysis → models.fallback

[debate] max_rounds = 3 convergence_threshold = 0.1 gateconsensusthreshold = 0.8 # 分歧度低于此值时跳过辩论(共识) gateconfusionthreshold = 0.05 # 分歧度高于此值时跳过辩论(迷茫)

[risk] maxstoploss_pct = 0.05

默认(多 pair 分散):

[risk.position] maxsinglepct = 0.10 maxtotalexposure_pct = 0.50 maxmarginused_pct = 0.40

BTC-only 集中模式生产实参(config/local.toml 覆盖;spec 022 post-stamp 调整):

[risk.position]

maxsinglepct = 0.80

maxtotalexposure_pct = 4.00 # 5x 杠杆 × 80% single → 总 notional 上限

maxmarginused_pct = 0.90

maxsamedirection_positions = 1 # BTC 是唯一 pair

[risk.loss] maxdailyloss_pct = 0.03 maxdrawdownpct = 0.10

[scheduler] enabled = false pairs = ["BTC/USDT:USDT"] # BTC-only 集中策略;perp 线性合约 interval_minutes = 240 # 4h 周期,与 OKX perp 4h K 线 + funding 8h 对齐 exchange_id = "okx" # 生产用 OKX perp dailysummaryhour = 0 # UTC 小时(0-23)

[exchanges.okx] # 在 config/local.toml 中(gitignored) api_key = "..." secret = "..." passphrase = "..." sandbox = true # demo trading 环境 leverage = 5 # BTC-only 5x(波动较 alts 低,单笔 SL 1.5×ATR ≈ 4% notional) margin_mode = "isolated" # OKX: "isolated" | "cross"

[portfolio] initialcapital = 0.0 # 0 = 用首次 portfoliosnapshots 作为总收益基线; # 推荐 pin 实际本金(如 100000),中途充提不失真

[experience.regime_thresholds]

Snapshot regime classification thresholds (used by tag_regime).

high_funding = 0.0003 negative_funding = -0.0001 high_vol = 0.025 low_vol = 0.010 trending_up = 0.05 trending_down = -0.05 extremefearfng = 25 extremegreedfng = 75

环境变量

# ── API 鉴权(生产必须)──

默认 AUTHMODE=enabled — APIKEY 必须设置,否则进程启动失败。

AUTH_MODE=disabled 仅作 dev opt-out(每请求打 WARNING 日志)。

AUTH_MODE=enabled API_KEY=$(openssl rand -hex 32)

── 链上数据源(可选但推荐)──

缺 key 时 provider 返 None;chain_agent prompt 会被告知哪些数据源

不可用,自动降低 data_sufficiency。

COINGLASSAPIKEY=your_key CRYPTOQUANTAPIKEY=your_key WHALEALERTAPIKEY=yourkey FREDAPIKEY=your_key

── 基础设施(用 CRYPTOTRADERINFRASTRUCTURE_* 前缀注入 config)──

CRYPTOTRADERINFRASTRUCTUREDATABASEURL=postgresql+asyncpg://... CRYPTOTRADERINFRASTRUCTUREREDISURL=redis://localhost:6379

── 前端(生产构建拒绝 VITEAPIKEY)──

仅 dev .env.local 用一次性 hydrate 进 useSettingsStore

VITEAPIBASE_URL=http://localhost:8003

VITEAPIKEY= (仅 dev;生产用户在 Settings UI 输入)

风控门

11 项规则检查(不依赖 LLM),全部可在 config/default.toml[risk] 段配置:

| 检查项 | 功能 | 默认值 | |--------|------|--------| | 最大单仓位 | 限制单个仓位占组合比例 | 10% | | 总敞口 | 限制总敞口 | 50% | | 日损失限制 | 日损失达到阈值触发熔断 | 3% | | 最大回撤 | 深度回撤期间拒绝交易 | 10% | | CVaR (99%) | 基于近期收益的条件风险价值 | 5% | | 相关性 | 阻止高度相关的仓位(14 个硬编码组)| — | | 冷却时间 | 同一交易对的最小交易间隔 | 60 分钟 | | 亏损后冷却 | 亏损交易后的额外冷却 | 120 分钟 | | 波动率 | 极端波动或闪崩时拒绝 | — | | 资金费率 | 资金费率异常时阻止(拥挤信号)| — | | 频率限制 | 每小时/每天交易次数上限 | — | | 交易所健康 | 执行前检查 API 延迟 | — |

close 动作(平仓)豁免全部风控检查 — 减仓是降低风险,不应被阻断。

通知

6 种事件类型的 Webhook 通知(在 config/default.toml 配置):

| 事件 | 触发条件 | |------|---------| | trade | 订单成功成交 | | rejection | 风控门拒绝交易 | | circuit_breaker | 日损失限制触发熔断 | | daily_summary | 调度器每日发送组合摘要 | | reconcile_mismatch | 仓位对账发现不一致 | | portfolio_stale | 组合数据过期或不可用 |

API & 认证

FastAPI 自动 OpenAPI:arena serve --port 8003 启动后访问 http://localhost:8003/docs 看 Swagger UI,/redoc 看 ReDoc。对外协议层的 Anthropic SKILL.md 入口 GET /skill/<name>(无认证,公开)— 5 个 child skill:cryptotrader / verdict-feed / market-intel / evolution-insights / execution-replay

认证:默认 AUTHMODE=enabledAPIKEY env 必须设置;缺失则进程启动失败。AUTHMODE=disabled 仅作 dev opt-out(每请求 WARNING 日志)。所有比较使用 secrets.comparedigest(防时序攻击)。限流:60 次/分钟/IP,配置 Redis 时为多进程安全 fixed window;单进程 dev 降级内存。CORS:显式 allowmethods / allowheaders allowlist(与 allow_credentials=true 配合)。

执行层

模拟交易

  • 默认模式,不涉及真实资金
  • 可配置初始余额(默认 $10,000)
  • 滑点模型:base + amount × price × 1e-8
  • 通过 asyncio.Lock 保证线程安全

实盘交易

生产级加固的 LiveExchange,封装 ccxt:

  • 重试机制:指数退避(3 次),致命错误不重试(认证、权限、余额不足)
  • 余额预检:每次下单前验证可用余额
  • 精度处理:应用交易所特定的 amounttoprecision() / pricetoprecision()
  • 最小下单量:检查交易所市场限制
  • 超时控制:每 2 秒轮询,30 秒后自动撤单
  • 飞行前检查arena live-check 验证凭证、API 延迟、Redis 和数据库
# 验证实盘就绪状态
arena live-check --exchange okx

Docker 部署

# 启动全套服务(PostgreSQL 16 + Redis 7 + API + 前端 + 调度器 + 反向代理)
docker compose up -d

服务清单(docker-compose.yml):

postgres — 决策日志 + 组合持久化

redis — 风控状态 + 冷却 + 熔断器

api — FastAPI :8003(含 scheduler 内嵌 + watchdog)

web — React 前端 :5173

scheduler — 独立 scheduler 进程(与 api 互斥;二选一)

caddy — 反向代理 + TLS

Dockerfile 使用多阶段构建 + 非 root 用户。健康检查每 30 秒轮询 /health

项目结构

src/cryptotrader/
├── models.py          # 所有数据模型(DataSnapshot, AgentAnalysis, TradeVerdict, Order 等)
├── config.py          # TOML 配置加载 + 数据类验证
├── graph.py           # LangGraph 编排(3 种图模式)
├── state.py           # ArenaState TypedDict + buildinitialstate() 工厂
├── scheduler.py       # APScheduler 周期性交易循环 + 每日摘要
├── notifications.py   # Webhook 通知(6 种事件)
├── db.py              # 共享 async DB session 工厂
├── data/
│   ├── store.py       # 统一 SQLite 存储(61+ 源,按源限速)
│   ├── snapshot.py    # SnapshotAggregator(数据聚合入口)
│   ├── market.py      # ccxt OHLCV + ticker + 资金费率 + 波动率
│   ├── onchain.py     # 聚合 5 个数据源(并行获取)
│   ├── news.py        # RSS + 关键词情绪 + CoinGecko 社交热度
│   ├── macro.py       # FRED + CoinGecko + 恐惧贪婪 + SoSoValue ETF
│   ├── sync.py        # 批量历史同步(arena sync)
│   └── providers/     # Binance, DefiLlama, CoinGlass, CryptoQuant, WhaleAlert, SoSoValue
├── agents/
│   ├── base.py        # BaseAgent + ToolAgent + create_llm() 工厂
│   ├── tech.py        # TechAgent(pandas-ta 指标)
│   ├── chain.py       # ChainAgent(ToolAgent + 链上工具)
│   ├── news.py        # NewsAgent(ToolAgent + 新闻工具)
│   ├── macro.py       # MacroAgent(宏观环境分析)
│   └── data_tools.py  # LangChain @tool 定义(6 链上 + 3 新闻)
├── debate/
│   ├── challenge.py   # 交叉挑战 prompt 构建
│   ├── convergence.py # 分歧度计算 + 收敛检测
│   ├── verdict.py     # AI 裁决(LLM)+ 规则裁决(回测)
│   └── researchers.py # 多空对抗辩论 + 评委
├── nodes/             # LangGraph 节点函数
│   ├── agents.py      # 4 智能体并行
│   ├── data.py        # 数据采集 + PnL 更新 + 趋势上下文
│   ├── debate.py      # 辩论轮次 + 收敛路由
│   ├── verdict.py     # 裁决 + 风控检查
│   ├── execution.py   # 下单 + 止损 + 仓位更新
│   └── journal.py     # 日志记录
├── risk/
│   ├── gate.py        # RiskGate(11 项顺序检查)
│   └── state.py       # RedisStateManager(含内存降级)
├── execution/
│   ├── simulator.py   # PaperExchange(模拟交易)
│   ├── exchange.py    # LiveExchange(ccxt,生产级加固)
│   ├── order.py       # OrderManager(状态机)
│   └── reconcile.py   # 仓位对账
├── portfolio/
│   └── manager.py     # PortfolioManager(DB + 内存)
├── journal/
│   ├── store.py       # JournalStore(PostgreSQL + 内存降级)
│   └── commit.py      # DecisionCommit 不可变哈希链 schema
├── learning/
│   ├── regime.py             # tag_regime(市场 regime 标签)
│   └── evolution/
│       ├── skill_provider.py # EvolvingSkillProvider(scope + regime + idf 两层检索)
│       └── idf.py            # IDF + keyword 提取
└── backtest/
    ├── engine.py      # BacktestEngine(LLM + SMA 模式)
    ├── session.py     # 回测会话存储(commits.jsonl + result.json)
    ├── cache.py       # OHLCV SQLite 缓存
    ├── historical_data.py  # FnG、资金费率、FRED、期货成交量
    └── result.py      # BacktestResult 指标
src/cli/main.py        # Typer CLI(arena 命令)
src/api/               # FastAPI 服务(认证、限流、中间件)
web/                   # React 19 + Vite 8 前端(仪表盘、决策、回测、风控、指标)
agent_skills/
├── _internal/         # 注入 agent prompt 的内部能力(spec 019/022)
│   ├── tech-analysis/SKILL.md
│   ├── chain-analysis/SKILL.md
│   ├── news-analysis/SKILL.md
│   ├── macro-analysis/SKILL.md
│   └── trading-knowledge/SKILL.md
└── _external/         # 对外 Anthropic SKILL.md 协议(spec 022)
    ├── cryptotrader/SKILL.md       # bootstrap + child 路由
    ├── verdict-feed/SKILL.md
    ├── market-intel/SKILL.md
    ├── evolution-insights/SKILL.md
    └── execution-replay/SKILL.md

技术栈

| 组件 | 技术 | |------|------| | 语言 | Python 3.12+ | | 包管理 | uv + Hatchling | | LLM 编排 | LangChain 1.2+ / LangGraph 1.0+ | | LLM 提供商 | ChatOpenAI(兼容 OpenAI、DeepSeek、Anthropic)| | 交易所连接 | ccxt(Binance、OKX 等)| | 数据处理 | pandas + pandas-ta + numpy | | 调度 | APScheduler 3.x | | 数据库 | PostgreSQL 16 + SQLAlchemy 2.0 async | | 缓存/状态 | Redis 7 | | 本地存储 | SQLite(市场数据存储 + LLM 响应缓存)| | API 服务 | FastAPI + Uvicorn | | 仪表盘 | React 19 + Vite 8 + TypeScript 5.9 | | CLI | Typer + Rich |

开发

make install          # uv pip install -e ".[dev]"
make test             # uv run pytest tests/ -v(2279 个测试)
make lint             # ruff check src/ tests/
make format           # ruff format src/ tests/
make scheduler        # arena scheduler start
make pre-commit-run   # 运行所有 pre-commit 钩子

运行单个测试

uv run pytest tests/testriskgate.py -v uv run pytest tests/testriskgate.py::testmaxposition -v

Docker 基础设施

docker compose up -d # PostgreSQL 16 + Redis 7 arena migrate # 创建数据库表 arena sync # 同步历史数据

代码质量

  • 零 lint 错误ruff check src/ tests/ 必须零错误通过
  • 禁止 noqa 注释:遇到 C901 必须重构(阈值 = 10)
  • 2279 个测试(spec 022 stamp 时基线),9 pre-existing failures 与本 spec 无关
  • 异步测试asyncio_mode = "auto" — 无需 @pytest.mark.asyncio
  • 必须用 uv run pytest(Python 3.12 venv),不要用裸 pytest

许可证

MIT

🔗 More in this category

© 2026 GitRepoTrend · ma-pony/cryptotrader-ai · Updated daily from GitHub