Stratégie de reprise de l' élan

Auteur:ChaoZhang est là., Date: 2023-12-12 16h34 et 52 min
Les étiquettes:

img

Résumé

La stratégie de remise en arrière de l'impulsion identifie les lectures extrêmes du RSI comme des signaux d'impulsion pour une stratégie longue / courte.

Il entre en long/short lors du premier repli sur l'EMA à 5 périodes (faible)/5 périodes (haute) et sort à la haute/basse de 12 bar. La caractéristique haute/faible signifie que l'objectif de profit commencera à diminuer à chaque nouvelle barre si le prix entre dans une consolidation prolongée.

Le stop loss suggéré est X ATR (réglable en entrées) du prix d'entrée.

La stratégie est assez robuste sur les délais et les marchés, avec un taux de gain de 60% à 70% et des transactions gagnantes plus importantes.

La logique de la stratégie

  1. Calculer l'indice de risque sur 6 périodes et identifier les valeurs supérieures à 90 (surachat) et inférieures à 10 (survente).

  2. Lorsque le RSI est suracheté, passez long sur un repli vers l'EMA à 5 périodes (faible) dans les 6 barres.

  3. Lorsque le RSI est survendu, achetez un short sur un repli vers l'EMA à 5 périodes (haut) dans les 6 barres.

  4. La stratégie de sortie est une prise de profit en mouvement, l'objectif initial étant le plus haut maximum/le plus bas minimum des 12 derniers barres, qui est mis à jour à chaque nouvelle barre pour une sortie en roulement.

  5. Le stop loss est X ATRs du prix d'entrée (personnalisable).

Analyse des avantages

La stratégie combine les extrêmes du RSI comme signaux de dynamique et les entrées de recul pour capturer les points d'inversion potentiels des tendances, avec un taux de gain élevé.

Le mécanisme de prise de bénéfices en mouvement bloque des bénéfices partiels en fonction de l'action réelle des prix, réduisant les retraits.

L'arrêt ATR aide à contrôler efficacement les pertes d'une seule transaction.

Une bonne robustesse à appliquer sur différents marchés et ensembles de paramètres pour faciliter la réplication des transactions réelles.

Analyse des risques

Un stop loss trop large si le multiplicateur ATR est trop élevé, ce qui augmente la perte par transaction.

Le déplacement du mécanisme de prise de bénéfices peut réduire la marge bénéficiaire en cas de consolidation prolongée.

Les transactions manquantes si le recul dépasse 6 bar.

éventuel glissement ou fausse rupture si des événements majeurs se produisent.

Directions d'optimisation

Test raccourcissant le nombre de barres d'entrée de 6 à 4 pour améliorer le taux d'entrée.

Testez l'augmentation du multiplicateur ATR pour augmenter la perte de contrôle par transaction.

Incorporer des indicateurs de volume pour éviter les pertes dues à la divergence dans la consolidation.

Entrer sur une pause de 60 min pour filtrer le bruit.

Conclusion

La Momentum Pullback Strategy est une approche globale très pratique de la réversion moyenne à court terme, incorporant des éléments de tendance, d'inversion et de gestion des risques pour faciliter le trading réel tout en conservant un potentiel de génération d'alpha.


/*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)
        


Plus de