Les ressources ont été chargées... Je charge...

La stratégie quantitative de rebond sur les ventes excédentaires de l'ATR

Auteur:ChaoZhang est là., Date: 2024-11-29 16:18:55 Je suis désolé
Les étiquettes:Indice de résistanceSMAATRTPSL

img

Résumé

Cette stratégie est un système de trading quantitatif basé sur les signaux de survente du RSI et le stop-loss dynamique de l'ATR. Utilisant des données quotidiennes, il combine les signaux de survente du RSI avec un filtre de tendance moyenne mobile de 200 jours pour capturer les opportunités de rebond dans des conditions de marché de survente.

Principes de stratégie

La logique de base comprend les éléments clés suivants:

  1. Signal d'entrée: le système génère des signaux longs lorsque le RSI (5) tombe en dessous du niveau de survente de 30 et que le prix est supérieur à la moyenne mobile sur 200 jours.
  2. Le mécanisme d'arrêt-perte: combine un arrêt-perte dynamique de 1,5x ATR ((20) avec un arrêt-perte fixe de 25%.
  3. Objectifs de profit: fixe trois objectifs de 5%, 10% et 15%, réduisant la position respectivement de 33%, 66% et 100%.
  4. Gestion des positions: il est recommandé d'utiliser soit une taille de position de 59,13% calculée selon le critère Kelly, soit une taille de position conservatrice de 75%.

Les avantages de la stratégie

  1. Confirmation de tendance double: Valide les transactions à travers le survente du RSI et la tendance moyenne mobile, améliorant le taux de gain.
  2. Contrôle du risque flexible: le stop-loss ATR dynamique s'adapte à la volatilité du marché tandis que le stop-loss fixe offre une protection ultime.
  3. Gestion intelligente des bénéfices: les objectifs triple avec réduction progressive des positions assurent des bénéfices tout en maintenant un potentiel à la hausse.
  4. Gestion scientifique du capital: Optimise la taille des positions en utilisant le critère Kelly, équilibrant risque et récompense.

Risques stratégiques

  1. Dépendance des tendances: la stratégie peut déclencher des arrêts fréquents sur des marchés variés. Suggestion: Ajoutez des filtres d'oscillateur pour réduire les faux signaux.

  2. L'exposition à la volatilité de l'indice de change est calculée en fonction de l'évolution de la volatilité de l'indice. Suggestion: Ajustez le pourcentage de stop-loss en fonction de votre tolérance au risque.

  3. Risque de retrait: la prise de bénéfices par étapes peut réduire les positions trop tôt en cas de forte tendance. Suggestion: envisager des objectifs de profit dynamiques ou conserver une partie pour suivre la tendance.

Directions d'optimisation de la stratégie

  1. Optimisation du signal:
  • Ajouter une confirmation de volume
  • Incorporer des indicateurs de tendance tels que le MACD
  • Mettre en œuvre des filtres de volatilité
  1. Optimisation du stop-loss:
  • Mettre en œuvre des pourcentages de stop-loss dynamiques
  • Ajouter des arrêts basés sur le temps
  • Inclure des filtres de risque-rendement
  1. Optimisation du profit:
  • Définir des objectifs dynamiques basés sur l'ATR
  • Mettre en œuvre des arrêts de trail
  • Optimiser les ratios de réduction de position

Résumé

Cette stratégie construit un système de trading complet en combinant les signaux de survente du RSI avec le filtrage de tendance moyenne mobile, complété par des objectifs de stop-loss et de triple profit dynamiques ATR. Ses atouts résident dans le contrôle flexible des risques et la gestion rationnelle des bénéfices, bien que l'optimisation basée sur les conditions du marché et les préférences personnelles en matière de risque soit nécessaire.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef

Relationnée

Plus de