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

Système de gestion des capitaux basé sur la dynamique de l'indice RSI et la force de la tendance de l'ADX

Auteur:ChaoZhang est là., Date: 2024-12-20 14h24 et 34 min
Les étiquettes:Indice de résistanceADXATRLe taux d'intérêtTP

img

Résumé

Cette stratégie est un système hybride combinant le suivi des tendances et le swing trading, permettant de réaliser un trading stable grâce à plusieurs indicateurs techniques et une gestion stricte des capitaux. La stratégie adopte une approche par étapes de prise de profit pour verrouiller les bénéfices tout en définissant un contrôle maximal du tirage pour gérer les risques tout en assurant les rendements.

Principe de stratégie

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

  1. Les conditions d'entrée nécessitent une satisfaction simultanée: volume de négociation supérieur à 1M, ADX supérieur à 25 indiquant une tendance claire, RSI supérieur à 60 montrant une forte dynamique, ATR supérieur à 2 garantissant une fourchette de volatilité suffisante, prix supérieur à la moyenne mobile de 200 jours maintenant une tendance haussière.
  2. La conception progressive de la prise de profit: première prise de profit à 15%, clôture de la position à 50%; deuxième prise de profit à 30%, clôture de la position restante.
  3. Contrôle du stop-loss: une position à stop-loss de 15% protège le capital, tout en sortant lorsque le RSI tombe en dessous de 50 ou que le prix dépasse 200 MA.
  4. Gestion du tirage: suivi en temps réel du capital stratégique, actionnement du contrôle du risque systémique et compensation de toutes les positions lorsque le tirage dépasse 30%.

Les avantages de la stratégie

  1. La validation croisée de plusieurs indicateurs techniques améliore la fiabilité des signaux de négociation
  2. La conception progressive de la prise de profit équilibre les bénéfices à court terme et capture les principales tendances
  3. Système complet de contrôle des risques, y compris le contrôle individuel des stocks et le contrôle des risques systémiques
  4. Des conditions de négociation strictes filtrent efficacement les faux signaux
  5. Logique stratégique claire, paramètres faciles à ajuster en fonction des conditions du marché

Risques stratégiques

  1. Le filtrage de plusieurs indicateurs peut manquer certaines opportunités de négociation
  2. Des stop-loss fréquents peuvent être déclenchés sur les marchés oscillants
  3. Les paramètres de stop-loss et de take profit à pourcentage fixe peuvent ne pas convenir à tous les environnements de marché
  4. La stratégie s'appuie sur des indicateurs techniques, peut être insuffisante pour répondre à des événements soudains fondamentaux
  5. Requiert une plus grande échelle de capital pour répondre aux exigences de volume de négociation

Directions d'optimisation de la stratégie

  1. Mettre en place des mécanismes d'arrêt des pertes et de prise de bénéfices adaptatifs, s'adaptant dynamiquement à la volatilité du marché
  2. Ajouter un module d'évaluation de l'environnement du marché, en utilisant différents paramètres dans différentes conditions de marché
  3. Optimiser la méthode de calcul de l'ADX, envisager l'utilisation de périodes adaptatives
  4. Inclure la considération des coûts de transaction, optimiser le système de gestion des positions
  5. Développer un mécanisme de filtrage des signaux basé sur l'apprentissage automatique

Résumé

Cette stratégie est un système de trading complet qui permet de réaliser un trading stable grâce à de multiples indicateurs techniques et une gestion stricte du capital. Les principaux avantages de la stratégie résident dans son système complet de contrôle des risques et son mécanisme de prise de profit progressif, mais il faut prêter attention aux ajustements opportuns des paramètres basés sur les conditions du marché dans l'application pratique.


