This website requires JavaScript.
Explore
Help
Register
Sign In
sanguo
/
sanguo_vnpy_v2
Watch
2
Star
0
Fork
0
You've already forked sanguo_vnpy_v2
Code
Issues
1
Pull Requests
Actions
Packages
Projects
Releases
Wiki
Activity
Files
master
sanguo_vnpy_v2
/
tests
/
portfolio
T
Add File
New File
Upload File
Apply Patch
Copy Permalink
Download directory as ZIP
Download directory as TAR.GZ
Delete Directory
History
claude_dev
be315a0fd8
CI/CD / test (push)
Successful in 8s
Details
CI/CD / nas-deploy (push)
Successful in 27s
Details
CI/CD / nas-verify (push)
Successful in 8s
Details
fix(live): P0 order_target_value执行层跨实例互卖根治——2026-08-20 14:06实锤#22探针otv(513030,0)(own仅100股)按引擎全账户target把#18的43,500股(~8.3万)一起卖了,当晚15:10恒等式如实报警(unattributed -83,346/-19.09%>0.5%);所有真实策略卖出全是同款写法(aw:191/409·mom:472·sc:392·vs:383),不修则9:30轮换同代码票必互卖——修法=facade层实例相对化(_instance_order_wrappers):有账本时otv换算 目标-持有 增量下显式股数单(买入差额/卖出硬顶own closeable,清仓允许零股尾巴,减仓整手化,可卖0一单不下·绝不卖别家),负order_value同款硬顶,正order_value买入不动;价格取get_current_data实时价,拿不到回退账本加权成本,双失效才透传引擎旧语义;无账本(回测/单测)原样透传行为零改动;+10测试(只卖自己恰好-100/P0原样复现own空再清仓零下单/T+1当日买closeable=0拒/半仓锁定只卖可卖600/加仓差额2400/减仓整手5000/负ov硬顶1000/正ov透传/无账本identity/价格回退avg_cost);portfolio 410绿 [vps]
2026-08-20 20:05:33 +08:00
..
__init__.py
feat(portfolio): sanguo_portfolio 组合策略框架(BulletTrade+miniQMT,不用jqdatasdk)
2026-07-18 19:08:18 +08:00
conftest.py
feat(portfolio): 本地数据 provider 层(baostock/local_parquet)
2026-07-22 10:35:23 +08:00
test_all_weather.py
fix(portfolio): all_weather换仓月只卖不买根治——monthly_adjustment卖出旧仓后未重取持仓,陈旧快照len≥目标数致target_num>position_count恒False一股不买,空仓躺到下月(NAS实测2025-09-01/10-09/12-01三次调仓全中,持仓数<目标数的8-13/11-03正常买);卖出后_get_positions重取+动态持仓回归测试(复现卖5买0→修后卖5买5);老翻译bug非本轮5commit回归(VPS旧代码对照运行中) [vps]
2026-08-15 07:06:07 +08:00
test_baostock_provider.py
feat(portfolio): 本地数据 provider 层(baostock/local_parquet)
2026-07-22 10:35:23 +08:00
test_channel_test.py
feat(strategy): channel_test随启随验探针模式(用户拍板2026-08-20:开盘窗口不再是验证瓶颈,随时启动随时验全场景)——on_demand=None自动:LiveEngine进程(supervisor注入SANGUO_LIVE_STRATEGY)→启动/重启后~90s经facade.run_daily注册probe_all打一轮全场景;必须走facade注册而非直接调用:回调才收到B2包装的代理context(实例预算视图),绕过它探针测不到定寸虚拟化;影子柜台24h可验(收盘价撮合),实盘闭市下单被QMT拒亦属验证项(决策层输出已在日志);重启实例=再验一轮;[PROBE-0]实例视图快照(cash=预算切片非全账户=B2生效标志)/[PROBE-1]rotate主调仓定寸=实例视图等权/[PROBE-2]只卖自己(卖出对象全部来自own账本,对照前端账户实况实例分解)/[PROBE-3]T+1当日买立即卖应拒(冷启动空仓跳过,第二轮起有票)/[PROBE-4]swap_one资金复用;回测/单测无env维持四时点旧行为,显式True/False覆盖;+3测试(env下仅注册1个未来~90s的probe_all/显式off保四时点/probe_all全序列下单断言);旧四时点测试补delenv防环境串扰 [vps]
2026-08-20 11:41:56 +08:00
test_factors.py
feat(portfolio): sanguo_portfolio 组合策略框架(BulletTrade+miniQMT,不用jqdatasdk)
2026-07-18 19:08:18 +08:00
test_fetchers.py
feat(provider): TET窄试点B——P0四方法Fetcher化(_ex新接口,strict fail-fast),老接口零改动 [vps]
2026-08-14 23:44:39 +08:00
test_filters.py
feat(portfolio): B fundamentals批量 + C涨跌停filter修复(get_limit_status_batch接入)
2026-07-30 07:37:03 +08:00
test_instance_view_isolation.py
test(strategy): A3预检——B2定寸虚拟化×A1通道三明治集成测试5条(issue#29) [vps]
2026-08-19 22:42:30 +08:00
test_live_instance_ledger.py
fix(live): 成交时间1970守卫——08-20探针首日实锤9笔traded_at=1970-01-01 00:00:01(QMT原始时间经引擎pd.to_datetime失败形态落epoch),前端『今日成交』按日期过滤全空+账本trade_date失真(当日仓被当历史仓,T+1视图frozen=0);修=_effective_trade_time守卫:年份<2000一律回退当前时刻(归因轮询≤60s,日期误差仅跨日60s窗口);+2测试(1970回退当日记账且frozen生效/有效时间原样保留);附带已治疗VPS存量9行(从引擎日志按标的+数量回填13:03/13:05真实时刻,#18今日成交即时可见);portfolio 29+398绿 [vps]
2026-08-20 13:32:54 +08:00
test_live_instance_orders.py
fix(live): P0 order_target_value执行层跨实例互卖根治——2026-08-20 14:06实锤#22探针otv(513030,0)(own仅100股)按引擎全账户target把#18的43,500股(~8.3万)一起卖了,当晚15:10恒等式如实报警(unattributed -83,346/-19.09%>0.5%);所有真实策略卖出全是同款写法(aw:191/409·mom:472·sc:392·vs:383),不修则9:30轮换同代码票必互卖——修法=facade层实例相对化(_instance_order_wrappers):有账本时otv换算 目标-持有 增量下显式股数单(买入差额/卖出硬顶own closeable,清仓允许零股尾巴,减仓整手化,可卖0一单不下·绝不卖别家),负order_value同款硬顶,正order_value买入不动;价格取get_current_data实时价,拿不到回退账本加权成本,双失效才透传引擎旧语义;无账本(回测/单测)原样透传行为零改动;+10测试(只卖自己恰好-100/P0原样复现own空再清仓零下单/T+1当日买closeable=0拒/半仓锁定只卖可卖600/加仓差额2400/减仓整手5000/负ov硬顶1000/正ov透传/无账本identity/价格回退avg_cost);portfolio 410绿 [vps]
2026-08-20 20:05:33 +08:00
test_live_portfolio_proxy.py
fix(live): runtime副本孤立加载ImportError根治——2026-08-20晨12引擎崩溃循环事故(6实盘+6影子自建队07:10起每60s崩,当日0成交,9:05/9:30/9:35全未触发)——根因=live_strategy.py台账/B2两行相对导入(from . import live_instance_ledger/from .live_portfolio_proxy):文件被_instance_adapter逐字节复制到runtime/<实例>/后bullet_trade以顶层模块加载(无包上下文)→ImportError;测试全绿盲区=测试以包成员导入相对导入合法,生产孤立加载才崩,nas-verify不启引擎——修=改绝对导入from sanguo_portfolio import(引擎进程项目根在sys.path,同文件其它绝对导入生产已验证可跑);抽_ledger_tools()单函数两种加载上下文单测直打;+3测试(孤立副本顶层import_module复现事故点/包内上下文/静态禁from .回潮);_instance_adapter启动时内容比对自动重拷→VPS落地后下轮引擎重启自愈免手工清runtime;顺手修2个日期硬编码测试(proxy fixture与snapshot的trade_date=2026-08-19→动态今天,当日买入跨日T+1断言必翻红,CI不跑此套件故昨日未暴露);portfolio 398绿 [vps]
2026-08-20 11:41:47 +08:00
test_live_strategy_standalone_load.py
fix(live): runtime副本孤立加载ImportError根治——2026-08-20晨12引擎崩溃循环事故(6实盘+6影子自建队07:10起每60s崩,当日0成交,9:05/9:30/9:35全未触发)——根因=live_strategy.py台账/B2两行相对导入(from . import live_instance_ledger/from .live_portfolio_proxy):文件被_instance_adapter逐字节复制到runtime/<实例>/后bullet_trade以顶层模块加载(无包上下文)→ImportError;测试全绿盲区=测试以包成员导入相对导入合法,生产孤立加载才崩,nas-verify不启引擎——修=改绝对导入from sanguo_portfolio import(引擎进程项目根在sys.path,同文件其它绝对导入生产已验证可跑);抽_ledger_tools()单函数两种加载上下文单测直打;+3测试(孤立副本顶层import_module复现事故点/包内上下文/静态禁from .回潮);_instance_adapter启动时内容比对自动重拷→VPS落地后下轮引擎重启自愈免手工清runtime;顺手修2个日期硬编码测试(proxy fixture与snapshot的trade_date=2026-08-19→动态今天,当日买入跨日T+1断言必翻红,CI不跑此套件故昨日未暴露);portfolio 398绿 [vps]
2026-08-20 11:41:47 +08:00
test_local_unified_provider.py
refactor(provider): TET Phase3老接口内部委托Fetcher——①四老方法(get_price/get_closes_panel/get_index_stocks/get_fundamentals_df)旧体删除,改调同款Fetcher(与_ex两张皮,strict契约自此对老接口生效:非法frequency/fq/count/日期/空列表→ValueError,查询失败raise;Phase2副本对照4/4语义等值已验issue#19)②qfq因子二次读库归一:_build_qfq_factor/_apply_qfq_batch拆为_read_qfq_rows+_qfq_factor_from_rows与_read_qfq_events+_apply_qfq_events(IO/纯计算),因子读全挪进extract_data,transform零IO③all_weather四处get_fundamentals_df(choice)补空守卫(空候选集=调用方业务态)④3个宽松断言回归测试改strict(1m频率/空stocks/空symbols);938绿 [vps]
2026-08-17 09:12:47 +08:00
test_merge_constituent_rerun.py
fix(data): 成份股 merge/migrate pipeline 可重跑(idempotent, 读 bs_index_constituent_old)
2026-07-23 09:04:00 +08:00
test_migrate_announce_union.py
fix(data): 中证1000/2000 历史成份股补全(parse+migrate 聚合)
2026-07-23 23:45:55 +08:00
test_momentum_timing.py
fix(strategy): 数据取数失败≠策略信号——momentum假熊市清仓根治+small_cap同型误判纠正 [vps]
2026-08-19 10:45:06 +08:00
test_provider_batch.py
refactor(provider): TET Phase3老接口内部委托Fetcher——①四老方法(get_price/get_closes_panel/get_index_stocks/get_fundamentals_df)旧体删除,改调同款Fetcher(与_ex两张皮,strict契约自此对老接口生效:非法frequency/fq/count/日期/空列表→ValueError,查询失败raise;Phase2副本对照4/4语义等值已验issue#19)②qfq因子二次读库归一:_build_qfq_factor/_apply_qfq_batch拆为_read_qfq_rows+_qfq_factor_from_rows与_read_qfq_events+_apply_qfq_events(IO/纯计算),因子读全挪进extract_data,transform零IO③all_weather四处get_fundamentals_df(choice)补空守卫(空候选集=调用方业务态)④3个宽松断言回归测试改strict(1m频率/空stocks/空symbols);938绿 [vps]
2026-08-17 09:12:47 +08:00
test_provider.py
fix(provider): SanguoMiniQmtProvider四缺口根治——实盘/影子momentum/small_cap共4账户8-18/8-19空转两日——①get_closes_panel(+_ex)委托本地dbbardata(与回测LocalUnifiedProvider同源同口径;base与xtdata SDK均无此方法,bullet_trade回退链终断AttributeError,momentum牛熊/small_cap动量瘫)②get_fundamentals_df补fields契约(keep=code+请求列,对齐unified;原small_cap fields=[market_cap,eps]直接TypeError)+_ex别名③get_constituent_ex(+get_index_stocks覆盖)委托constituent_unified并集(历史日期口径,治前视;表缺指数WARNING回退base最新成份,宁可降级不空转=本次事故教训)④config的db_path/data_dir透传统一provider,VPS缺省走生产库;+10测试(复刻VPS AttributeError实锤+回退路径);962绿;VPS实库冒烟panel新鲜到08-18/000985=5128只(前后端session巡检实锤清单全闭环) [vps]
2026-08-19 10:59:48 +08:00
test_runner_curves.py
feat(portfolio): 组合回测加持仓变化图(daily_positions每日聚合count/value经worker/routes透传,柱=持仓数线=市值)+超额收益曲线(策略/基准净值-1,聚宽标配,前端算);2测试 [vps]
2026-08-13 20:40:03 +08:00
test_small_cap.py
fix(strategy): 数据取数失败≠策略信号——momentum假熊市清仓根治+small_cap同型误判纠正 [vps]
2026-08-19 10:45:06 +08:00
test_value_selection.py
feat(portfolio): B fundamentals批量 + C涨跌停filter修复(get_limit_status_batch接入)
2026-07-30 07:37:03 +08:00