Skip to content

add paper trading - #14

Open
wellzero wants to merge 20 commits into
atompilot:mainfrom
wellzero:main
Open

add paper trading#14
wellzero wants to merge 20 commits into
atompilot:mainfrom
wellzero:main

Conversation

@wellzero

Copy link
Copy Markdown
Contributor

No description provided.

wellzero and others added 20 commits July 10, 2026 22:43
- 实现 PaperAccount / PaperQuantTrader,API 与 xtquant.xttrader 对齐

- 支持多账户隔离、静态/xtdata/回退价格源、即时撮合

- 每笔委托写入 CSV,每笔成交更新 JSON 业绩摘要

- 提供 /api/paper_accounts 配置接口与 /api/paper_trading 交易接口

- 新增 QMT_BRIDGE_PAPER_TRADING_* 配置与 --paper-trading CLI 参数

Co-Authored-By: Claude <noreply@anthropic.com>
- 新增 docs/paper-trading.md,含架构图、时序图、模块职责、数据格式

- 在 mkdocs.yml 导航中加入模拟交易页面

Co-Authored-By: Claude <noreply@anthropic.com>
- StaticPriceSource.download_prices 调用 xtquant.xtdata.get_full_tick
- 新增 _extract_price_from_tick 价格字段提取,兼容 lastPrice/close/open
- PaperTraderManager 封装 download_prices,更新账户 static_prices 配置
- REST 新增 POST /api/paper_accounts/{account_id}/download_prices
- docs/paper-trading.md 补充下载价格调用流程与端点说明
- tests/test_paper_trading.py 增加 engine/manager/router 三级 mock 测试

Co-Authored-By: Claude <noreply@anthropic.com>
- BaseClient 新增 paper 参数,TradingMixin 根据 paper 切换 /api/paper_trading/* 端点
- lumibot QMTBridgeBroker 透传 paper 配置(配合 QMT_BRIDGE_PAPER 环境变量)
- 新增 scripts/run_paper_strategy_test.py 支持单/多策略并发模拟交易测试
- 新增 tests/test_client_paper.py 覆盖 paper 端点路由

Co-Authored-By: Claude <noreply@anthropic.com>
- PaperTradingStorage 按 {data_dir}/paper_trading/{account_id}/order/ 与 summary/ 分层
- 兼容历史配置:若 data_dir 已以 paper_trading 结尾则不再追加
- 删除账户时同步清理空账户目录
- docs/paper-trading.md 更新数据路径说明与架构图
- 新增 test_storage_folder_structure 验证目录结构

Co-Authored-By: Claude <noreply@anthropic.com>
- 新增 docs/paper-trading-guide.md,覆盖启用方式、账户管理、下单查询、
  价格下载、lumibot 策略对接、目录结构与常见问题
- 更新 mkdocs.yml,将模拟交易文档分为使用指南与架构详解两组
- 修复 ruff lint 错误(未使用导入、歧义变量名等)
- 对 src/ 与 tests/ 执行 ruff format 统一格式
- 版本号升级至 2.9.5

Co-Authored-By: Claude <noreply@anthropic.com>
- 在单策略运行示例后增加 .env 加载顺序注意事项
- 说明如何处理 load_dotenv(override=True) 覆盖策略目录 .env 的问题

Co-Authored-By: Claude <noreply@anthropic.com>
- papertrader.py: 增加账户加载/创建/重置/删除、下单、成交、撤单日志
- engine.py: 增加价格解析、撮合失败原因、资金/持仓变动、持仓价格刷新日志
- manager.py: 增加账户管理、价格下载、下单撤单、资产查询日志
- storage.py: 增加配置/CSV/摘要写入与文件删除日志
- 版本号升级至 2.9.6

Co-Authored-By: Claude <noreply@anthropic.com>
- 新增 scripts/download_paper_prices.py,支持从策略文件提取股票列表
  或直接指定股票代码,调用 /api/paper_accounts/{id}/download_prices
  为模拟交易账户下载静态价格
- 更新 justfile,增加 download-paper-prices 快捷命令
- 版本号升级至 2.9.7

Co-Authored-By: Claude <noreply@anthropic.com>
- PaperAccountConfig 新增 auto_download_prices 开关,默认开启
- PaperQuantTrader.order_stock() 在 static/fallback 源价格缺失时,
  自动调用 xtquant.xtdata.get_full_tick 下载并持久化到账户配置
- 下载成功后刷新价格源,避免市价单直接废单

Co-Authored-By: Claude <noreply@anthropic.com>
- PaperQuantTrader 新增 _sync_accounts_from_storage(),扫描数据目录中
  存在 summary.json 但 config.json 里没有的账户,自动重建默认配置
- PaperTraderManager.connect() 在加载配置后调用同步,避免 config.json
  被覆盖/还原后账户目录残留但配置丢失的问题
- 已把之前手动的 config.json 修改回退,改由服务端在启动时自动修复

Co-Authored-By: Claude <noreply@anthropic.com>
- PaperTraderManager 新增 _ensure_account(),在下单、撤单、查询资产/持仓/
  委托/成交/单只持仓前自动创建缺失账户并写入 config.json
- 服务端无需手动调用 /api/paper_accounts 创建账户,客户端带上 account_id
  第一次请求即可自动落库
- 测试验证:查询不存在的账户资产后,该账户立即出现在 config.json

Co-Authored-By: Claude <noreply@anthropic.com>
- OrderState 新增 commission、stamp_tax 字段
- 撮合引擎成交时将费用写回委托状态
- XtOrder 模型支持 commission、stamp_tax
- orders CSV 表头新增 commission、stamp_tax,持久化时自动写入

Co-Authored-By: Claude <noreply@anthropic.com>
- OrderState 新增 account_cash、account_market_value 字段
- order_stock() 在成交/废单后把账户快照写入委托
- orders CSV 表头新增 account_cash、account_market_value

Co-Authored-By: Claude <noreply@anthropic.com>
- PaperTraderManager.get_account_status() 返回 server_connected、
  account_exists、account_subscribed 等详细信息
- QMTClient 新增 get_paper_account_status() 方法
- 保持旧接口兼容,不破坏现有客户端

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant