策略
SOL 鲸鱼与散户主动吃单资金流分歧,多空策略(BINANCE USD-M永续合约,TRADE-TICK驱动,15m决策K线,小型激进交易者选择另一侧时交易大型激进交易者所选的一侧,固定名义金额规模划分,低参数)
结局: 已放弃
SolWhaleVsRetailTakerFlowDivergenceLS15m
SOL 鲸鱼与散户主动吃单资金流分歧,多空策略(BINANCE USD-M永续合约,TRADE-TICK驱动,15m决策K线,小型激进交易者选择另一侧时交易大型激进交易者所选的一侧,固定名义金额规模划分,低参数)
假设
一种LONG-SHORT、单一标的的MICROSTRUCTURE策略,运行于SOLUSDT.BINANCE,由TRADE TICKS驱动,而非K线。该信号按TRADE SIZE对主动吃单流进行分层,并交易两个群体之间的DIVERGENCE:当LARGE激进交易者(单笔交易名义金额高于固定USD——机构/鲸鱼资金流)净BUYING,而SMALL激进交易者(散户)净SELLING时,做LONG;当大型激进交易者在散户买入时净SELLING,则做SHORT。这填补了违规最严重的两个配额维度:short_1m_15m周期(4.7%,而目标为>=10%)以及非仅做多方向(long_only为84.1%,而上限为<=55%),并引入了投资组合几乎未使用的一种DATA PRIMITIVE——按规模分层的原始逐笔成交数据。尽管Binance权重过高(74.1%),仍选择该交易场所,这是经过审慎考虑且有充分理由的例外:该策略需要多年期SUB-HOURLY逐笔数据历史,而Hyperliquid在结构上无法提供(其K线API每个周期约提供5000根K线,因此15m仅覆盖约7周),所以若将策略路由至权重不足的交易场所,必然会因历史数据不足而放弃。选择SOL而不是BTC/ETH是为了留出手续费空间:其典型1-3小时波动约为主流币的2x,因此约0.10%的期货往返成本占目标波动的比例要小得多。设计刻意保持精简(4个参数),而关键在于,大型/小型交易的划分采用FIXED USD名义金额阈值,而不是滚动规模百分位——百分位方法要求每根K线都重新排序交易规模缓冲区,这恰好就是导致Layer-3连续五次300超时的每根K线O(n)模式。
零交易结果是DATA-WINDOW故障,而非阈值故障;在做任何改动前,我已分别验证了这两部分判断。(1)沙盒使用1-MINUTE K线运行,其约20千根K线的预算对应一个约28天、截至最新K线的时间窗口;而目录中收集的SOLUSDT.BINANCE逐笔成交历史覆盖2026-04-29..2026-07-17——两者没有交集,因此on_trade_tick从未触发,两个群体的合计值始终为0,分歧值也恒为0.0,任何阈值都无法触发。(2)我在全部收集到的8.54百万条SOL逐笔数据上重放了完全相同的群体逻辑:产生资金流的15m K线有3,331根,数值范围跨越±0.28(large_imb),small_imb为±0.18,分歧p5/p95 = -0.224/+0.195,而CURRENT门槛(entry_thresh 0.18加上严格的散户反向符号条件)在其中430根K线上触发——即12.9%。因此入场逻辑并非过于严格,我有意NOT放宽它,因为这只会增加边际分歧交易,无法覆盖约0.10%的往返成本。需要修正的是决策周期:bar_type从1-MINUTE改为15-MINUTE,这正是该假设标题中所写的设定,其约208天的沙盒窗口也完全覆盖逐笔数据历史。代码改动仅限于记录测得的信号尺度(此前对散户流量±0.05的估计有误),以及增加计数器和一条on_stop诊断信息,用于报告ticks/flow_bars/entry_fires,以便未来的零交易报告能区分资金流缺失与门槛从未触发,而不再将二者混为一谈。除此之外,所有信号、入场、出场和仓位规模逻辑均逐字节不变,_param_bounds现与搜索的参数保持一致。
verification_loop:sandbox_timeout:验证失败(Layer 3 — 沙盒回测):烟雾测试在约20000根K线的窗口(SOLUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL的208天)上超过了300秒的墙钟时间限制。这通常意味着每根K线的工作量会随历史长度增长——例如反复扫描完整的资金费率/补充数据序列,或在每根K线上于calculate_signal()/on_bar()中重建列表并调用min()/sorted()。在__init__中预先计算已排序的时间戳数组ONCE并使用bisect,或按时间戳缓存查找结果,使每根K线的成本为O(log n)而非O(n)。
实现
在 SOLUSDT.BINANCE USD-M 永续合约上的多空逐笔成交微观结构策略,使用 15 分钟决策 K 线。每笔主动吃单交易根据 FIXED USD 名义金额(large_usd)划分为大户流量与散户流量,并对每个队列的有向名义金额失衡在含流量的 15 分钟 K 线回溯窗口内进行累加。交易信号为背离度 large_imbalance - small_imbalance:仅当大户净买入 WHILE 散户净卖出且背离度突破 entry_thresh 时开 LONG,仅在镜像情形下开 SHORT。出场条件包括硬性 1.2% 止损、0.8% 止盈(约为 0.10% 往返吃单成本的若干倍数)、反向背离翻转、12 根 K 线的时间止损,以及在交易已突破 0.15% 后触发的背离塌缩出场。每笔 tick 的计算复杂度为 O(1),每根 K 线为 O(lookback),不使用规模百分位与历史重扫;若窗口内无 tick 流量,则两个失衡均为 0,策略停止运作而非以价格代理替代。
验证结果
sandbox_timeout:验证失败(Layer 3 — 沙盒回测):烟雾测试在约20000根K线的窗口(SOLUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL的208天)上超过了300秒的墙钟时间限制。这通常意味着每根K线的工作量会随历史长度增长——例如反复扫描完整的资金费率/补充数据序列,或在每根K线上于calculate_signal()/on_bar()中重建列表并调用min()/sorted()。在__init__中预先计算已排序的时间戳数组ONCE并使用bisect,或按时间戳缓存查找结果,使每根K线的成本为O(log n)而非O(n)。
迭代历史
验证失败(Layer 3 — 沙盒回测):未产生交易 使用的K线类型:SOLUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL,处理的K线数:204740 诊断信息:should_enter() 在评估的204732根K线上返回了0次方向 -> 你的ENTRY CONDITION从未触发。请放宽入场逻辑/阈值。 请确保你的策略能在给定数据和参数下产生交易。
验证失败(Layer 3 — 沙盒回测):未产生交易 使用的K线类型:SOLUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL,处理的K线数:40747 诊断信息:should_enter() 在评估的40687根K线上返回了0次方向 -> 你的ENTRY CONDITION从未触发。请放宽入场逻辑/阈值。 请确保你的策略能在给定数据和参数下产生交易。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。