В процессе загрузки ресурсов... загрузка...

Многоиндикаторные динамические адаптивные диспозиции стратегии ATR

Автор:Чао Чжан, Дата: 2024-11-12 11:41:30
Тэги:ATRЕМАРСИSMA

多重指标动态自适应调仓ATR波动率策略

Обзор

Стратегия является количественной торговой стратегией, основанной на нескольких технических показателях и управлении динамическими рисками. Она сочетает в себе несколько измерений, таких как отслеживание тенденций EMA, волатильность ATR, RSI, перепродажи, перепродажи и K-линейная идентификация, чтобы сбалансировать риск прибыли путем адаптивных диспозиций и динамических остановок убытков.

Принципы стратегии

Стратегия заключается в том, чтобы реализовать сделки в следующих аспектах: 1. Используйте 5-цикличный и 10-цикличный EMA для определения направления тренда. 2. Определить сверхпродажи с помощью RSI, чтобы избежать погони за падением 3. Динамическое регулирование позиций и размеров позиций с использованием индикатора ATR 4. В сочетании с K-линией (поглощение, прицел, метеорит) в качестве вспомогательного сигнала входа 5. Использование механизма компенсации динамических сдвигов на базе ATR 6. Фильтрация ложных сигналов с помощью подтверждения объема торговли

Стратегические преимущества

  1. Кросс-проверка нескольких сигналов для повышения надежности транзакций
  2. Динамическое управление рисками, адаптируемое к колебаниям рынка
  3. Разделение стратегии сдерживания и логическое блокирование части прибыли
  4. Мобильные остановки для защиты прибыли
  5. Установка ежедневных ограничений на остановку потерь, контроль рисков
  6. Динамическая компенсация с помощью слайд-постов повышает скорость выполнения заказов

Стратегические риски

  1. Многочисленные показатели могут привести к задержке сигнала
  2. Частые сделки могут привести к более высоким затратам
  3. Частые паузы в бурных рынках
  4. Субъективные факторы в распознавании формы линии K
  5. Оптимизация параметров может привести к чрезмерному приспособлению

Оптимизация стратегии

  1. Введение рыночных циклов волатильности, параметров динамического регулирования
  2. Увеличение интенсивности фильтрации тенденций, снижение ложных сигналов
  3. Оптимизация алгоритмов управления позициями для повышения эффективности использования капитала
  4. Добавить больше индикаторов настроения рынка
  5. Разработка системы адаптивной оптимизации параметров

Подведение итогов

Это хорошо зарекомендовавшаяся стратегия, которая включает в себя множество технических показателей, чтобы повысить стабильность торговли с помощью динамического управления рисками и проверки множества сигналов. Основные преимущества стратегии заключаются в ее адаптивности и совершенной системе контроля рисков, но все же требует полной проверки и постоянной оптимизации на реальных площадках.


/*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)


Содержание

Больше информации