39 Commits

Author SHA1 Message Date
claude_dev b954b02e75 fix(monitor): 监控班次二 P2 批——D-5 db_sample 日历不可达去 fail-open(样本可读弱检/库不可达黄)+D-6 month_bucket 损坏件 rows=None 黄(对齐 per_date)+D-8 check_disk 阈值参数化消费注册表 warn_gb/crit_gb(旧硬编码 8/20=改表不改行为校准陷阱,crit_gb 全仓无消费)+D-9 vintage/NAS ts fromisoformat 捕 TypeError+D-10 db_sample close 进 finally+AL-1 upsert 更新 severity(同日黄→红升级即时落表,旧 UPDATE 不动=次日新 id 才纠正)+purge 收口 MON-202610-04(open 黄改 last_seen 28d=活着不删,旧 first_seen 14d 硬删无声抹持续黄+断 count 升级链;resolved 统一 30d,open 红永不删)+N-1 run_monitor_nas.sh rc 先存后拼($(date) 同词先展开重置 $?=exit 恒 0,rc 隔离下 NAS 崩溃唯一现场线索)+N-2 NAS 日历豁免短期方案(last_weekday 接休市表镜像+CI 同步测钉与 monitor_registry 相等=7f9b413 镜像纪律;10-06 旧码会把 10-05 假日当昨交易日;corpus 34h 日历日节奏实证无需豁免)+P3 归因([FATAL] 级别标记不当类型归 _global,scan_signatures 注记 test-only 勿接线)+T-2 NAS red 分支(hot_rank 文件缺)测试补缺+migration_logs 保洁(data_monitor_wrapper 双班剪 14d 前旧件,13 wrapper 无限增长收口);monitoring spec §5.1/§5.2/§5.3-④/§5.4/§5.5-④/§7.6/§12 随码(C-A1 universe 异常实串/C-A2 签名表勘正补 Expecting value/C-A6 disk 阈值表述+锚点行数刷新) [vps] [nas]
CI/CD / test (push) Successful in 45s
CI/CD / nas-deploy (push) Has been cancelled
CI/CD / nas-verify (push) Has been cancelled
2026-10-05 15:54:13 +08:00
claude_dev 87817a6a97 fix(data): 读侧残骸守卫收窄到0字节——aba1c3d初版try面过宽把坏件异常也吞,打穿integrity_gate单查隔离信息面(1ea143e设计:gate依赖捕获异常记error=,实测test_check_exception_isolated红);0字节残骸(本次掉电实锤形态)保持skip+ERROR,坏件含内容者恢复fail loud;spec §20.16同步勘正 [nas] [vps]
CI/CD / test (push) Successful in 46s
CI/CD / nas-deploy (push) Has been cancelled
CI/CD / nas-verify (push) Has been cancelled
2026-10-05 12:48:26 +08:00
claude_dev aba1c3de80 fix(data): 掉电防御两刀+funnel配置三层——写侧根因=DayBuffer/IdLedger flush 已tmp+rename但无fsync,掉电下rename进日志数据块滞页缓存=0字节终局残骸(news_meta dt=2026-10-05 part-1实锤,funnel walk裸崩),修=_fsync_file先fsync再replace;读侧纵深=partition_reader对0B/截断坏件skip+ERROR不裸崩(失败分级新增分区残骸档,全消费方受益);LLM配置三层条件切(factor P5转达):pipeline库存在才config_store.resolve_effective_config(只读位_connect会makedirs+建表抛错,/app只读挂载必炸),否则env两层兜底零行为变化;配套账本orphan剪除生产修复(961913→961912)+0B残骸清除已落NAS; fusion spec §20.16台账 [nas] [vps]
CI/CD / test (push) Failing after 49s
CI/CD / nas-deploy (push) Has been cancelled
CI/CD / nas-verify (push) Has been cancelled
2026-10-05 12:42:02 +08:00
claude_dev e47dddd336 feat(data): P4-3 接线——corpus_reader.get_events 读出口+manifest 两域+run_corpus 尾两段(funnel/gate rc 隔离+LLM env 条件传递); fusion spec §20.16+runbook 落档; Mac 冒烟绿(词表件落+候选入队+门如实报缺) [vps] [nas]
CI/CD / test (push) Successful in 46s
CI/CD / nas-deploy (push) Successful in 2s
CI/CD / nas-verify (push) Successful in 10s
2026-10-02 10:02:51 +08:00
claude_dev cc3b82ae2c feat(data): alerts 告警事件存储(确定性ID去重/count++升级/转绿自动resolved/ack/保留期 purge,spec §20.15.4) [vps]
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-25 22:52:23 +08:00
claude_dev 4881d10071 feat(data_platform): corpus flash_meta 全市场快讯域上线(spec §20.12.3 补充类采纳)——金十 flash_newest.js 快照+东财 kuaixun 翻页(T-1 边界停界,20页硬顶)两源,与 news_meta 个股新闻语义并列不 join;flash_id=源前缀+源站稳定id跨源命名空间隔离,当日marker幂等,源级隔离单源失败不炸另一源;run_corpus.sh 第三lane rc隔离不进聚合(两主lane全让路也不漏当天快讯);镜像车 corpus 四子域扩五(新域指纹全新首跑自动全量推);corpus_reader.get_flash 空df带schema;TDD +13例全套465绿;Mac真网络冒烟=金十50+东财884新,21s完赛,dt跨度T-1边界实证,幂等复跑零请求;首班锚点=次日06:0x flash lane exit=0行 [nas]
CI/CD / test (push) Failing after 8s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-09-22 08:17:14 +08:00
claude_dev 1f4ac14c21 fix(data_platform): VPS 双验证抓出 12f8e5a 两处静默 PIT 错(用户令「nas和vps双验证」的直接战果)——①NOTICE_DATE 与报告期错位:pandas 2.3.3 的 groupby.nth(-1) 索引=原始行号而非组键、组序=文件出现序(真实文件含招股书重述乱序块),12f8e5a 把 nth 终值行与键排序的 agg 按位置拼接=披露日张冠李戴到别的报告期(300750 Q1 披露日 04-16 错配 03-10 一代);本地 fixture 恰好全升序故 448 绿漏网,VPS 真数据(乱序块)一碰即中——修=按 REPORT_DATE 列 merge 对齐+validate 一对一(假设破坏即 raise),绝不按位置拼接;②列下推漏 schema 过滤:请求列不在文件 schema(银行股变体,000001 无 TOTAL_OPERATE_INCOME)时 read_parquet(columns=) 抛异常→整股被行级容错吞掉=漏斗静默缩水——修=按 schema 过滤后缺列走 np.nan 补齐;回归用例×2(乱序文件期日对齐/缺列不跳股);全套 451 绿;修版模块 VPS 真数据复验=300750/600519 各期 NOTICE_DATE 与 NAS 逐值一致,coverage 1/2 对齐 [nas] [no-doc]
CI/CD / test (push) Failing after 28s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
2026-09-20 09:21:29 +08:00
claude_dev 12f8e5ab50 fix(data_platform): 双域背靠背 review 七项修复(factor 3M/2m+strategy 1B/3M)——strategy B1:GroupBy.last 拿组内最后非空值=重述行 null 静默回退旧行值冒充终值,改 nth(-1) 排序末行原样取(宁缺毋假红线);factor MAJOR-1:UPDATE_DATE null 排序 pandas(nulls-last)与因子 polars(nulls-first)语义相反=脏行无条件成终值,改 na_position='first'+kind='stable'(跨重写复算确定性);factor MAJOR-3:_load_stock 列下推(pyarrow schema 探头→键列+UPDATE_DATE+所需列投影,缺列补 null,全市场调用免 319 列全量 IO);factor MINOR-2:雷达比对轴改 per-(code,REPORT_DATE)(期级新披露 notice 旧于该股全局 max 亦命中;static 损坏→全期命中→重写自愈);strategy M1:行级容错跳过股 attrs['skipped_symbols'] 暴露(防 09-01 静默缩水复燃);strategy M2:view 增 UPDATE_DATE 列=终值新鲜度可观测;strategy m5:no_data/filtered_empty 边界断言;factor MAJOR-2=spec 周日回冲表述勘误(实际=覆盖式 scp -r,正常路径内容已对齐无害,仅推送失败周回退且雷达窗内自愈);strategy M3 value 切换纪律(同日双源漏斗对照+回滚预案)+m4 VPS D+2 时延口径入 spec;MINOR-1 缓至首非零 wash 日实测;新增 7 用例,全套 448 绿 [nas]
CI/CD / test (push) Successful in 27s
CI/CD / nas-deploy (push) Successful in 17s
CI/CD / nas-verify (push) Successful in 8s
2026-09-20 08:59:35 +08:00
claude_dev 2f274e3b7d feat(data_platform): pit_view 实现——factor fixture 六条 RED→GREEN 收编(spec §20.11.7)——sanguo_data/fund_pit.py:static 三表多期 asof 视图(第k期=截至asof已披露第k个报告期,NOTICE_DATE≤asof 含端点;终值口径=值取(UPDATE_DATE,NOTICE_DATE)排序末行+组内 max 保守不提前;null 公告日整期弃用=宁缺毋假);失败分级=空 df 不 raise+attrs['reason'] 标签(domain_not_found/no_data/filtered_empty/ok);with_coverage 返 (view,coverage_df),coverage 分子=首披露到达口径(组内 NOTICE_DATE min≤asof,重述不撤销到达,与终值口径之差=快照窗口损失可量化);单股缺文件/坏文件/零行行级容错;缺列补 float64 NaN(object None 进 concat 触发 FutureWarning 且未来升 object,实测避开);fixture ④⑥ 载体断言按约定收编(attrs['reason']/元组返回);六条首跑全绿+全套 426 绿+NAS 真数据冒烟(茅台/宁德/平安银行三股,银行股 TOTAL_OPERATE_INCOME 缺列 NaN 语义正确,k 序列与 NOTICE_DATE 锚点 sane);spec coverage 到达口径一句定稿 [nas]
CI/CD / test (push) Successful in 28s
CI/CD / nas-deploy (push) Successful in 18s
CI/CD / nas-verify (push) Successful in 8s
2026-09-20 08:10:19 +08:00
claude_dev f190fbc109 fix(data): 因子线 review 必修#1 null 桥接洞——首文件全空列把 num/text 桥接(两具体类型从未直接对撞,concat 静默混装零 raise=契约④要防的静默 coerce 被绕过,因子线实测复现);修=每列 resolved=首个非空具体类型/null 永不推进 resolved/冲突即 raise/列集按名比对(列序漂移不误报,策略线观察 b 顺势解决);+3 测试(三段桥 raise/null 隔离仍 raise/列序 tolerated)419 绿;记录②noticed_by 滤空 NOTICE_DATE=有意宁缺毋假写进 docstring;§20.11.5 实施版双线 review 回执+§20.11.6 遗留更新(DSM 复用评估定稿) [vps]
CI/CD / test (push) Successful in 29s
CI/CD / nas-deploy (push) Successful in 24s
CI/CD / nas-verify (push) Successful in 4s
2026-09-18 07:29:53 +08:00
claude_dev e97f845424 fix(data): partition_reader 类型兼容规则真数据精化——NAS 真数据冒烟实锤 EM 源对全空列写 arrow null 型,同域 part 文件间 null↔double 漂移合法,原 fail-loud 按字面执行拒掉全部合法数据;修=全空列通配(与任意类型兼容)+数值族 int↔float 互通(金额元值<2^53 无精度损 concat 升位)+全空 object 列规整 float64;真冲突收窄为 text↔num 与列集增删;TDD 换血:fail 用例改 text↔num+新增 null↔double 兼容/int↔float 升位两例,416 绿 [vps] [no-doc]
CI/CD / test (push) Successful in 29s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 2s
2026-09-17 23:52:21 +08:00
claude_dev 1b942c0a9b feat(data): corpus/dmsk 消费接口(spec §20.11.3 实施,设计已入档)——partition_reader 通用读取核(核内零语义:不做 as-of/PIT+零静默去重;失败分级:缺数据空 df 不 raise/跨分区列集与类型漂移 PartitionSchemaError fail loud;双机根解析 SANGUO_CORPUS_ROOT/SANGUO_FUND_DMSK_ROOT env 覆盖+水位线读取)+corpus_reader(get_news_meta/get_ann_meta symbols 下推 stock_code/sec_code/get_news_fulltext(ids) art_code 批量/ann_pdf_dir;schema 契约 09-17 NAS 实测落 docstring:稳定 id=art_code/announcement_id 与 PDF 同名)+fund_dmsk_reader(get_domain 五域+noticed_by 纯过滤 NOTICE_DATE 缺列 fail loud;契约:五域 NOTICE_DATE 实测全在/SECUCODE 带后缀 SECURITY_CODE 裸 6 位/单位元);TDD 23 例,全套 414 绿 [vps] [no-doc]
CI/CD / test (push) Successful in 32s
CI/CD / nas-deploy (push) Successful in 20s
CI/CD / nas-verify (push) Successful in 2s
2026-09-17 23:44:02 +08:00
claude_dev 3304ff46b2 perf(data): 四热路径日期区间SARGable化——substr(datetime,1,10)对索引列套函数打不进复合索引datetime列,每股扫全量日线史取短窗——08-25晨9:30生产实锤:momentum选股1/2(RPS池)174s未达<60s验收,阶段日志精确定罪(过滤段含双seek仅7.8s);病根=PanelFetcher的30天窗SQL每只股扫~5000行日线史取~22行,3226只≈1600万行=174s量级吻合。修=裸列datetime>=start AND datetime<end+1天排他上界(与按日期前10位比较在d裸日期/15m·5m时间戳两格式下语义严格等价,含end当日全部行排除次日),区间打进复合索引第4列每股只扫窗口行。四处同病同修:PanelFetcher宽表/PriceFetcher逐只get_price/limit-status近2根90天窗(原substr版90天下界同样打不进索引)/datareader CTA回测K线。+3测试:防回潮扫描(三文件钉死禁substr谓词)+双格式边界行为(d裸日期与15m时间戳end当日含次日排)+get_price同语义;portfolio+data_platform 644绿;待VPS探针终验计时 [vps]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 8s
2026-08-25 20:54:40 +08:00
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