Résultats de l'analyse de la volatilité

Auteur:ChaoZhang est là., Date: 2023-11-08 12:11:03 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indicateur d'indice de force relative (RSI) et utilise les principes de surachat / survente du RSI pour effectuer des transactions de rupture.

La logique de la stratégie

  1. Définir les paramètres de l'indicateur RSI en fonction des données fournies par l'utilisateur, y compris la période de l'indicateur RSI, le seuil de surachat et le seuil de survente.

  2. Déterminez si l'indice de volatilité est dans la zone de surachat ou de survente en fonction de sa position par rapport aux seuils.

  3. Lorsque le RSI sort de la zone de surachat/survente et franchit la ligne de seuil correspondante, effectuez des transactions dans la direction opposée. Par exemple, lorsque le RSI dépasse la ligne de surachat de la zone de surachat, le marché est considéré comme inversé, allez long à ce stade. Lorsque le RSI dépasse la ligne de survente de la zone de survente, le marché est considéré comme inversé, allez court ici.

  4. Après l'entrée, définissez un stop loss et des lignes de profit.

  5. La stratégie prévoit également l'option d'utiliser l'EMA comme filtre.

  6. Il permet également de négocier uniquement dans des délais spécifiques.

Analyse des avantages

  • Utilise les principes classiques de rupture RSI avec de bons résultats de backtest.

  • Des seuils de surachat/survente flexibles adaptés à différents produits.

  • Le filtre EMA facultatif évite les transactions à l'aide d'une pince à épiler excessive.

  • Prend en charge SL/TP pour améliorer la stabilité.

  • Prend en charge le filtrage des délais pour éviter des périodes inappropriées.

  • Prend en charge à la fois le long et le court pour une utilisation complète des fluctuations de prix bidirectionnelles.

Analyse des risques

  • La divergence du RSI se produit fréquemment, se fier uniquement au RSI peut générer des signaux inexacts.

  • Des seuils incorrects conduisent à des transactions trop fréquentes ou manquantes.

  • Les mauvais réglages SL/TP entraînent une agressivité ou une conservatisme excessifs.

  • Des paramètres de filtrage EMA incorrects peuvent manquer des transactions valides ou filtrer de bons signaux.

Solution au risque:

  • Optimiser les paramètres RSI pour différents produits.

  • Combiner avec les indicateurs de tendance pour identifier les divergences.

  • Tester et optimiser les paramètres SL/TP.

  • Testez et optimisez les paramètres de l'EMA.

Directions d'optimisation

La stratégie peut être améliorée dans les domaines suivants:

  1. Optimiser les paramètres RSI pour trouver les meilleurs réglages pour différents produits par un backtest exhaustif.

  2. Essayez d'utiliser différents indicateurs combinés avec ou remplaçant le RSI pour générer des signaux plus robustes, par exemple MACD, KD, Bollinger Bands, etc.

  3. Optimiser le stop loss et adopter des stratégies de profit pour améliorer la stabilité.

  4. Optimisez les paramètres du filtre EMA ou expérimentez avec d'autres filtres pour mieux éviter les coupes de fouet.

  5. Ajouter des modules de filtrage de tendance pour éviter de négocier contre la tendance principale.

  6. Testez différents délais pour trouver les meilleures sessions de trading pour cette stratégie.

Résumé

La stratégie de rupture de l'inversion du RSI a une logique claire basée sur les principes classiques de surachat / survente. Elle vise à capturer la réversion moyenne aux extrêmes avec des filtres de contrôle des risques appropriés. Il existe un bon potentiel pour la transformer en une stratégie stable via l'ajustement des paramètres et des améliorations modulaires. Il vaut la peine d'être optimisé et appliqué dans le trading en direct.


/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
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/
// © REV0LUTI0N

//@version=4

strategy("RSI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

// Strategy Backtesting
startDate  = input(timestamp("2021-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true
// Strategy

Length = input(12, minval=1)
src = input(close, title="Source")
overbought = input(70, minval=1)
oversold = input(30, minval=1)
xRSI = rsi(src, Length)
    
rsinormal = input(true, title="Overbought Go Long & Oversold Go Short")
rsiflipped = input(false, title="Overbought Go Short & Oversold Go Long")

// EMA Filter
noemafilter = input(true, title="No EMA Filter")
useemafilter = input(false, title="Use EMA Filter")
ema_length = input(defval=15, minval=1, title="EMA Length")
emasrc = input(close, title="Source")
ema = ema(emasrc, ema_length)
plot(ema, "EMA", style=plot.style_linebr, color=#cad850, linewidth=2)

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (xRSI > overbought and close > ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and close < ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and close > ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and close < ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI > overbought and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    



Plus de