Мультииндикаторная кросс-динамическая стратегия отслеживания тренда стоп-профита и стоп-лосса

EMA RSI ADX MACD ATR
Дата создания: 2025-02-20 09:37:03 Последнее изменение: 2025-02-27 17:52:08
Копировать: 1 Количество просмотров: 382
2
Подписаться
319
Подписчики

Мультииндикаторная кросс-динамическая стратегия отслеживания тренда стоп-профита и стоп-лосса Мультииндикаторная кросс-динамическая стратегия отслеживания тренда стоп-профита и стоп-лосса

Обзор

Эта стратегия является многонаправленной стратегией на рынке наличных денег, основанной на нескольких технических показателях. Она использует в основном перекрестные сигналы быстрого и медленного движущегося среднего ((EMA), в сочетании с относительно слабым индексом ((RSI), средним трендовым показателем ((ADX) и средним движущимся показателем (MACD) для подтверждения торговых сигналов.

Стратегический принцип

Основная логика стратегии основана на следующих ключевых компонентах:

  1. Использует 8-циклический и 21-циклический перекрестный EMA в качестве основного входного сигнала
  2. Сила тренда подтверждена через ADX> 25
  3. Использование MACD-золотого форка для определения направления тренда
  4. RSI < 70 используется для предотвращения попадания в зону чрезмерной покупки
  5. Используйте ATR в 1,5 раза в качестве стоп-лосса и в 2 раза в качестве стоп-стопа.
  6. Внедрение механизма отслеживания стоп-лосса для обеспечения прибыли

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

  1. Система многократного подтверждения значительно повышает надежность транзакций
  2. Динамическая стоп-стоп-остановка, адаптирующаяся к рыночным колебаниям
  3. Эффективное отслеживание убытков, защита полученной прибыли
  4. Использование транзакций только после подтверждения K-линии, чтобы уменьшить количество ложных сигналов
  5. Процентное владение капиталом поможет лучше контролировать риски
  6. С учётом стоимости сделки, более соответствующая реальному состоянию сделки

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

  1. Многочисленные показатели могут привести к упущенным торговым возможностям
  2. Быстрые колебания рынка могут привести к частым ложным сигналам.
  3. Большие прыжки могут привести к потере эффекта.
  4. Транзакционные издержки могут повлиять на общую доходность стратегии.
  5. “Многосторонние” стратегии могут не сработать в медвежьем рынке

Направление оптимизации стратегии

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

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

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

Исходный код стратегии
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Optimized Long-Only Strategy (Spot Market) - Candle Signals Only", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.1)

// INPUTS
fastEMA_len         = input.int(8, "Fast EMA Length", minval=1)
slowEMA_len         = input.int(21, "Slow EMA Length", minval=1)
rsiPeriod           = input.int(14, "RSI Period")
rsiOverbought       = input.int(70, "RSI Overbought Level", minval=50)
adxPeriod           = input.int(14, "ADX Period", minval=1)
adxThreshold        = input.int(25, "ADX Trend Strength Threshold", minval=1)
fastMACD            = input.int(12, "MACD Fast Length", minval=1)
slowMACD            = input.int(26, "MACD Slow Length", minval=1)
signalMACD          = input.int(9, "MACD Signal Length", minval=1)
atrPeriod           = input.int(14, "ATR Period", minval=1)
atrStopMultiplier   = input.float(1.5, "ATR Stop Loss Multiplier", step=0.1)
atrProfitMultiplier = input.float(2.0, "ATR Profit Target Multiplier", step=0.1)

// CALCULATIONS
emaFast   = ta.ema(close, fastEMA_len)
emaSlow   = ta.ema(close, slowEMA_len)
rsiValue  = ta.rsi(close, rsiPeriod)

// --- Custom ADX Calculation ---
up      = ta.change(high)
down    = -ta.change(low)
plusDM  = (up > down and up > 0) ? up : 0
minusDM = (down > up and down > 0) ? down : 0
trueRange = ta.tr(true)  // 'handle_na' parameter set to true
atrVal    = ta.rma(trueRange, adxPeriod)
plusDI    = 100 * ta.rma(plusDM, adxPeriod) / atrVal
minusDI   = 100 * ta.rma(minusDM, adxPeriod) / atrVal
dx        = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adxValue  = ta.rma(dx, adxPeriod)

// MACD Calculation (MACD line, signal line, histogram)
[macdLine, signalLine, _] = ta.macd(close, fastMACD, slowMACD, signalMACD)

// ATR for stops and targets
atrValue  = ta.atr(atrPeriod)

// TRADING CONDITION (Long Only, on confirmed candle)
longCondition = ta.crossover(emaFast, emaSlow) and (adxValue > adxThreshold) and (macdLine > signalLine) and (rsiValue < rsiOverbought)

// POSITION MANAGEMENT: Execute only on confirmed candles
if barstate.isconfirmed and longCondition
    strategy.entry("Long", strategy.long)
    longStop   = close - atrStopMultiplier * atrValue
    longTarget = close + atrProfitMultiplier * atrValue
    strategy.exit("Long Exit", from_entry="Long", stop=longStop, limit=longTarget, trail_points=atrValue * 0.5, trail_offset=atrValue * 0.3)

// PLOTTING
plot(emaFast, color=color.green, title="Fast EMA")
plot(emaSlow, color=color.red, title="Slow EMA")
plotshape(barstate.isconfirmed and longCondition, title="Buy Signal", style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", textcolor=color.white, size=size.tiny)