42.9% 的 regime 回落率触发 HALT,factor_ic OOS 扫描连续八小时全卡住(2026-08-26)
最要命的不是单次失败,而是同一个失败连续八个小时原样返回,连波动都没有。
今天从 00:08 跑到 09:18,factor_ic OOS tracker 的每次单次扫描都死在同一个地方:regime 回落率 42.9%,低于 50% 门槛,直接 HALT。中间穿插做了链上-DB 漂移检查和对账 dry-run,都没有异常。晚上还发了一篇知乎。但这一天的记忆,基本就是盯着 -5.421 和 320.9% 这两个数字反复确认。
一、00:08 第一次扫描,HALT 直接拍下来凌晨 00:08,我按例用 C:/ProgramData/anaconda3/python.exe factor_ic_oos_tracker.py once 跑了一次 OOS 单次扫描。因为要访问主网 K 线,Bash 调用带了 dangerouslyDisableSandbox:true。脚本只读 hl_smart_money.db 和 factor_monitor 主网 K 线,只写 factor_ic_oos.db 和 docs/strategy_research/_prereg 下的日志/aler ...
五个候选因子验证,只留下做空高动量一条腿(2026-08-14)
一天跑完五个方向,最后只剩一条腿站着。
08-14 把手上所有候选方向一次性验证完:低动量做多、24h 动量跟随、量价因子新腿、factor_ic 最优形态、长周期反转。五个方向,五份报告。
框架是同一套:12 币池、IS/OOS 切在 2026-07-31(之后为真样本外)、24h 持有、5% 止损 / 15% 止盈、120min 冷却、手续费 1bp。 只换信号,不换尺子。
结论是:五个方向里,四个被否,只剩"做空高动量"这一条腿。
一份报告,一个拒绝理由那天先把"怎么算验证通过"定死了。评估分三条:回测配置一致性(权重 0.3)、结论数据支撑(0.4)、建议可执行性(0.3)。也就是说,一个方向的结论,光看全样本收益没用,必须有全样本 + 样本内 / 样本外多维度的支撑。
剩下的就是一份份看。
低动量做多:−29.63% 到 −54.01%四个配置(A 上涨限定 TOP1 / B 不限 regime TOP1 / D1 上涨限定 TOP2 / D2 上涨限定 TOP3),笔数从 ...
策略体检把 factor_ic 与 market_flow 分开看,修复后收益基线停在 19.74(2026-08-05)
一条策略的体质,不是它今天赚了多少,是它亏的时候怎么亏。
08-05 白天做了一次修复。修完一处,按惯例要给场上的策略重新量一遍收益——把"修之前"和"修之后"分开看,否则修了等于没修。
这次体检的对象是两条在跑的策略:24 小时持有周期的反转策略 factor_ic,和看资金面的 market_flow。下面这份,是那天的体检记录。
修复之后,先把基线钉住修完一处代码,最危险的不是改错,是默认它就修好了。
所以每次修复之后我都要重做一遍收益体检。它有两个作用:一是确认修复本身没带来副作用,二是把新的 realized_pnl 固定下来,当作下一段比较的基线。
08-05 修复完成时,账户的 realized_pnl 停在 +$19.74。这个数字本身没有好坏,它只是一个起点——后面所有"修复后表现如何"的判断,都要拿它当尺子。这一点很关键:如果基线没钉住,后面看到的一切变化,都分不清是策略的功劳还是记账的噪声。
两条策略,两种体质体检不能把它们塞进一张表里比绝对值,因为两条策略的仓位、逻辑、失效方式都不一样。
策略
...
预热修复后SL=3%优势消失,th=3直接翻负再曝基准偏移(2026-07-25)
数据连续推翻三个优化方案后我才承认:这策略赚不赚钱跟参数无关,跟行情有关。
今天从预热修复回测跑通开始,以为SL=3%稳了,结果一路做下来,四个“看起来很合理”的优化被数据挨个打回,最后还揪出一个回测基准偏移的坑。老规矩,逐行核对代码,不轻信摘要。
一、预热修复后,SL=3%的优势没了,th=3直接翻负早上一上来,预热(warmup)修复后的回测结果先出来了。修复前,回测前200根没有真EMA200,趋势闸形同虚设;修复后,拉取数据时fetch_ohlcv(warmup_hours=200),run(warmup_bars=200)前200根只喂指标不交易,第201根才入市。助手核对了代码,total_hours = days*24 + 200 = 920,since前移,live侧也同步预拉250根对上了。
结果对比很直接:
组合
无预热
有预热(200根)
变化
th=1 SL=3%
+$46.17
+$35.84
↓22%
th=1 SL=5%
+$24.85
+$35.39
↑42%
th ...
从读表交易到实时计算,主流币模拟交易绕开中间表刷新瓶颈(2026-07-14)
把「读旧表交易」改成「每轮自己算信号」,是这套系统第一次真正意义上的实时化
前一天把止盈从 5% 调到 3%、又给信号刷新补了坑,第一批仓位陆续有了结果:三笔 +3% 附近止盈、两笔 -2% 止损,胜率 60%。数据能看,但更值得记的是那天对架构动的刀——主流币模拟交易从「读表」走向了「实时计算」。
三条并排的问题改架构之前,问题其实是三条并列的:
止盈 5% 太高 → 已经降到 3%
信号每 2–4 小时才刷新一次 → 平仓之后没有新信号可用(旧信号被「过期 > 4h」跳过)
开仓太随意 → 只要有一条信号就想开仓,缺一道「够不够格」的判断
前两条在前一天已经处理,第三条才是这天架构改造的动机。
从「读表交易」到「实时计算」旧架构是标准的三段式流水线:
1mc_precompute.py(定时)→ mc_signals_latest 表 → maincoin_paper.py(读旧表交易)
它的命门很明显:中间那张 mc_signals_latest 一旦不刷新,整条链就断在「过期跳过」上——前一天那场「平仓后开不出新仓」,就是断在这里。
新架构把中间那张表从交易主链路 ...
止盈设太高让17号页持仓12.9小时零平仓,调参从不想早下车下手(2026-07-13)
止盈设得太高,本质上是把「不想太早下车」写进了参数里
17 号页的 5 个仓位挂了 12.9 小时,一笔平仓都没有。看了一眼持仓就有人问:持仓这么久还没操作,止盈是不是太多了。这一问,引出来的不只是止盈那一个数字。
12.9 小时,0 笔平仓先把当时的持仓摆出来:
币种
方向
入场价
现价
浮盈
距止盈
距止损
BTC
SHORT
$64,045
$63,725
+0.5%
还差 4.5%
2.5%
ETH
LONG
$1,807
$1,819
+0.6%
还差 4.3%
2.6%
SOL
SHORT
$77.14
$77.04
+0.1%
还差 4.9%
2.1%
ZEC
LONG
$523.8
$533.9
+1.9%
还差 3.0%
3.8%
XRP
SHORT
$1.10
$1.09
+1.1%
还差 4.4%
3.0%
持仓 12.9 小时,0 笔平仓记录,账户余额 $4,437(另外 $5,563 锁在仓位里)。
5% 止盈对主流币意味着什么数据摊开之后,结论其实很清楚:5% 对主流币太高了。
BTC 12.9 小时才动了 0.5%。按这 ...
主流币系统落地,14 个链上合约策略从数据采集跑到真实仓位(2026-07-07)
把"想做"变成"在做",中间隔的是一个能自己跑起来的系统
前一天定了方向:做链上合约可用的 14 个高级策略,全部做进去。
这天就是落地——数据采集层、14 个策略引擎、回测引擎、预计算脚本、展示页,以及第一批真实仓位。
14 个策略,分五类策略清单这么落:
类别
策略
A. 资金费率类
1. 费率反转 · 2. 费率趋势共振 · 3. 费率套利
B. 持仓量类
4. OI 背离 · 5. 多空比反转 · 6. 清算磁吸
C. 量价类
7. 盘口不平衡 · 8. 鲸鱼追踪 · 9. 放量突破
D. 技术指标类
10. ADX 多周期 · 11. SuperTrend · 12. RSI 背离+量
E. 宏观情绪类
13. BTC 主导率 · 14. 恐贪逆向
有几条是链上独有的:资金费率、未平仓量、多空比、链上订单簿——数据透明、CEX 拿不到。这也是"链上合约"这个选择真正的价值所在。
从数据到页面,一共六个模块落地的文件是这些:
文件
功能
maincoin_data.py
数 ...