
Es handelt sich um eine intelligente Handelsstrategie, die auf einer Durchbruchstruktur (BOS) und einer Bestätigung des Handelsvolumens basiert. Die Strategie erzeugt ein Handelssignal durch die Überwachung von Preiskünften, die vorläufige Höhen oder Tiefen durchbrechen, und kombiniert die Bestätigung mit der Verstärkung des Handelsvolumens. Die Strategie verwendet eine mehrfache Bedingungsprüfung, einschließlich der Anforderung der Anzahl der Bestätigungen in Folge und der dynamischen Stop-Loss-Einstellung, um die Zuverlässigkeit des Handels und die Risikokontrolle zu verbessern.
Die Kernlogik der Strategie umfasst die folgenden Schlüsselelemente:
Es ist ein Strategie-System, das die klassische Theorie der technischen Analyse mit modernen Methoden des quantitativen Handels kombiniert. Die Strategie hat eine gute Stabilität und Zuverlässigkeit durch Multiple-Condition-Verifizierung und strenge Risikokontrolle. Obwohl es einige Aspekte gibt, die optimiert werden müssen, ist die Gesamtrahmenkonzeption vernünftig und hat einen guten Einsatzwert.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("BOS and Volume Strategy with Confirmation", overlay=true)
// Parameters
swingLength = input.int(20, title="Swing Length", minval=1)
volumeMultiplier = input.float(1.1, title="Volume Multiplier", step=0.1)
volumeSMA_length = input.int(10, title="Volume SMA Length", minval=1)
takeProfitPercentage = input.float(0.02, title="Take Profit Percentage", step=0.01)
stopLossPercentage = input.float(0.15, title="Stop Loss Percentage", step=0.01) // New parameter for stop loss
atrLength = input.int(14, title="ATR Length")
confirmationBars = input.int(2, title="Confirmation Bars", minval=1)
// Calculate Swing Highs and Lows
swingHigh = ta.highest(high, swingLength)[1]
swingLow = ta.lowest(low, swingLength)[1]
// Calculate Volume Moving Average
volumeSMA = ta.sma(volume, volumeSMA_length)
highVolume = volume > (volumeSMA * volumeMultiplier)
// Break of Structure Detection with Confirmation
var int bullishCount = 0
var int bearishCount = 0
if (close > swingHigh and highVolume)
bullishCount := bullishCount + 1
bearishCount := 0
else if (close < swingLow and highVolume)
bearishCount := bearishCount + 1
bullishCount := 0
else
bullishCount := 0
bearishCount := 0
bullishBOSConfirmed = (bullishCount >= confirmationBars)
bearishBOSConfirmed = (bearishCount >= confirmationBars)
// Entry and Exit Conditions
var float entryPrice = na // Declare entryPrice as a variable
if (bullishBOSConfirmed and strategy.position_size <= 0)
entryPrice := close // Use ':=' for assignment
strategy.entry("Long", strategy.long)
if (strategy.position_size > 0)
// Calculate stop loss price
stopLossPrice = entryPrice * (1 - stopLossPercentage)
strategy.exit("Take Profit Long", from_entry="Long", limit=entryPrice * (1 + takeProfitPercentage), stop=stopLossPrice)
if (bearishBOSConfirmed and strategy.position_size >= 0)
entryPrice := close // Use ':=' for assignment
strategy.entry("Short", strategy.short)
if (strategy.position_size < 0)
// Calculate stop loss price
stopLossPrice = entryPrice * (1 + stopLossPercentage)
strategy.exit("Take Profit Short", from_entry="Short", limit=entryPrice * (1 - takeProfitPercentage), stop=stopLossPrice)
// Plot Swing Highs and Lows for Visualization
plot(swingHigh, title="Swing High", color=color.green, linewidth=1)
plot(swingLow, title="Swing Low", color=color.red, linewidth=1)