Stratégie de volatilité ATR à ajustement de position adaptatif dynamique à indicateurs multiples

ATR EMA RSI SMA
Date de création: 2024-11-12 11:41:30 Dernière modification: 2024-11-12 11:41:30
Copier: 0 Nombre de clics: 511
1
Suivre
1617
Abonnés

Stratégie de volatilité ATR à ajustement de position adaptatif dynamique à indicateurs multiples

Aperçu

La stratégie est une stratégie de trading quantitative basée sur plusieurs indicateurs techniques et une gestion dynamique des risques. Elle combine plusieurs dimensions, telles que le suivi des tendances EMA, la volatilité ATR, les surachats et les surventeurs RSI et la reconnaissance de la forme de la ligne K, pour équilibrer le risque de rendement en s’adaptant à la réorganisation et au stop-loss dynamique.

Principe de stratégie

La stratégie consiste principalement à réaliser des transactions dans les domaines suivants:

  1. Le croisement de l’EMA moyen à 5 et 10 cycles est utilisé pour déterminer la direction de la tendance
  2. Les indices RSI permettent d’évaluer les zones de survente et d’éviter les pertes
  3. Utilisation de l’indicateur ATR pour ajuster dynamiquement la position de stop et la taille de la position
  4. Combination de formes de ligne K (swallows, pigeons, étoiles) comme signal d’entrée auxiliaire
  5. Le système de compensation des points de glissement dynamique basé sur l’ATR
  6. Filtrer les signaux faux par confirmation de volume

Avantages stratégiques

  1. La vérification croisée de signaux multiples améliore la fiabilité des transactions
  2. Gestion dynamique des risques, adaptée aux fluctuations du marché
  3. Une stratégie de blocage des lots et un verrouillage raisonnable de la partie des bénéfices
  4. Le stop-loss mobile protège les profits
  5. Définir un seuil de perte journalière et contrôler l’exposition au risque
  6. La compensation dynamique des points de glissement et le taux d’achèvement des commandes

Risque stratégique

  1. Plusieurs indicateurs peuvent entraîner un décalage du signal
  2. Les transactions fréquentes peuvent entraîner des coûts plus élevés
  3. Des arrêts fréquents dans des marchés en crise
  4. La reconnaissance de la forme K est subjective.
  5. L’optimisation des paramètres peut conduire à un surapprentissage

Orientation de l’optimisation de la stratégie

  1. Introduction de critères de cycles de fluctuation du marché et de paramètres d’ajustement dynamique
  2. Augmentation des filtres d’intensité de tendance pour réduire les fausses signaux
  3. Optimisation des algorithmes de gestion des positions et amélioration de l’efficacité de l’utilisation des fonds
  4. Ajout de plus d’indicateurs de sentiment du marché
  5. Développement d’un système d’optimisation adaptative des paramètres

Résumer

Il s’agit d’un système de stratégie mature qui intègre plusieurs indicateurs techniques pour améliorer la stabilité des transactions grâce à la gestion dynamique des risques et à la vérification de signaux multiples. Le principal avantage de la stratégie réside dans sa capacité d’adaptation et son système de contrôle des risques parfait, mais elle nécessite toujours une vérification complète et une optimisation continue sur le terrain.

Code source de la stratégie
/*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)