// This Pine Script® code is licensed under Apache-2.0
// SPDX-License-Identifier: Apache-2.0
// © PineForge contributors 2026
//
// PF probe 23 — Dual-Thrust open-anchored range breakout
// Purpose: parity test for max-of-(hh-lc, hc-ll) range computation anchored
// to the bar's `open` to derive intraday upper/lower bounds.
//
//@version=6
strategy("Dual Thrust Breakout", overlay=true, initial_capital=1000000, process_orders_on_close=false, pyramiding=1, commission_type=strategy.commission.percent, commission_value=0, slippage=0, default_qty_type=strategy.fixed, default_qty_value=1)
// === Inputs ===
lookback = input.int(4, "Lookback Period", minval=1)
kUp = input.float(0.5, "Upper K Factor", step=0.1)
kDn = input.float(0.5, "Lower K Factor", step=0.1)
// === Range calculation ===
hh = ta.highest(high, lookback)
lc = ta.lowest(close, lookback)
hc = ta.highest(close, lookback)
ll = ta.lowest(low, lookback)
range1 = hh - lc
range2 = hc - ll
dualRange = math.max(range1, range2)
// === Upper and lower bounds ===
upperBound = open + kUp * dualRange
lowerBound = open - kDn * dualRange
// === Signals ===
longCond = close > upperBound
shortCond = close < lowerBound
if longCond
strategy.entry("Long", strategy.long)
if shortCond
strategy.entry("Short", strategy.short)
// === Exit on opposite ===
if strategy.position_size > 0 and close < lowerBound
strategy.close("Long")
if strategy.position_size < 0 and close > upperBound
strategy.close("Short")
plot(upperBound, "Upper", color=color.green)
plot(lowerBound, "Lower", color=color.red)