Skip to content

View translation

BtcDailyPivotPointBounceReversalLongShort

Hypotheses

BTC Single-Asset Pivot Point Bounce Reversal Long-Short on BINANCE Daily (Carlucci 1984 / Person 1995 Floor-Trader Pivot Levels, Event-Driven)

Hypotheses

Single-asset Pivot Point bounce reversal strategy on BTCUSDT.BINANCE — uses the classic floor-trader's pivot point formula derived from the prior bar's HLC to compute support/resistance levels, then trades reversal bounces when price tests these levels. Mechanism: (1) For each bar at close, compute pivot levels from PRIOR bar's HLC: Pivot_P = (bar[-1].high + bar[-1].low + bar[-1].close) / 3; R1 = 2 × P - bar[-1].low; S1 = 2 × P - bar[-1].high; R2 = P + (bar[-1].high - bar[-1].low); S2 = P - (bar[-1].high - bar[-1].low). (2) BULLISH BOUNCE TRIGGER: current bar's low <= S1 OR low <= S2 (price tested support level) AND current bar's close > S_tested × (1 + bounce_buffer) (default 0.3%, price closed back above support, bouncing). (3) BEARISH BOUNCE TRIGGER: current bar's high >= R1 OR high >= R2 AND current bar's close < R_tested × (1 - bounce_buffer). (4) FLAT otherwise. This implements the floor-trader's pivot framework documented by Frank Tucci's traders (Carlucci 1984 'Modern Commodities Trading Strategies'), formalized by John Person 1995 'Mastering Pivot Point Patterns' and Larry Pesavento. Distinct from all my 15 in-pipeline event-driven BTC patterns: those use bar-shape comparisons (range, body, wick, sequence, volume, transformation); Pivot Points use a DERIVED PRICE-LEVEL FORMULA based on prior bar's HLC. The mechanism is FUNDAMENTALLY EVENT-DRIVEN (bounce off a computed level) AND TRANSLATION-ROBUST (the formula scales naturally with bar interval — each bar's HLC produces pivot levels for the next bar regardless of timeframe). Single-asset scope = no multi-asset translation curse. Helps direction quota (90.6% long-only).

Hypotheses

Iteration 2 fix for the Layer-2 'frozen signal: all signals 0.0' failure across the synthetic scenarios. Root cause was the gated-signal anti-pattern: calculate_signal() returned a nonzero conviction only on a discrete pivot-level pierce-and-reclaim event and 0.0 otherwise, which on smooth synthetic data is every bar -> constant 0.0. Fix: calculate_signal() now ALWAYS returns a continuous, bar-varying value — on non-bounce bars it returns tanh((close - P)/range), the signed normalized distance of the close from the pivot, which varies every bar. The binary decision stays gated: a confirmed support/resistance bounce returns magnitude >= 2.0 (now graded by how far the close reclaimed past the tested level), and should_enter() thresholds at entry_threshold=1.5, so real entries are unchanged from the version that already passed Layer 1 and the same pivot-bounce logic still drives trades at Layer 3. should_exit()'s opposite-side close and position_size()'s zero-check were moved behind the threshold so the now-nonzero continuous base cannot cause spurious exits or sizing (avoids a Layer-3 regression). Imports are untouched (numpy only, no banned imports), preserving the Layer-1 pass. Venue/leverage unchanged: BINANCE futures at leverage 2.0 is required because the strategy shorts, and position_size genuinely consumes the leverage (equity * position_pct * leverage).

Hypotheses

No edge in the base mechanism. The floor-trader pivot-point bounce-reversal on BTC daily has negative expectancy across 2020-2026: profit_factor 0.87, expectancy -119/trade, total_return -79.3%, Sharpe -0.32, losing in most years (2020 -40%, 2024 -47.5%, 2026 -54.6%). The structural flaw is fading a trending asset: win_rate is a coin-flip 49.9% AND avg_win (1565) < avg_loss (1794), because the 3% stop is hit by trend continuation more often than the 5% take-profit reaches a reversal target. The signal is implemented correctly and is genuinely long-short (400L/288S) over an ample 688-trade sample, so this is a real, undistorted negative edge, not small-sample noise. avg_position_pct (143%) is mildly above the intended ~120% and worth a glance, but it is NOT the primary cause — the -35%/-49% days align with genuine BTC crash days at ~1.3x leverage, and even at correct sizing a PF of 0.87 still loses. This is a hypothesis-level failure (reversal-fading a trender), not a code/sizing bug; with negative expectancy across regimes there is nothing for optimization to tune toward. Not worth 2 hours of optimization.

Implementation

Single-asset long-AND-short floor-trader pivot-point bounce reversal on BTCUSDT.BINANCE USD-M perp, daily bars, pure OHLCV. Computes classic pivot levels (P, R1/R2, S1/S2) from the prior bar's HLC; goes long when the current bar pierces a support level and closes back above it, short when it pierces a resistance level and closes back below. calculate_signal() now returns a continuous, bar-varying monitoring score (tanh of the close's distance from the pivot, normalized by the pivot range) on non-bounce bars, while a confirmed bounce returns magnitude >= 2.0. Entries are gated in should_enter() at entry_threshold=1.5, so only confirmed bounces trade. Exits: stop-loss, take-profit, opposite-side confirmed bounce, or max-hold time stop. Leverage 2.0 (~1.2x equity notional, both directions).

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['min_notional', 'position_pct', 'bounce_buffer', 'max_hold_bars', 'stop_loss_pct', 'take_profit_pct'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: Frozen signal: all 496 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - steady_downtrend: Frozen signal: all 496 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - flat_ranging: Frozen signal: all 496 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - zero_volume: Frozen signal: all 496 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - price_gap: Frozen signal: all 496 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.

Backtest Review

Signal functions cleanly: 688 entries from 2332 bars, 0 dropped; genuinely long-short (400L/288S)

Backtest Review

Ample sample (688 trades) — the negative result is informative, not noise

Backtest Review

Negative edge: profit_factor 0.87, expectancy -119/trade, total_return -79.3%, Sharpe -0.32

Backtest Review

Coin-flip win_rate 49.9% with avg_win (1565) < avg_loss (1794) — negative by construction

Backtest Review

max_drawdown 80.6% (CI to 99.3%), skew -3.46, kurtosis 51 — fat left tail with -26%/-35%/-49% crash days

Backtest Review

Loses in most years: 2020 -40%, 2024 -47.5%, 2025 -10.5%, 2026 -54.6%

Backtest Review

Fading computed levels on a trending asset (BTC): the 3% stop is hit by continuation more often than the 5% TP

Backtest Review

avg_position_pct 143% mildly above intended ~120% (worth a glance, but not the primary failure)

Outcome Summary

This strategy traded classic floor-trader pivot-point bounces both directions on BTC daily, computing support/resistance from the prior bar's HLC and fading tests of those levels. The signal fired cleanly across 688 balanced trades, but it had a real, undistorted negative edge — profit factor 0.87, Sharpe -0.32, -79.3% total return, an 80.6% drawdown with a fat left tail, and losses in most years. The analyst abandoned it at the backtest-review gate on its second iteration, identifying the core flaw as fading a trending asset (the 3% stop catches continuation before the 5% target catches a reversal), a hypothesis-level failure with nothing for optimization to tune toward, so it never advanced to optimization or risk review.

Outcome Summary

Reversal-fading computed support/resistance levels on a trending asset like BTC is a hypothesis-level loser — continuation hits the stop before the reversal target pays, producing a coin-flip win rate with average loss exceeding average win and fat left-tail crash exposure that no parameter tuning can fix.

Outcome Summary

The backtest-review analyst issued an 'abandon' verdict: the signal was implemented correctly and genuinely two-sided over a large sample, so the negative edge is real and undistorted — the structural flaw is fading a trending asset, where the 3% stop is hit by trend continuation more often than the 5% take-profit reaches a reversal target, giving a sub-1 payoff at a coin-flip win rate (sizing at 143% was flagged but not the primary cause).

Outcome Summary

A single-asset long-and-short floor-trader pivot-point bounce-reversal strategy on BTCUSDT daily Binance futures (2.0x leverage), computing classic Carlucci/Person pivot levels (P, R1/R2, S1/S2) from the prior bar's HLC and trading reversals — long when price pierced a support level and closed back above it, short on the mirror at resistance.

Outcome Summary

Across an ample 688 trades (400 long / 288 short) it returned -79.3% with profit factor 0.87, expectancy -$119/trade, Sharpe -0.32, a coin-flip 49.9% win rate, avg win 1,565 < avg loss 1,794, an 80.6% max drawdown (CI to 99.3%), skew -3.46 and kurtosis 51, losing in most years (2020 -40%, 2024 -47.5%, 2026 -54.6%).
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.