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

La mise en place d'une stratégie de volatilité ATR pour la position dynamique adaptative multi-indicateur

Auteur:ChaoZhang est là., Date: 2024-11-12 11:41:30 Je vous en prie.
Les étiquettes:ATRLe taux d'intérêtIndice de résistanceSMA

img

Résumé

Cette stratégie est un système de négociation quantitatif combinant plusieurs indicateurs techniques avec une gestion dynamique des risques. Elle intègre le suivi de la tendance EMA, la volatilité ATR, les conditions de surachat/survente du RSI et la reconnaissance de modèles de bougies, permettant d'obtenir des rendements équilibrés grâce à un dimensionnement adaptatif des positions et à des mécanismes de stop-loss dynamiques.

Principes de stratégie

La stratégie met en œuvre le commerce par le biais:

  1. Utilisation des croisements des EMA à cinq et dix périodes pour déterminer la direction de la tendance
  2. Indicateur RSI pour les zones surachetées/survendues
  3. Indicateur ATR pour le stop-loss dynamique et le dimensionnement des positions
  4. Modèles de chandeliers (engloutissement, marteau, étoile filante) comme signaux d'entrée
  5. Compensation de glissement dynamique basée sur ATR
  6. Confirmation du volume pour le filtrage du signal

Les avantages de la stratégie

  1. La validation croisée de signaux multiples améliore la fiabilité
  2. La gestion dynamique des risques s'adapte à la volatilité du marché
  3. La stratégie de prise de bénéfices partielle bloque les gains
  4. Le stop-loss de suivi protège les bénéfices accumulés
  5. Limites de pertes quotidiennes pour contrôler l'exposition au risque
  6. La compensation dynamique du glissement améliore l'exécution des ordres

Risques stratégiques

  1. Plusieurs indicateurs peuvent entraîner un retard de signal
  2. Les frais de négociation fréquents peuvent être élevés
  3. Les stops-loss peuvent être déclenchés fréquemment sur les marchés de variation
  4. Facteurs subjectifs dans la reconnaissance des modèles de chandeliers
  5. L'optimisation des paramètres présente des risques de suradaptation

Directions d'optimisation

  1. Introduction de la détection du cycle de marché pour l'ajustement des paramètres dynamiques
  2. Ajouter des filtres de force de tendance pour réduire les faux signaux
  3. Optimiser les algorithmes de dimensionnement des positions pour une meilleure efficacité des capitaux
  4. Incorporer des indicateurs supplémentaires du sentiment du marché
  5. Développer un système d'optimisation adaptatif des paramètres

Résumé

Il s'agit d'un système de stratégie sophistiqué combinant plusieurs indicateurs techniques, améliorant la stabilité des transactions grâce à une gestion dynamique des risques et à la validation de signaux multiples.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Optimized Scalping with High Risk-Reward", overlay=true)

// Input for EMA periods
shortEMA_length = input(5, title="Short EMA Length")
longEMA_length = input(10, title="Long EMA Length")

// ATR for dynamic stop-loss
atrPeriod = input(14, title="ATR Period")
atrMultiplier = input(1.5, title="ATR Multiplier for Stop Loss")

// Calculate EMAs
shortEMA = ta.ema(close, shortEMA_length)
longEMA = ta.ema(close, longEMA_length)

// ATR calculation for dynamic stop loss
atr = ta.atr(atrPeriod)

// RSI for overbought/oversold conditions
rsi = ta.rsi(close, 14)

// Plot EMAs
plot(shortEMA, color=color.blue, title="Short EMA")
plot(longEMA, color=color.red, title="Long EMA")

// Dynamic Slippage based on ATR
dynamic_slippage = math.max(5, atr * 0.5)

// Candlestick pattern recognition
bullish_engulfing = close[1] < open[1] and close > open and close > open[1] and close > close[1]
hammer = close > open and (high - close) / (high - low) > 0.6 and (open - low) / (high - low) < 0.2
bearish_engulfing = open[1] > close[1] and open > close and open > open[1] and close < close[1]
shooting_star = close < open and (high - open) / (high - low) > 0.6 and (close - low) / (high - low) < 0.2

// Enhanced conditions with volume and RSI check
buy_condition = (bullish_engulfing or hammer) and close > shortEMA and shortEMA > longEMA and volume > ta.sma(volume, 20) and rsi < 70
sell_condition = (bearish_engulfing or shooting_star) and close < shortEMA and shortEMA < longEMA and volume > ta.sma(volume, 20) and rsi > 30

// Dynamic ATR multiplier based on recent volatility
volatility = atr
adaptiveMultiplier = atrMultiplier + (volatility - ta.sma(volatility, 50)) / ta.sma(volatility, 50) * 0.5

// Execute buy trades with slippage consideration
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    stop_loss_buy = strategy.position_avg_price - atr * adaptiveMultiplier - dynamic_slippage
    take_profit_buy = strategy.position_avg_price + atr * adaptiveMultiplier * 3 + dynamic_slippage
    strategy.exit("Exit Buy", "Buy", stop=stop_loss_buy, limit=take_profit_buy)

// Execute sell trades with slippage consideration
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    stop_loss_sell = strategy.position_avg_price + atr * adaptiveMultiplier + dynamic_slippage
    take_profit_sell = strategy.position_avg_price - atr * adaptiveMultiplier * 3 - dynamic_slippage
    strategy.exit("Exit Sell", "Sell", stop=stop_loss_sell, limit=take_profit_sell)

// Risk Management
maxLossPerTrade = input.float(0.01, title="Max Loss Per Trade (%)", minval=0.01, maxval=1, step=0.01)  // 1% max loss per trade
dailyLossLimit = input.float(0.03, title="Daily Loss Limit (%)", minval=0.01, maxval=1, step=0.01) // 3% daily loss limit

maxLossAmount_buy = strategy.position_avg_price * maxLossPerTrade
maxLossAmount_sell = strategy.position_avg_price * maxLossPerTrade

if (strategy.position_size > 0)
    strategy.exit("Max Loss Buy", "Buy", stop=strategy.position_avg_price - maxLossAmount_buy - dynamic_slippage)

if (strategy.position_size < 0)
    strategy.exit("Max Loss Sell", "Sell", stop=strategy.position_avg_price + maxLossAmount_sell + dynamic_slippage)

// Daily loss limit logic
var float dailyLoss = 0.0
if (dayofweek != dayofweek[1])
    dailyLoss := 0.0  // Reset daily loss tracker at the start of a new day

if (strategy.closedtrades > 0)
    dailyLoss := dailyLoss + strategy.closedtrades.profit(strategy.closedtrades - 1)

if (dailyLoss < -strategy.initial_capital * dailyLossLimit)
    strategy.close_all("Daily Loss Limit Hit")

// Breakeven stop after a certain profit with a delay
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Buy", from_entry="Buy", stop=strategy.position_avg_price)

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Sell", from_entry="Sell", stop=strategy.position_avg_price)

// Partial Profit Taking
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5)
    strategy.close("Partial Close Buy", qty_percent=50)  // Use strategy.close for partial closure at market price

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5)
    strategy.close("Partial Close Sell", qty_percent=50) // Use strategy.close for partial closure at market price

// Trailing Stop with ATR type
if (strategy.position_size > 0)
    strategy.exit("Trailing Stop Buy", from_entry="Buy", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)

if (strategy.position_size < 0)
    strategy.exit("Trailing Stop Sell", from_entry="Sell", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)


Relationnée

Plus de