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.
Les principaux principes de cette stratégie sont les suivants:
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;
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;
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;
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.
Comparée à l'utilisation du seul RSI ou de Fibonacci, cette stratégie combinée présente les avantages suivants:
Le double filtre d'indicateur peut réduire les faux signaux et améliorer la qualité du signal;
La négociation aux niveaux de retracement de Fibonacci est une technique classique d'analyse technique;
Avec un rythme d'arrêt des pertes et de prise de profit, la perte maximale par transaction peut être contrôlée efficacement;
Les paramètres peuvent être optimisés pour différentes périodes et produits.
Il y a aussi quelques risques à prendre en compte pour cette stratégie:
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;
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;
Un réglage de stop loss lâche peut augmenter les pertes;
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.
Parmi les domaines à optimiser, on peut citer:
Ajouter un indicateur de volume pour éviter les fausses ruptures avec un faible volume;
Considérez les bandes de Bollinger pour les signaux provenant de ruptures de bandes;
Construire des modèles d'apprentissage automatique pour détecter automatiquement des opportunités de trading de haute qualité;
Utiliser des algorithmes génétiques pour régler les paramètres automatiques et ajuster les niveaux stop loss/profit.
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))