Momentum Pullback-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-12 16:34:52
Tags:

img

Übersicht

Die Momentum Pullback Strategie identifiziert extreme RSI-Werte als Impulssignale für eine Long/Short-Strategie. Im Gegensatz zu den meisten RSI-Strategien versucht sie, den ersten Pullback in Richtung der extremen RSI-Werte zu kaufen oder zu verkaufen.

Der Kurs wird bei der ersten Rücknahme auf die 5-Perioden-EMA (niedrig)/5-Perioden-EMA (hoch) lang/kurz eingestellt und bei der rollenden 12-Bar-Hoch/Tief-Marke ausgesetzt.

Der vorgeschlagene Stop-Loss beträgt X ATRs (anpassbar in Inputs) vom Einstiegspreis.

Die Strategie ist relativ robust in allen Zeitrahmen und Märkten mit einer Gewinnrate von 60% bis 70% und größeren Gewinntrades.

Strategie Logik

  1. Berechnen Sie den 6-Perioden-RSI und ermitteln Sie Werte über 90 (Überkauft) und unter 10 (Überverkauft).

  2. Wenn der RSI überkauft ist, gehen Sie auf einen Pullback zum 5-Perioden-EMA (Tief) innerhalb von 6 Bars lang.

  3. Wenn der RSI überverkauft ist, gehen Sie kurz auf einen Pullback zum 5-Perioden-EMA (Hoch) innerhalb von 6 Bars.

  4. Die Exit-Strategie ist ein beweglicher Take-Profit, wobei das anfängliche Ziel das höchste Hoch/niedrigste Tief der letzten 12 Bars ist und bei jedem neuen Bars für einen rollenden Exit aktualisiert wird.

  5. Der Stop-Loss beträgt X ATRs vom Einstiegspreis (anpassbar).

Analyse der Vorteile

Die Strategie kombiniert RSI-Extreme als Momentumsignale und Pullback-Einträge, um potenzielle Umkehrpunkte in Trends mit einer hohen Gewinnrate zu erfassen.

Der Mechanismus der Profitentnahme verriegelt sich in teilweisen Gewinnen entsprechend der tatsächlichen Kursentwicklung und verringert die Abzüge.

Der ATR-Stopp hilft bei der effektiven Kontrolle von Einzelhandelsverlusten.

Gute Robustheit für die Anwendung auf verschiedenen Märkten und Parameter-Sets für eine einfache reale Handelsreplikation.

Risikoanalyse

Ein zu breiter Stop Loss, wenn der ATR-Multiplikator zu hoch eingestellt ist, was den Verlust pro Handel erhöht.

Die Verlagerung des Gewinnmechanismus kann die Gewinnspanne verringern, wenn eine längere Konsolidierung eintritt.

Fehlende Trades, wenn sich der Pullback über 6 Bar erstreckt.

Potenzielle Ausrutschung oder falscher Ausbruch, wenn wichtige Nachrichten auftreten.

Optimierungsrichtlinien

Test Verkürzung der Einstiegsbalkenzahl von 6 auf 4 zur Verbesserung der Einstiegsrate.

Test, bei dem der ATR-Multiplikator erhöht wird, um einen weiteren Kontrollverlust pro Handel zu erzielen.

Verknüpfung von Daten mit Daten aus der Datenbank

Eintritt bei Rückzugsspanne von 60 Minuten in den Mittelpunkt, um Lärm zu filtern.

Schlussfolgerung

Die Momentum-Pullback-Strategie ist ein allgemein sehr praktischer kurzfristiger Mittelumkehransatz, der Elemente des Trends, der Umkehrung und des Risikomanagements für einen einfachen realen Handel beinhaltet und gleichzeitig ein Alpha-generierendes Potenzial birgt. Weitere Stabilitätsverbesserungen sind durch Parameter-Tuning und Kombination zusätzlicher Indikatoren möglich.


/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Marcns_

//@version=5
strategy("M0PB", commission_value = 0.0004, slippage = 1, initial_capital=30000)
// commision is equal to approx $3.8 per round trip which is accurate for ES1! futures and slippage per trade is conservatively 1 tick in and 1 tick out. 

