Diese Strategie verwendet das Prinzip der Preisdifferenz, wenn der Preis die jüngsten Tiefs durchbricht, mit Stop-Loss- und Take-Profit-Orders, um den niedrigsten Preis für die Gewinnnahme zu verfolgen.
Es identifiziert Lücken, wenn der Preis unter den niedrigsten Preis in den letzten N Stunden bricht, geht lang basierend auf konfiguriertem Prozentsatz, mit Stop-Loss- und Take-Profit-Orders. Stop-Loss-Linie und Take-Profit-Linie bewegen sich entsprechend der Preisbewegung.
Die Vorteile dieser Strategie:
Es gibt auch einige Risiken:
Die Strategie kann in folgenden Bereichen verbessert werden:
Dies ist eine einfache und wirksame Trailing Stop Loss Strategie, die auf Preislücken basiert. Sie reduziert falsche Einträge und Sperren in Gewinne effektiv. Es gibt noch viel Raum für Verbesserungen bei Parameter-Tuning und Signalfilterung. Es lohnt sich, weiter zu forschen und zu verfeinern.
/*backtest start: 2022-11-21 00:00:00 end: 2023-11-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Squeeze Backtest by Shaqi v1.0", overlay=true, pyramiding=0, currency="USD", process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, backtest_fill_limits_assumption=0) strategy.risk.allow_entry_in(strategy.direction.long) R0 = "6 Hours" R1 = "12 Hours" R2 = "24 Hours" R3 = "48 Hours" R4 = "1 Week" R5 = "2 Weeks" R6 = "1 Month" R7 = "Maximum" buyPercent = input( title="Buy, %", type=input.float, defval=3, minval=0.01, step=0.01, inline="Percents", group="Squeeze Settings") * 0.01 sellPercent = input(title="Sell, %", type=input.float, defval=1, minval=0.01, step=0.01, inline="Percents", group="Squeeze Settings") * 0.01 stopPercent = input(title="Stop Loss, %", type=input.float, defval=1, minval=0.01, maxval=100, step=0.01, inline="Percents", group="Squeeze Settings") * 0.01 isMaxBars = input( title="Max Bars To Sell", type=input.bool, defval=true , inline="MaxBars", group="Squeeze Settings") maxBars = input( title="", type=input.integer, defval=2, minval=0, maxval=1000, step=1, inline="MaxBars", group="Squeeze Settings") bind = input( title="Bind", type=input.source, defval=close, group="Squeeze Settings") isRange = input( title="Fixed Range", type=input.bool, defval=true, inline="Range", group="Backtesting Period") rangeStart = input( title="", defval=R4, options=[R0, R1, R2, R3, R4, R5, R6, R7], inline="Range", group="Backtesting Period") periodStart = input(title="Backtesting Start", type=input.time, defval=timestamp("01 Aug 2021 00:00 +0000"), group="Backtesting Period") periodEnd = input( title="Backtesting End", type=input.time, defval=timestamp("01 Aug 2022 00:00 +0000"), group="Backtesting Period") int startDate = na int endDate = na if isRange if rangeStart == R0 startDate := timenow - 21600000 endDate := timenow else if rangeStart == R1 startDate := timenow - 43200000 endDate := timenow else if rangeStart == R2 startDate := timenow - 86400000 endDate := timenow else if rangeStart == R3 startDate := timenow - 172800000 endDate := timenow else if rangeStart == R4 startDate := timenow - 604800000 endDate := timenow else if rangeStart == R5 startDate := timenow - 1209600000 endDate := timenow else if rangeStart == R6 startDate := timenow - 2592000000 endDate := timenow else if rangeStart == R7 startDate := time endDate := timenow else startDate := periodStart endDate := periodEnd afterStartDate = (time >= startDate) beforeEndDate = (time <= endDate) notInTrade = strategy.position_size == 0 inTrade = strategy.position_size > 0 barsFromEntry = barssince(strategy.position_size[0] > strategy.position_size[1]) entry = strategy.position_size[0] > strategy.position_size[1] entryBar = barsFromEntry == 0 notEntryBar = barsFromEntry != 0 buyLimitPrice = bind - bind * buyPercent buyLimitFilled = low <= buyLimitPrice sellLimitPriceEntry = buyLimitPrice * (1 + sellPercent) sellLimitPrice = strategy.position_avg_price * (1 + sellPercent) stopLimitPriceEntry = buyLimitPrice - buyLimitPrice * stopPercent stopLimitPrice = strategy.position_avg_price - strategy.position_avg_price * stopPercent if afterStartDate and beforeEndDate and notInTrade strategy.entry("BUY", true, limit = buyLimitPrice) strategy.exit("INSTANT", limit = sellLimitPriceEntry, stop = stopLimitPriceEntry) strategy.cancel("INSTANT", when = inTrade) if isMaxBars strategy.close("BUY", when = barsFromEntry >= maxBars, comment = "Don't Sell") strategy.exit("SELL", limit = sellLimitPrice, stop = stopLimitPrice) showStop = stopPercent <= 0.03 plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", style=plot.style_linebr, color=color.red, linewidth=1) plot(sellLimitPrice, title="Take Profit Limit Order", style=plot.style_linebr, color=color.purple, linewidth=1) plot(strategy.position_avg_price, title="Buy Order Filled Price", style=plot.style_linebr, color=color.blue, linewidth=1) plot(buyLimitPrice, title="Trailing Buy Limit Order", style=plot.style_stepline, color=color.new(color.blue, 30), offset=1)