Stratégie de trading inversée basée sur l'indicateur RSI


Date de création: 2024-01-30 17:06:45 Dernière modification: 2024-01-30 17:06:45
Copier: 0 Nombre de clics: 642
1
Suivre
1617
Abonnés

Stratégie de trading inversée basée sur l’indicateur RSI

Aperçu

Cette stratégie utilise l’indicateur RSI pour identifier les conditions de marché où les actions sont sur-achetées et sur-vendues, formant des fourches mortes dans les zones de survente et formant des fourches dorées dans les zones de survente. Elle appartient à la stratégie de trading inversée basée sur les indicateurs. Cette stratégie, combinée à un arrêt de suivi de la tendance et à un arrêt fixe, permet de contrôler efficacement le risque de négociation.

Principe de stratégie

Le RSI utilise généralement 30 comme ligne de survente et 70 comme ligne de survente. Lorsqu’il traverse la ligne de survente au-dessus du RSI, il génère un signal d’achat. Lorsqu’il traverse la ligne de survente au-dessous du RSI, il génère un signal de vente.

Après l’entrée, la stratégie utilise un pourcentage de suivi de la perte, en continuant à mettre à jour le prix le plus élevé ou le prix le plus bas, et en laissant un certain pourcentage comme point de perte. En même temps, il utilise une distance fixe de stop-stop, qui s’arrête lorsque le profit cible ou la perte maximale est atteinte. Cette combinaison peut bien contrôler le risque de transaction.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’utilisation de l’indicateur RSI pour détecter les zones de survente est une technique de trading plus mature qui permet de capturer plus précisément les points de retournement du marché.

  2. La méthode de la fourchette dorée permet de filtrer une partie du signal de transaction bruyant et de rendre les transactions plus fiables.

  3. La combinaison d’un stop-loss suivi par la tendance permet de maximiser les gains, tout en réduisant les pertes individuelles en effectuant un stop-loss rapide.

  4. La fixation d’une distance de stop-loss permet également de contrôler efficacement le risque d’une seule transaction.

  5. Dans l’ensemble, les règles de la stratégie sont claires, faciles à comprendre et à mettre en œuvre, et conviennent aux débutants en trading quantitatif.

Analyse des risques

La stratégie présente également les risques suivants:

  1. L’indicateur RSI est sujet à des signaux erronés, avec une forte probabilité de rupture de la forme technique, ce qui peut entraîner le déclenchement d’un stop loss.

  2. La distance de stop-loss fixe ne peut pas être ajustée en fonction de la volatilité du marché, ce qui peut entraîner un stop-loss prématuré ou un stop-loss élargi.

  3. Le pourcentage de suivi des stop-loss ne suit que les hauts et les bas des prix, ce qui peut être trop radical et entraîner un manque de profit.

  4. Risque d’adaptation des données de retracement. Les paramètres de la stratégie peuvent être optimisés pour les données historiques et peuvent être moins performants dans les applications réelles.

  5. La fréquence des transactions peut être trop élevée, ce qui augmente les frais de transaction et le risque de glissement.

Direction d’optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Optimiser les paramètres du RSI pour trouver la meilleure combinaison de paramètres de l’indicateur et améliorer la qualité du signal.

  2. Ajout de filtres sur d’autres indicateurs, résonance multi-indicateurs, amélioration de la précision du signal.

  3. Le système de stop-loss est adapté pour s’adapter aux fluctuations du marché.

  4. Augmentation du module de contrôle de la fréquence des transactions, réduction du nombre de transactions et réduction des frais de transaction.

  5. L’ajout d’un module de gestion des fonds, le contrôle de la taille des transactions individuelles et la réduction des pertes individuelles.

  6. Les tests sont effectués sur des périodes plus longues pour vérifier la stabilité des paramètres.

Résumer

Cette stratégie est une stratégie de trading inverse typique, qui utilise le RSI pour déterminer les zones de survente et de survente, génère des signaux de négociation et utilise des arrêts de suivi de tendance et des arrêts de rupture fixes pour contrôler les risques. La logique de la stratégie est claire, facile à mettre en œuvre et adaptée à l’apprentissage et à la pratique des débutants en trading quantifié.

Code source de la stratégie
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Author: © JoshuaMcGowan
// Taken from https://www.tradingview.com/script/GbZGYi6l-Adding-some-essential-components-to-a-prebuilt-RSI-strategy/
// Just updated to compile in version 4. 

//@version=4

strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)

/////////////// Component Code Start ///////////////

testStartYear = input(2011, "Backtest Start Year") 
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2100, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
    
/////////////// Component Code Stop ///////////////

// Replace RSI Component, Long/Short, and Long Signal/Short Signal conditions with your trade setup components.
///////////// RSI component /////////////

length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close

vrsi = rsi(price, length)
notna = not na(vrsi)

/////////////// STRATEGY ///////////////

ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100

// Update this with your setup. 
long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)

last_long = 0
last_short = 0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

// Update this to reflect your setup. 
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

float last_open_long_signal = 0
float last_open_short_signal = 0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0
last_short_signal = 0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

float last_high = 0
float last_low = 0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal

long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)

long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)

leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call

if testPeriod()
    strategy.entry("Long", strategy.long, when=long_signal)
    strategy.entry("Short", strategy.short, when=short_signal)

    // plot(long_call, color=color.red)
    // plot(short_call, color=color.green)
    strategy.close("Long", when=long_call_signal)
    strategy.close("Short", when=short_call_signal)
    strategy.close("Long", when=long_tp)
    strategy.close("Short", when=short_tp)
    strategy.close("Long", when=long_sl)
    strategy.close("Short", when=short_sl)
    strategy.close("Long", when=long_ts)
    strategy.close("Short", when=short_ts)