// *momentum pull back* //

// long / short strategy that identifies extreme readings on the rsi as a *momentum signal*
//Strategy buys/ sells a pullback to the 5ema(low)/ 5ema(high) and exits at rolling 12 bar high/ low. The rolling high/ low feature means that 
//if price enters into a pronlonged consolidation the profit target will begin to reduce with each new bar. The best trades tend to work within 2-6 bars
// hard stop is X atr's from postion average price. This can be adjusted in user inputs.
// built for use on 5 min & 1min intervals on: FX, Indexes, Crypto
// there is a lot of slack left in entries and exits but the overall strategy is fairly robust across timeframes and markets and has between 60%-70% winrate with larger winners.
// signals that occur from economic news volatility are best avoided.  


// define rsi
r = ta.rsi(close,6) 

// find rsi > 90
b = 0.0

if r >= 90
    b := 1.0
else
    na

// find rsi < 10
s = 0.0

if r <= 10
    s := -1.0
else
    na

// plot rsi extreme as painted background color
bgcolor(b ? color.rgb(255, 82, 82, 49): na)
bgcolor(s? color.rgb(76, 175, 79, 51): na)



// exponential moving averages for entries. note that source is high and low (normally close is def input) this creates entry bands
//entry short price using high as a source ta.ema(high,5)
es = ta.ema(high,5)

//entry long price using low as a source ta.ema(low,5)
el = ta.ema(low,5)


// long pullback entry trigger: last period above ema and current low below target ema entry 
let = 0.0

if low[1] > el[1] and low <= el
    let := 1.0
else
    na
//short entry trigger ""
set = 0.0

if high[1] < es[1] and high >= es
    set := -1.0
else
    na

// create signal "trade_l" if RSI > 90 and price pulls back to 5ema(low) within 6 bars
trade_l = 0.0

if ta.barssince(b == 1.0) < 6 and let == 1.0
    trade_l := 1.0
else
    na

plot(trade_l, "l_entry", color.green)

//create short signal "trade_s" if rsi < 10 and prices pullback to 5em(high) wihthin 6 bars
trade_s = 0.0

if ta.barssince(s == -1.0) < 6 and set == -1.0
    trade_s := -1.0
else
    na

plot(trade_s, "s_entry", color.purple)

// define price at time of trade_l signal and input value into trade_p to use for stop parems later
trade_p = strategy.position_avg_price

//indentify previous 12 bar high as part of long exit strat
// this creates a rolling 12 bar high target... a quick move back up will exit at previous swing high but if a consolidation occurs system will exit on a new 12 bar high which may be below prev local high
ph = ta.highest(12)

// inverse of above for short exit strat - previous lowest low of 12 bars as exit (rolling)
pl = ta.lowest(12)


// 1.5 atr stop below entry price (trade_p defined earlier) as part of exit strat
atr_inp = input.float(2.75, "atr stop", minval = 0.1, maxval = 6.0)

atr = ta.atr(10)

stop_l = trade_p - (atr* atr_inp)
stop_s = trade_p + (atr* atr_inp)

//strat entry long

strategy.entry("EL", strategy.long, 2, when = trade_l == 1.0)

//strat entry short

strategy.entry("ES", strategy.short, 2, when = trade_s == -1.0)   
    
//strat long exit

if strategy.position_size == 2
    strategy.exit(id = "ph", from_entry = "EL", qty = 2, limit = ph)
    if strategy.position_size == 2
        strategy.close_all(when = low[1] > stop_l[1] and low <= stop_l)

// strat short exit

if strategy.position_size == -2
    strategy.exit(id = "pl", from_entry = "ES", qty = 2, limit =pl)
    if strategy.position_size == -2
        strategy.close_all(when = high[1] < stop_s[1] and high >= stop_s)




// code below to trail remaining 50% of position //

 //if strategy.position_size == 1 
        //strategy.exit(id ="trail", from_entry = "EL", qty = 1, stop = el)
        


Mehr