Umkehrung der kurzfristigen Breakout-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-21 17:03:32
Tags:

img

Übersicht

Diese Strategie zielt darauf ab, kurzfristige Umkehrhandelschancen zu erfassen. Sie eröffnet eine Short-Position nach N aufeinanderfolgenden Up-Bars und schließt eine Short-Position nach M aufeinanderfolgenden Down-Bars. Sie beinhaltet auch einen Zeitrahmenfilter und Stop-Loss/Take-Profit-Funktionen.

Logik

  1. Eingabeparameter: Anzahl der aufeinanderfolgenden oberen Stangen N, der aufeinanderfolgenden unteren Stangen M
  2. Definition:
    • ups zählt Anzahl der Up-Bars, Preis>Preis[1] dann +1, andernfalls auf 0 zurückgesetzt
    • dns zählt Anzahl der Down-Bars, Preis
  3. Eintritt: kurz, wenn ups≥N; nah, wenn dns≥M
  4. Ausgang: festes Stop-Loss/Take-Profit oder Ende des Zeitrahmens

Vorteile

  1. Erfassen von Umkehrhandelschancen, geeignet für den kurzfristigen Handel
  2. Flexible Zeitrahmen für verschiedene Handelspläne
  3. Eingebettete Stop-Loss-/Take-Profit-Verfahren zur Erleichterung des Risikomanagements

Risiken

  1. Kurzfristige Umkehrungen können fehlschlagen und wiederum zu Verlusten führen
  2. N, M-Parameter erforderlich, zu groß oder zu klein, ungünstig
  3. Eine falsche Stoppzeit kann den Verlust nicht rechtzeitig stoppen.

Optimierungsrichtlinien

  1. Kombination mit Trendindikator, um gegen Trendgeschäfte zu vermeiden
  2. Dynamische Anpassung der Parameter N, M
  3. Optimierung des Stop-Loss-Mechanismus

Schlussfolgerung

Die Strategie erfasst kurzfristige Handelschancen durch statistische K-Linienmuster. Vernünftige Parameter-Tuning und Risikokontrollmaßnahmen sind entscheidend für stabile Gewinne. Weitere Verbesserungen bei der Kombination von Trendanalyse und dynamischer Parameteranpassung können zu noch besseren Leistungen führen.


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Strategy
strategy("Up/Down Short Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.short)

consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')

price = close

ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0

dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0

// Strategy Backtesting
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100

longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick

plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
message_takeprofit = input("", title="Take Profit message")
message_stoploss = input("", title="Stop Loss message")

// Strategy Execution
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
    strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
    
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
    strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesltp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_takeprofit)
if strategy.position_size < 0 and enablesltp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_stoploss)






Mehr