Stratégie de percée d'oscillation

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

img

Résumé

Cette stratégie est basée sur l'idée classique de Larry Connors, utilisant un système de moyenne mobile double pour capturer l'oscillation à moyen terme du marché et tirer profit lorsqu'il est suracheté ou survendu.

La logique de la stratégie

  1. Utilisez l'indice de volatilité de 2 périodes pour déterminer si le prix est dans la région de survente.

  2. Utilisez la moyenne mobile à long terme (200 périodes) pour déterminer la direction de la tendance principale.

  3. Lorsque le prix est au-dessus de l'AM long et que le RSI est au-dessous de la ligne de survente, ouvrir une position longue au prix du marché.

  4. Lorsque le prix dépasse la courte période de MA (5 périodes) à la hausse, fermer la position longue au prix du marché pour réaliser un profit.

En outre, la stratégie prévoit les options de configuration suivantes:

  • Paramètres du RSI: durée de la période, niveaux de surachat/survente.

  • Paramètres de l'AM: longue et courte période.

  • Filtre RSI MA: ajouter RSI MA pour éviter les fluctuations du RSI.

  • Stop loss: configurable pour ajouter ou non un stop loss.

Analyse des avantages

  1. Le système de double MA permet de suivre efficacement les tendances à moyen et long terme.

  2. Le RSI évite de manquer le meilleur moment d'entrée lors de fluctuations violentes.

  3. Configuration flexible adaptée à l'optimisation des paramètres.

  4. Une stratégie de percée, pas de risque de manquer les signaux.

Analyse des risques

  1. La stratégie de double MA est sensible aux paramètres, nécessitant une optimisation pour obtenir les meilleures performances.

  2. Le fait de ne pas avoir de stop loss entraîne un risque d'augmentation des pertes.

  3. Une fausse rupture risque des pertes sur un marché oscillant.

  4. Le risque de suradaptation au test de retour nécessite une validation sur tous les marchés et toutes les périodes.

Directions d'optimisation

  1. Tester et optimiser les combinaisons de paramètres RSI et MA pour trouver le meilleur.

  2. Testez des filtres d'entrée supplémentaires comme le pic de volume pour réduire les faux signaux.

  3. Ajoutez un stop-loss de suivi pour contrôler les pertes d'une seule transaction.

  4. Évaluer l'impact des différentes périodes de détention pour trouver l'optimum.

  5. Testez la robustesse sur de plus longues périodes comme tous les jours.

Résumé

Cette stratégie combine le suivi de la tendance double MA et le RSI suracheté/survendu pour former un système de rupture typique. Avec l'optimisation des paramètres, une gestion stricte des risques et une validation de la robustesse, elle peut devenir un outil de trading quantitatif puissant. Mais les traders doivent se méfier du backtest sur ajustement et continuer à améliorer la stratégie pour s'adapter aux conditions changeantes du marché.


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

//@version=3
strategy("RSI Strategy", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Starter Parameters

length = input(title="RSI Lenght", defval=2)
overBoughtRSI = input(title="OverBought Level for RSI",  defval=10)
shortLength = input(title="Short MA Length",  defval=5)
longLength = input(title="Long MA Length",  defval=200)

RuleMRSI=input(title="RSI Moving Average Filter", defval= true)
lengthmrsi=input(title="RSI Moving Average Length",  defval=4)
overBoughtMRSI=input(title="OverBought Level for the Moving Average of the RSI",  defval=30)

Rulestop=input(title="Apply Stop Loss", defval=false)
stop_percentual=input(title="% Stop Loss",  defval=10)

//RSI

vrsi = rsi(close, length)

//Moving Averages

longma = sma(close,longLength)
shortma = sma(close,shortLength)
mrsi=sma(vrsi,lengthmrsi)

//Stop Loss

stop_level = strategy.position_avg_price*((100-stop_percentual)/100)

//Backtest Period
testStartYear = input(2009, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
    
//Strategy

if testPeriod() and (not na(vrsi))
    if  (RuleMRSI==false) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==false) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

Plus de