Sitzungsbrechung Scalping-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-09-20 17:00:16
Tags:

Übersicht

Diese Strategie kombiniert Multi-Timeframe-Donchians mit kurzfristigen Ausbrüchen während einer benutzerdefinierten Sitzung.

Strategie Logik

  1. Berechnen Sie Tages- und kurzfristige Mittelpunkte zur Bildung von Ausbruchszonen über Zeitrahmen hinweg.

  2. Handel nur während einer anpassbaren Handelssitzung.

  3. Verwenden Sie Echtzeit-EMA des Preises als Einstiegspreis.

  4. Stellen Sie Haltestellen außerhalb der Ausbruchszonen ein und stoppen Sie, wenn der Ausbruch fehlschlägt.

  5. Schließen Sie Positionen, wenn der Preis in der Nähe der Mitte zurückfällt, was den gescheiterten Ausbruch bestätigt.

Vorteile

  1. Multi-Zeitrahmen kombiniert, um falsche Ausbrüche effektiv zu filtern.

  2. Definitive Sitzungen vermeiden Risiken bei wichtigen Nachrichtenereignissen.

  3. EMA-Tracking ermöglicht zeitnahe Einträge im Einklang mit der Dynamik.

  4. Stopps helfen, Risiken zu kontrollieren.

  5. Ein erzwungener Ausstieg aus der Sitzung vermeidet Risiken über Nacht.

Risiken

  1. Kurzfristige Ausbrüche können mit Schläge und Stopps konfrontiert sein.

  2. Einige Ausbrüche können nicht vollständig profitieren, bevor die Sitzung zu Ende ist.

  3. Eine schlechte Definition der Sitzung könnte Gelegenheiten verpassen.

  4. Es gibt keine Garantie, dass jeder Ausbruch den erwarteten Gewinn erzielt.

  5. Die Optimierung birgt die Gefahr, dass die Parameter zu hoch angepasst werden.

Erweiterung

  1. Testen Sie die Ausbruchparameter, um optimale Kombinationen zu finden.

  2. Bewertung zusätzlicher Indikatoren zur Verbesserung der Eingangsgenauigkeit.

  3. Optimieren Sie die Handelssitzung für die Gewinn- und Risikobilanz.

  4. Die Integration der Forschung erfordert Gewinnstrategien, um Gewinne zu erzielen.

  5. Versuchsparameterunterschiede bei verschiedenen Symbolen.

  6. Einsatz von maschinellem Lernen für dynamische Parameteroptimierung.

Schlussfolgerung

Mit Optimierungen rund um falsche Ausbrüche und Risikokontrollen kann es zu einem pragmatischen und effizienten kurzfristigen System verfeinert werden.


/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Breakout Scalper", overlay=true)

// -------------------------------------------------------------------------------------------------
// INPUTS
// -------------------------------------------------------------------------------------------------
// Period of the "fast" donchian channel
fast_window = input(title="Fast Window",  defval=13, minval=1)
// Used for the volatility (atr) period
slow_window = input(title="Slow Window",  defval=52, minval=1)
// Period of EMA used as the current price
instant_period = input(title="Instant Period",  defval=3, minval=1)
// Minimum ratio of cloud width to ATR in order for trade to be active
cloud_min_percent = input(title="Minimum Cloud ATR Multiplier", type=float, defval=1.0, minval=0)
// Session where we allow trades to be active
trading_sesh = input(title="Trading Session",  defval='1000-1500')
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// SESSION TIMING
// -------------------------------------------------------------------------------------------------
is_newbar(t) =>
    na(t[1]) and not na(t) or t[1] < t

day_time = time("D")
sess_time = time(timeframe.period, trading_sesh)
day_open_bar = is_newbar(day_time)
sess_open_bar = is_newbar(sess_time)
sess_close_bar = na(sess_time) and not na(sess_time[1])
sess_is_open = false
sess_is_open := sess_open_bar ? true : (sess_close_bar ? false : sess_is_open[1])
// -------------------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------------------
// DONCHIANS
// -------------------------------------------------------------------------------------------------
slow_high = na
slow_high := day_open_bar ? high : (high > slow_high[1] ? high : slow_high[1])
slow_low = na
slow_low := day_open_bar ? low : (low < slow_low[1] ? low : slow_low[1])
slow_mid = (slow_high + slow_low) / 2

fast_low = max(slow_low, lowest(fast_window))
fast_high = min(slow_high, highest(fast_window))
fast_mid = (fast_low + fast_high) / 2
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// TREND CLOUD
// -------------------------------------------------------------------------------------------------
cloud_width = fast_mid - slow_mid
slow_atr = atr(slow_window)
cloud_percent = cloud_width / slow_atr
cloud_color = cloud_percent > cloud_min_percent ? green : (cloud_percent < -cloud_min_percent ? red : gray)

fp = plot(fast_mid, title="Fast MidR", color=green)
sp = plot(slow_mid, title="Slow MidR", color=red)
fill(fp, sp, color=cloud_color)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// INSTANT PRICE
// -------------------------------------------------------------------------------------------------
instant_price = ema(close, instant_period)
plot(instant_price, title="Instant Price", color=black, transp=50)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// ENTRY SIGNALS & STOPS
// -------------------------------------------------------------------------------------------------
buy_entry_signal = sess_is_open and (instant_price > fast_mid) and (cloud_percent > cloud_min_percent)
sell_entry_signal = sess_is_open and (instant_price < fast_mid) and (cloud_percent < -cloud_min_percent)
buy_close_signal = sess_close_bar or (cloud_percent < 0)
sell_close_signal = sess_close_bar or (cloud_percent > 0)

entry_buy_stop = slow_high
entry_sell_stop = slow_low
exit_buy_stop = max(slow_low, fast_low)
exit_sell_stop = min(slow_high, fast_high)

entry_buy_stop_color = (strategy.position_size == 0) ? (buy_entry_signal ? green : na) : na
plotshape(entry_buy_stop, location=location.absolute, color=entry_buy_stop_color, style=shape.circle)
entry_sell_stop_color = (strategy.position_size == 0) ? (sell_entry_signal ? red : na) : na
plotshape(entry_sell_stop, location=location.absolute, color=entry_sell_stop_color, style=shape.circle)
exit_buy_stop_color = (strategy.position_size > 0) ? red : na
plotshape(exit_buy_stop, location=location.absolute, color=exit_buy_stop_color, style=shape.xcross)
exit_sell_stop_color = (strategy.position_size < 0) ? green : na
plotshape(exit_sell_stop, location=location.absolute, color=exit_sell_stop_color, style=shape.xcross)
// -------------------------------------------------------------------------------------------------


// -------------------------------------------------------------------------------------------------
// STRATEGY EXECUTION
// -------------------------------------------------------------------------------------------------
strategy.entry("long", strategy.long, stop=entry_buy_stop, when=buy_entry_signal)
strategy.cancel("long", when=not buy_entry_signal)
strategy.exit("stop", "long", stop=exit_buy_stop)
strategy.entry("short", strategy.short, stop=entry_sell_stop, when=sell_entry_signal)
strategy.cancel("short", when=not sell_entry_signal)
strategy.exit("stop", "short", stop=exit_sell_stop)
strategy.close("long", when=buy_close_signal)
strategy.close("short", when=sell_close_signal)
// -------------------------------------------------------------------------------------------------

Mehr