Несколько индикаторов, динамически адаптивная регулировка позиции, стратегия волатильности ATR

ATR EMA RSI SMA
Дата создания: 2024-11-12 11:41:30 Последнее изменение: 2024-11-12 11:41:30
Копировать: 0 Количество просмотров: 511
1
Подписаться
1617
Подписчики

Несколько индикаторов, динамически адаптивная регулировка позиции, стратегия волатильности 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)