claude_dev
|
3b3e42985e
|
fix(datareader): read_index_daily 切 dbbardata(治 benchmark 读陈旧 vnpy DbBarData)
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 3s
cta_engine benchmark 经 read_index_daily 读 vnpy DbBarData(方案A前陈旧源)。
切 dbbardata(指数点位已由 sina_index_eod 灌 exchange=SSE)。
- 数据源:vnpy get_database.load_bar_data → sqlite3 直连 dbbardata
- 消除覆写 vnpy SETTINGS 副作用(cta_engine.py:73/199)
- 回归坑1(000300读空):CODES 已加 000300 → dbbardata 有数据(本轮修复)
- 回归坑2(sz000905):默认 benchmark sh000300 不触发;中证指数用 sh 前缀
- 复用 provider 模式:substr(datetime,1,10) 比日期规避混合格式
- 测试:mock vnpy → 真实 tmp sqlite 库测 SQL 路径(2测重写)
- 验证:Mac 4+5 passed + VPS 真实库 sh000300 7月23行 close4588.197
|
2026-08-01 08:41:57 +08:00 |
|
claude_dev
|
384bcc56d7
|
fix(data): 修三环境 session 反馈的 3 个数据层问题
D1: 删 test_circuit_breaker.py(测已归档 raw_redownload.check_circuit_breaker 死代码,全仓零活跃引用,致 data_platform 套件 collection error)
D2: datareader.py read_db_daily/read_index_daily 两处 vnpy_db 硬访问→.get()+清晰报错防崩溃(根治切 dbbardata 读指数列待办)
D3: high_limit/low_limit close±10% 兜底是有意设计非 bug(填 NaN 会复活 bullet_trade 误判停牌)—get_price 加 round(.,2) 对齐 get_current_tick 口径;测试期望从 NaN 改兜底估算
|
2026-07-29 21:17:15 +08:00 |
|
claude_dev
|
7fe3fb0844
|
fix(backtest): 结果页垃圾值/无图表端到端修复(empyrical×numpy2.0根因)
根因: empyrical 0.5.5 引用 numpy2.0 已移除的 np.NINF → compute_metrics 静默崩 → _metrics.json 不生成 → 结果页回退 vnpy 原始字段(单位混乱: total_return当百分数、max_drawdown当元 → 前端×100显 3305%/-50M%)。
- metrics.py: 导入 empyrical 前补回 np 别名(NINF/Inf/PINF/NaN/NAN/infty)
- routes.py: benchmark-curve/risk-series 缺 metrics 文件时返空200(不再404拖垮整页); get_result 从 statistics 抽 relative_metrics
- cta_engine.py: bench_df 日期 strip tz 防 pct_change 崩; metrics 块加 traceback 日志
- Result.vue: onMounted 用 Promise.allSettled 隔离7端点, 单接口失败不拖垮整页
- result_store.py: _safe_read_json 容错迁移后残留 NAS 绝对路径, stale path 不崩 list_results
- datareader.py: read_index_daily 改从 vnpy DB 读 + 前缀解析交易所(sh→SSE, 避免 000300 被 guess_exchange 误判 SZSE)
|
2026-07-17 08:24:01 +08:00 |
|
claude_dev
|
3ef8c617f0
|
feat(deploy): VPS原生大脑部署—env覆盖配置+部署文档(Option B落地)
- sanguo_data/config.py: load_config 加 env 覆盖(SANGUO_DATA_ROOT 重映射
daily/raw/qfq/15min/vnpy_db;SANGUO_LIVE_ENABLED/SANGUO_BRIDGE_URL 覆盖 live 段),
三机共用一份 git config 零漂移
- sanguo_api/main.py: build_app 加 SANGUO_DB_PATH/SANGUO_FILE_PATH env 覆盖
- docs/deployment/vps-native-brain.md: VPS原生部署全记录(安装/配置/服务/验证/
数据staging/Phase2暂缓理由)
实证:VPS vnpy4.4.0+vnpy_qmt0.3.3 连真实miniQMT读真实账户/持仓;
live_step全链路+影子transport(本机bridge)通过。详见文档。
|
2026-07-15 12:55:58 +08:00 |
|
claude_dev
|
468f5829b9
|
fix(data): baostock参数 adjustfield→adjustflag(真实参数名)
|
2026-07-11 15:00:05 +08:00 |
|
claude_dev
|
4ea740083a
|
fix(data): index_downloader baostock error_code判断修(真实为'0'非'success',容两者)——mock与真实baostock分歧
|
2026-07-11 14:59:34 +08:00 |
|
claude_dev
|
feb32163ca
|
feat(data): 沪深300指数下载+read_index_daily(补基准数据缺口)
|
2026-07-11 13:35:53 +08:00 |
|
claude_dev
|
ff84b3d4b0
|
feat(live): D-3 sanguo实盘分支(影子下单)+D期设计文档
D-3 模式A影子下单(spec §5):
- bridge_client.py: QMT bridge HTTP客户端(urllib, X-Bridge-Token, 失败不抛返回None)
- live_orchestrator: _shadow_trades_to_bridge 当日成交POST bridge(默认enabled=false)
- persistence: paper_shadow_orders幂等表+save_shadow_order/is_trade_shadowed
- config: data_platform.yaml加live段, token走env(BRIDGE_TOKEN)
- to_bridge_code symbol转换与guess_exchange一致(2位前缀)
安全: enabled=false默认关+token走env+幂等防重复+影子失败不阻断live_step
docs: phase3d-live-trading-design.md(D期完整设计)
|
2026-07-11 00:03:46 +08:00 |
|
claude_dev
|
164690373f
|
feat(trader): C期分期项收尾—资金占用成本+分红送股+_restore_ledger修复
- 资金占用成本(spec§195): StrategyRunner.daily_borrow_cost(used×risk_free/365)
归因per_strategy_pnl(不碰account总账, account.equity真实净值不变);
config risk_free_rate=0.02; engine.step mark_to_market后计扣; =0向后兼容跳过
- 分红送股(spec§295): dividend_source.py(akshare stock_history_dividend_detail,
实测600000/000001纯现金分红); PositionLedger.apply_split(volume×factor/avg÷factor);
Account.apply_cash_dividend; engine._apply_dividends(除权日调整,现金先split后);
mark_to_market停牌prev_close兜底(今收→前收→均价); _run_replay注入dividends日历
- 修_restore_ledger预存bug: PositionLedger.__init__加volume/frozen/avg_price参数
(原只symbol, live_orchestrator跨日恢复4参数调用会TypeError, 首次step空仓未暴露)
- 139 passed(119基准+20分红+3占用成本), 无回归
- live_step dividends注入待分期项(每日拉全市场分红慢, 需run_daily_update预拉日历)
|
2026-07-10 08:44:35 +08:00 |
|
claude_dev
|
0810259911
|
feat(data): 15min双源集成(data_source路由 + baostock格式适配)
- _resolve_dir_key: 15min支持raw/qfq双源(移除raw15min抛错)
- _check_adjust_cfg: 按interval查dir(minute_15_raw_dir/qfq_dir)
- read_parquet_15min: datetime列优先(baostock时分,旧date兼容)
- config: 加 minute_15_qfq_dir/minute_15_raw_dir
- test: 更新raw15min路由断言(6 passed)
实测容器: 600000 15min qfq 336bars close6.1977 / raw 336bars close6.6200,
datetime时分正确(09:45:00). 15min双源分期项落地.
|
2026-07-09 19:34:43 +08:00 |
|
claude_dev
|
1ed7b72aca
|
feat(data): raw真实价数据源(task#79)—raw_dir+dir_key路由+新浪源重下
根因: daily_dir mixed-adjust(hfq bulk+akshare raw tail)致3-30 -94%假跌。
方案(Linus三问简化单raw, 除权留分期项#3):
- datareader read_parquet_daily/15min 加 dir_key 参数
- data_source iter_bars/fetch_day: adjust=raw→raw_dir(缺配置报错防混源), qfq→daily_dir
- engine PaperEngine 默认 adjust=raw
- config 加 raw_dir; scripts/raw_redownload.py 新浪源adjust='' 直连+单线程限速
- 验证: 浦发606行close 6.5/14.6 mean10.08 0跳变, 撮合成交价9.71-10.25真实
- 测试9/9+trader全量108/108通过
|
2026-07-07 22:19:11 +08:00 |
|
claude_dev
|
eb6aa34b82
|
fix(paper): create 接入回放(engine.run) + 日线 parquet 文件名 sh/sz 前缀+_daily
|
2026-07-07 14:47:20 +08:00 |
|
claude_dev
|
b2c5d8fd79
|
feat(data): read_parquet_15min + trader data_source(qfq/raw双源)
- datareader: +read_parquet_15min(sh/sz前缀+15min.parquet), get_database lazy(去tzlocal等依赖)
- data_source: iter_bars cross-section yield(date,{symbol:Bar}), raw首版fallback qfq+warning(spec§17)
- 本机 mock _read_fn 测调度逻辑, read_parquet_15min 容器冒烟 4 tests passed.
|
2026-07-07 11:57:16 +08:00 |
|
claude_dev
|
28aea67232
|
feat(s1): 回测核心端到端跑通(vnpy client 对齐)
- 修 submit_cta/optimize 策略字符串→类解析(get_strategy_class)
- cta_engine: worker 进程设 vnpy DB→quant_trading.db(修 0 根数据)
- equity_curve 取自 calculate_result 的 daily_df(修 get_all_daily_results 对象问题)
- kline 补 cfg(find_config_path 共享)
- 端到端冒烟通过:DoubleMaStrategy 600000 → equity111/pnl111/trades1/kline117
|
2026-07-07 06:21:17 +08:00 |
|
claude_dev
|
a4ce3aed85
|
feat(backtest): cta_engine BacktestingEngine wrapper
|
2026-07-06 10:57:29 +08:00 |
|
claude_dev
|
339d85a927
|
fix(data): read_db_daily 配置 vnpy database 路径(修端到端读取 gap)
Fix: read_db_daily 现在在调用 get_database() 前配置 vnpy SETTINGS,
指向 cfg.data_paths["vnpy_db"](NAS quant_trading.db),修复端到端冒烟发现的读取 gap。
|
2026-07-05 21:03:03 +08:00 |
|
claude_dev
|
c6eae7eecf
|
feat(data): UpdateScheduler 增量 + 断点续传 + 熔断
|
2026-07-05 16:14:23 +08:00 |
|
claude_dev
|
60b410b887
|
feat(data): DataWriter 原子写 parquet + vnpy SQLite
|
2026-07-05 12:43:18 +08:00 |
|
claude_dev
|
3015d6fa6b
|
feat(data): DataFeed 多源 fallback + BaoStock 超时修复
|
2026-07-05 12:41:00 +08:00 |
|
claude_dev
|
4e541040f1
|
feat(data): DataReader SQLite + 交易所判断 + vnpy 4.4.0 spike 点
|
2026-07-05 12:36:34 +08:00 |
|
claude_dev
|
91d9c36f44
|
fix(data): Task 3 移除 vnpy mock,用真实 vnpy 源码
- 删除 tests/data/vnpy_mock.py
- conftest.py 加 vnpy_v4.4.0 源码到 sys.path(真实 vnpy import,不拉 Qt)
- 5 passed(config 2 + validator 2 + datareader 1)
|
2026-07-05 12:28:59 +08:00 |
|
claude_dev
|
10bdc65ac5
|
feat(data): DataReader parquet 读取 → BarData
|
2026-07-05 12:04:50 +08:00 |
|
claude_dev
|
56fbde6492
|
feat(data): 移植 v1 validator + 适配接口 + 测试
|
2026-07-05 11:53:51 +08:00 |
|
claude_dev
|
3422372948
|
fix(data): Task 1 review 修复(pycache清理+pytest.ini+错误处理)
- Fix 1: 移除误 commit 的 __pycache__ 文件
- Fix 2: 创建 pytest.ini 解决 PYTHONPATH 问题
- Fix 3: load_config 添加错误处理(FileNotFoundError + ValueError)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-05 11:50:30 +08:00 |
|
claude_dev
|
90f0b68ce2
|
feat(data): 脚手架 + YAML 配置加载
|
2026-07-05 11:41:57 +08:00 |
|
claude_dev
|
8dd1cf326d
|
feat: 初始化 Sanguo VeighNa 量化交易平台项目
- 基于 VeighNa 4.4.0 的二次开发基础
- 建立项目目录结构(sanguo_trader/sanguo_research/sanguo_data/sanguo_common)
- 配置开发工作流文档和 Git 模板
- 设置 GitHub Flow 分支策略
- 添加依赖管理文件
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 18:51:39 +08:00 |
|