/*backtest
start: 2023-12-20 00:00:00
end: 2024-12-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true)

//-----------------------------------------------------
// Example Indicators and Logic
//-----------------------------------------------------
emaLen   = input.int(200, "EMA Length", minval=1)
emaValue = ta.ema(close, emaLen)

plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200")


//-----------------------------------------------------
// User Inputs
//-----------------------------------------------------
adxLen           = input.int(14,  "ADX Length",      minval=1)
rsiLen           = input.int(14,  "RSI Length",      minval=1)
atrLen           = input.int(14,  "ATR Length",      minval=1)

rsiBuyThresh     = input.float(60, "RSI Buy Threshold",     minval=1, maxval=100)
adxThresh        = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100)
minVolume        = input.float(1e6,"Minimum Volume",         minval=1)
minATR           = input.float(2,  "Minimum ATR(14)",        minval=0.1, step=0.1)

stopLossPerc     = input.float(15, "Stop-Loss %",            minval=0.1, step=0.1)
// We’ll do two partial take-profit levels to aim for consistent cashflow:
takeProfit1Perc  = input.float(15, "Take-Profit1 %",         minval=0.1, step=0.1)
takeProfit2Perc  = input.float(30, "Take-Profit2 %",         minval=0.1, step=0.1)

ddLimit          = input.float(30, "Max Drawdown %",         minval=0.1, step=0.1)

//-----------------------------------------------------
// Indicators
//-----------------------------------------------------

rsiValue = ta.rsi(close, rsiLen)
atrValue = ta.atr(atrLen)

//--- Fully Manual ADX Calculation ---
upMove      = high - high[1]
downMove    = low[1] - low
plusDM      = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM     = (downMove > upMove and downMove > 0) ? downMove : 0.0
smPlusDM    = ta.rma(plusDM, adxLen)
smMinusDM   = ta.rma(minusDM, adxLen)
smTR        = ta.rma(ta.tr, adxLen)
plusDI      = (smPlusDM / smTR) * 100
minusDI     = (smMinusDM / smTR) * 100
dx          = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adxValue    = ta.rma(dx, adxLen)

//-----------------------------------------------------
// Screener-Like Conditions (Technical Only)
//-----------------------------------------------------
volumeCondition   = volume > minVolume
adxCondition      = adxValue > adxThresh
rsiCondition      = rsiValue > rsiBuyThresh
atrCondition      = atrValue > minATR
aboveEmaCondition = close > emaValue

longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition

//-----------------------------------------------------
// Strategy Entry / Exit Logic
//-----------------------------------------------------
var bool inTrade = false

// Entry
if longCondition and not inTrade
    strategy.entry("Long", strategy.long)

// Basic Exit Condition: RSI < 50 or Price < EMA
exitCondition = (rsiValue < 50) or (close < emaValue)
if inTrade and exitCondition
    strategy.close("Long")

// Update inTrade status
inTrade := strategy.position_size > 0

//-----------------------------------------------------
// Multi-Level Stop-Loss & Partial Profits
//-----------------------------------------------------
if inTrade
    float entryPrice = strategy.position_avg_price

    // Stop-Loss
    float stopPrice     = entryPrice * (1 - stopLossPerc / 100)

    // Two partial take-profit levels
    float tp1Price      = entryPrice * (1 + takeProfit1Perc / 100)
    float tp2Price      = entryPrice * (1 + takeProfit2Perc / 100)

    // Example approach: exit half at TP1, half at TP2
    strategy.exit("TP1/SL",     from_entry="Long", stop=stopPrice,    limit=tp1Price, qty_percent=50)
    strategy.exit("TP2",        from_entry="Long", limit=tp2Price,    qty_percent=50)

//-----------------------------------------------------
// Dynamic Drawdown Handling
//-----------------------------------------------------
var float peakEquity = strategy.equity
peakEquity := math.max(peakEquity, strategy.equity)

currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100
if currentDrawdownPerc > ddLimit
    strategy.close_all("Max Drawdown Exceeded")

//-----------------------------------------------------
// Plotting
//-----------------------------------------------------
plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2)
plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50))
plot(adxValue, title="Manual ADX", color=color.orange)


Relationnée

Plus de