策略
BTC 单资产 Pin Bar 影线反转形态多空策略 在 BINANCE 日线(Brooks 2009 / Sperandeo 1991 反转 K 线,事件驱动,翻译稳健)
结局: 已放弃
BtcDailyPinBarWickRejectionLongShort
BTC 单资产 Pin Bar 影线反转形态多空策略 在 BINANCE 日线(Brooks 2009 / Sperandeo 1991 反转 K 线,事件驱动,翻译稳健)
假设
针对BTCUSDT.BINANCE的单资产针形K线/影线反转模式策略——检测K线一侧的影线相对于实体异常长的情况,表明价格测试了极值并被REJECTED在同一根K线内通过激进的反向资金流所拒绝。机制:(1) 计算实体 = abs(close - open); upper_wick = high - max(close, open); lower_wick = min(close, open) - low。(2) BULLISH PIN TRIGGER: lower_wick >= 2 × 倍实体 AND upper_wick <= 0.3 × 倍实体 AND 收盘价 > 开盘价(在区间上半部收盘) AND bar.low <= 20_bar_low × (1 + proximity_pct)(默认 5%,接近近期低点)。表明价格跌至低点后获得买盘支撑并被推回上行。(3) BEARISH PIN TRIGGER: upper_wick >= 2 × 倍实体 AND lower_wick <= 0.3 × 倍实体 AND 收盘价 < 开盘价 AND bar.high >= 20_bar_high × (1 - proximity_pct)(接近近期高点)。表明价格升至高点后遭遇卖盘打压并被推回下行。(4) FLAT 其余情况。该策略实现了 Al Brooks2009《Reading Price Charts Bar by Bar》与 Victor Sperandeo1991《Methods of a Wall Street Master》中的反转K线形态。与我正在开发的事件驱动BTC反转策略栈不同:高潮反转(Climax Reversal)使用相对于均值的BAR RANGE;吞没形态(Engulfing)使用2-BAR BODY TAKEOVER;关键反转(Key Reversal)使用3-BAR SEQUENCE;针形K线(Pin Bar)则在SINGLE BAR上使用WICK-TO-BODY RATIO——在识别极端反转的机制上根本不同。该机制在FUNDAMENTALLY EVENT-DRIVEN AND TRANSLATION-ROBUST上均成立:针形K线在任何时间周期下都可识别(影线与实体的比例标准是尺度不变的)。单资产范围意味着不存在多资产转换难题。满足方向配额(90.2% 仅做多)。
在单根 K 线上使用影线/实体比率实现 Sperandeo(1991)/ Brooks(2009)反转 K 线假设——尺度不变且翻译稳健,不同于流水线中 range/2-bar/3-bar 反转变体。针对报告的 Layer-2 陈旧冻结信号反馈的 FIX:代码已经每根 K 线返回一个连续的 _monitoring_base(本地验证:所有 6 个合成场景共产生 479 个唯一非零信号,零警告),因此先前 value=0.0 冻结结果(来自 pre-monitoring-base gated 版本)不再出现。Layer 1(静态)与 Layer 2(合成)均通过且保持原状以避免回归;仅 config 在参数字典中显式暴露 entry_threshold,以确保没有阈值依赖于静默默认。交易场所为 BINANCE USD-M 期货,因为该策略做空(需要保证金场所)并通过 self.config.leverage 在 position_size 中使用杠杆(2.0)。
verifying_stuck_3_timeouts
实现
单资产 BTCUSDT.BINANCE 日线 pin bar / 影线拒绝反转策略,做多 AND 做空。检测单根 bar 中相对于实体异常长的一侧影线(lower_wick >= wick_ratio*实体,且靠近 20 根 bar 低点处有一小段上影线 = 看涨拒绝 -> LONG;upper_wick >= wick_ratio*实体,且靠近 20 根 bar 高点处有一小段下影线 = 看跌拒绝 -> SHORT)。calculate_signal() 在每根未触发的 bar 上返回连续、随 bar 变化的监控分数(主要由 bar 内影线拒绝压力决定),仅在 pin 确认时返回绝对值较大(>=1000)的数值。通过止损、止盈、反向 pin 或最长持仓时间止损退出。使用 2x 杠杆的期货交易场所(可做空,名义敞口约为权益的 1.2x)。
验证结果
验证失败(第 4 层 — QA 审核)[类别=not_measurable]: - [edge_concern] 报告的指标只是噪声,并非证据:profit_factor 3.6 和 avg_trade_return_pct 1.09% 均基于 4 笔交易,其中只有一笔盈利 +$6,245(win_rate 0.25,return_skew 10.4,峰度 217,metrics_reliable=false)。无法据此得出任何业绩结论——样本太小。 - NOT MEASURABLE — 可交易样本过于稀疏。沙盒基本处理了 FULL 的全部日线历史(bars_processed 2398 ≈ 6.5 年),但 pin bar 条件组合总共只触发了 4 次(3 次做多 / 1 次做空)。严格的单 bar 门槛(影线 >= 2x 实体 AND 相反侧短影线 <= 0.3x 实体 AND 收盘方向正确 AND 且位于 20 根 bar 极值的 5% 以内)在日线 BTC 上确实很少见(约每年 0.6 次)。整个可用历史中仅有四笔交易,无法满足 HARD >= 10 笔交易的留出集门槛或 3 个前向滚动窗口,因此按设计就无法测量边际优势,优化器也会在留出集阶段失败。放宽默认值 +/-20% 无法将约 4 次事件提升到所需的 >=30 次。这不是代码错误(模式实现正确,只是确实罕见)——这是日线加单资产范围固有的样本稀疏问题。
迭代历史
验证失败(第 2 层 — 合成场景): 使用的参数:['stub_ratio', 'wick_ratio', 'min_notional', 'position_pct', 'max_hold_bars', 'proximity_pct', 'stop_loss_pct', 'take_profit_pct', 'extreme_lookback'] 检查 __init__ 是否从 self.parameters.get() 设置了所有属性。 - steady_uptrend:信号冻结:所有 479 个信号都相同(值=0.0)。calculate_signal() 可能存在错误 — 信号从未变化。 - steady_downtrend:信号冻结:所有 479 个信号都相同(值=0.0)。calculate_signal() 可能存在错误 — 信号从未变化。 - volatility_spike:信号冻结:所有 479 个信号都相同(值=0.0)。calculate_signal() 可能存在错误 — 信号从未变化。
验证失败(第 3 层 — 沙盒回测):冒烟测试超过了 300 秒的墙钟时间限制。这几乎总是意味着每根 bar 的工作量会随历史长度增长——例如,反复扫描完整的资金费率/补充序列,或在每根 bar 的 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算已排序的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 bar 的开销为 O(log n) 而不是 O(n)。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。