RSI et stratégie de négociation de retracement de Fibonacci

Auteur:ChaoZhang est là., Date: 2023-12-27 à 16h49
Les étiquettes:

img

Résumé

Cet article décrit principalement une stratégie de trading qui combine l'indice de force relative (RSI) et les niveaux de retracement de Fibonacci. La stratégie calcule d'abord les niveaux de retracement de Fibonacci clés en fonction de la dynamique historique des prix sur une certaine période, puis utilise l'indicateur RSI pour juger si le marché est suracheté ou survendu près des niveaux de retracement pour générer des signaux de trading.

Principe de stratégie

Les principaux principes de cette stratégie sont les suivants:

  1. Utiliser les données de prix sur une certaine période (par exemple 200 bar) pour calculer la médiane du prix, l'écart type et les niveaux clés de retracement de Fibonacci (par exemple 0,764) pour cette période;

  2. Lorsque le prix s'approche des niveaux supérieurs ou inférieurs de retracement, utiliser l'indicateur RSI pour déterminer s'il existe une condition de surachat ou de survente autour de ces niveaux;

  3. Si l'indicateur RSI montre des signaux de surachat ou de survente, des signaux longs ou courts seront générés autour des niveaux de retracement;

  4. Définir un stop loss et un profit pour fermer les positions lorsque le prix dépasse les niveaux prédéfinis ou que le stop loss est déclenché.

Ce qui précède est le flux de travail de base pour identifier les opportunités commerciales dans cette stratégie.

Analyse des avantages

Comparée à l'utilisation du seul RSI ou de Fibonacci, cette stratégie combinée présente les avantages suivants:

  1. Le double filtre d'indicateur peut réduire les faux signaux et améliorer la qualité du signal;

  2. La négociation aux niveaux de retracement de Fibonacci est une technique classique d'analyse technique;

  3. Avec un rythme d'arrêt des pertes et de prise de profit, la perte maximale par transaction peut être contrôlée efficacement;

  4. Les paramètres peuvent être optimisés pour différentes périodes et produits.

Analyse des risques

Il y a aussi quelques risques à prendre en compte pour cette stratégie:

  1. La probabilité d'un renversement des niveaux clés n'est pas de 100%, il est nécessaire de combiner avec l'action des prix;

  2. L'indice de résistance à la corrosion à une seule période peut générer de faux signaux à partir de rebonds de chat mort, envisagez une validation à plusieurs délais;

  3. Un réglage de stop loss lâche peut augmenter les pertes;

  4. Des arrêts peuvent être effectués lors de fluctuations volatiles des prix. Des arrêts plus larges devraient être envisagés.

Ces risques peuvent être gérés par le réglage des paramètres, l'optimisation des combinaisons d'indicateurs, etc.

Directions d'optimisation

Parmi les domaines à optimiser, on peut citer:

  1. Ajouter un indicateur de volume pour éviter les fausses ruptures avec un faible volume;

  2. Considérez les bandes de Bollinger pour les signaux provenant de ruptures de bandes;

  3. Construire des modèles d'apprentissage automatique pour détecter automatiquement des opportunités de trading de haute qualité;

  4. Utiliser des algorithmes génétiques pour régler les paramètres automatiques et ajuster les niveaux stop loss/profit.

Résumé

Cet article décrit en détail une stratégie de trading quantitative qui combine l'analyse du RSI et de la rétraction de Fibonacci. En mélangeant l'analyse de deux indicateurs et les stratégies techniques classiques, la stratégie améliore la qualité du signal sous les risques gérés.


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

//@version=4
strategy(title="Gab Fib  + RSI", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=1000, currency=currency.USD, commission_type=strategy.commission.cash_per_order, commission_value=4)

// Inputs
timeFilter = year >= 2000
    // Stop Loss 
stop_loss = input(title="SL in % of Instrum. i.e 1.5%=150pips", minval=0, step=0.1, defval=1.5) /100
    // RSI Inputs
len = input(title="[RSI] Length", minval=0, step=1, defval=14)
overSold = input(title="[RSI] Over Sold %", defval=30)
overBought = input(title="[RSI] Over Bought %", defval=70)
    // Fibonacci Levels
length = input(title="[Fibonacci] Length", defval=200, minval=1)
src = input(hlc3, title="[Fibonacci] Source")
mult = input(title="[Fibonacci] Multiplier", defval=3.0, minval=0.001, maxval=50)
level = input(title="[Fibonacci] Level", defval=764)


// Calculate Fibonacci
basis = vwma(src, length)
dev = mult * stdev(src, length)
fu764= basis + (0.001*level*dev)
fu1= basis + (1*dev)
fd764= basis - (0.001*level*dev)
fd1= basis - (1*dev)

// Calculate RSI
vrsi = rsi(close, len)

// Calculate the Targets
targetUp = fd764
targetDown = fu764
    // Actual Targets
bought = strategy.position_size[0] > strategy.position_size[1]
exit_long = valuewhen(bought, targetUp, 0)
sold = strategy.position_size[0] < strategy.position_size[1]
exit_short = valuewhen(sold, targetDown, 0)

// Calculate Stop Losses
sl_long = close * (1-stop_loss)
sl_short = close * (1+stop_loss)


// Conditions to Open Trades
openLong = low < fd1 and crossover(vrsi[1], overSold)
openShort = high > fu1 and crossunder(vrsi[1], overBought)

// Conditions to Close Trades
closeLong = high > exit_long or sl_long
closeShort = low < exit_short or sl_short


//Rounding to MinTick value
roundtargetUp = round_to_mintick(targetUp)
roundtargetDown = round_to_mintick(targetDown)
roundsllong = round_to_mintick(sl_long)
roundslshort = round_to_mintick(sl_short)

// Plots
plot(basis, color=color.blue, linewidth=2, title="[Fibonacci Level] Basis")
plot(fu764, color=color.white, linewidth=1, title="[Fibonacci Level] Short Target")
plot(fu1, color=color.red, linewidth=2, title="[Fibonacci Level] Top")
plot(fd764, color=color.white, linewidth=1, title="[Fibonacci Level] Long Target")
plot(fd1, color=color.green, linewidth=2, title="[Fibonacci Level] Bottom")


// Strategy Orders
if timeFilter
    // Entry Orders
    strategy.entry(id="buy", long=true, when=openLong and high < targetUp, limit=close, alert_message="buy,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetUp)+",sl="+tostring(roundsllong))
    strategy.entry(id="sell", long=false, when=openShort and low > targetDown, limit=close,  alert_message="sell,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetDown)+",sl="+tostring(roundslshort))

    // Exit Orders
    strategy.exit(id="closelong", when=closeLong and strategy.position_size > 0, limit=exit_long, stop=sl_long, alert_message="closelong,"+tostring(syminfo.ticker))
    strategy.exit(id="closeshort", when=closeShort and strategy.position_size < 0, limit=exit_short, stop=sl_short, alert_message="closeshort,"+tostring(syminfo.ticker))

Plus de