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

Динамическая стратегия стоп-лосса с многоподтверждением конверта Nadaraya-Watson

Автор:Чао Чжан, Дата: 2024-05-24 17:58:47
Тэги:ADXДИРСИМЭИ

img

Обзор

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

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

  1. Для сглаживания данных о ценах и вычисления верхних и нижних диапазонов применяется конверт Надарайи и Уотсона.
  2. Использование индикаторов ADX и DI для определения силы и направления тренда.
  3. Определить потенциальные прорывы, когда цена пересекает верхнюю или нижнюю полосы.
  4. Подтвердить импульс тренда с помощью индикатора RSI. RSI выше 70 указывает на бычий импульс, в то время как RSI ниже 30 указывает на медвежий импульс.
  5. Выполнять сделки на основе совокупных сигналов тренда, прорыва и импульса:
    • Введите длинную позицию, когда есть сильный восходящий тренд, взрыв вверх и бычий импульс.
    • Ввести короткую позицию, когда есть сильный нисходящий тренд, нисходящий прорыв и медвежий импульс.
  6. Для управления рисками применяют динамические режимы стоп-лосса, цена стоп-лосса рассчитывается на основе наивысшей/низшей цены и цены закрытия.
  7. Визуально отображайте сигналы стратегии, наметив линии тренда, точки прорыва и сигналы импульса на графике.

Преимущества стратегии

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

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

  1. На неуравновешенных рынках или во время перемены тренда частые сигналы о выходе могут привести к переоценке и потерям.
  2. Динамическая стоп-лосс может не выйти из позиций быстро во время переворота тренда, что приводит к увеличению выводов.
  3. Параметры стратегии, такие как пропускная способность диапазона Надарая-Уотсона и порог ADX, должны быть оптимизированы для различных рынков и инструментов.

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

  1. Включить дополнительные эффективные индикаторы определения тренда, такие как MACD, системы скользящих средних и т.д., для повышения точности и стабильности определения тренда.
  2. Оптимизировать динамический метод расчета стоп-лосса с учетом показателей, связанных с волатильностью, таких как ATR и SAR, чтобы сделать стоп-лосс более гибкими и эффективными.
  3. Разработать различные комбинации параметров для различных рыночных характеристик, таких как тенденции или рынки с ограниченным диапазоном, чтобы повысить адаптивность стратегии.
  4. Внедрить модуль размещения позиций для динамической корректировки размеров позиций на основе таких факторов, как тенденция рынка и волатильность, тем самым контролируя риск.

Резюме

Эта стратегия сочетает в себе конверт Надарайи-Уотсона для сглаживания цен с индикаторами тренда, такими как ADX и DI, индикатором импульса RSI и точками прорыва цен для создания всеобъемлющей торговой системы. Динамическое управление стоп-лосом помогает адаптироваться к изменениям рынка и контролировать риск в определенной степени. Однако в практическом применении следует обратить внимание на оптимизацию идентификации тренда, динамического стоп-лосса и настроек параметров для улучшения надежности и прибыльности стратегии.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-18 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nadaraya-Watson Envelope with Multi-Confirmation and Dynamic Stop-Loss", overlay=true)

// Input parameters
h = input.float(7.2, "Bandwidth", minval=0)
mult = input.float(2.1, minval=0)
src = input(close, "Source")

// ADX and DI Input Parameters
adxLength = input.int(14, "ADX Length")
adxThreshold = input.float(25, "ADX Threshold")
adxSmoothing = input.int(14, "ADX Smoothing")

// Calculate ADX and DI
[dmiPlus, dmiMinus, adx] = ta.dmi(adxLength, adxSmoothing)
strongTrendUp = dmiPlus > dmiMinus and adx > adxThreshold
strongTrendDown = dmiMinus > dmiPlus and adx > adxThreshold

// Nadaraya-Watson Envelope Calculation
gauss(x, h) =>
    math.exp(-(math.pow(x, 2) / (h * h * 2)))

coefs = array.new_float(0)
den = 0.0

for i = 0 to 100
    w = gauss(i, h)
    array.push(coefs, w)

den := array.sum(coefs)

out = 0.0
for i = 0 to 100
    out += src[i] * array.get(coefs, i)
out /= den
mae = ta.sma(math.abs(src - out), 100) * mult

upper = ta.sma(out + mae, 10)
lower = ta.sma(out - mae, 10)

// Confirmations
breakoutUp = ta.crossover(src, upper)
breakoutDown = ta.crossunder(src, lower)

// Original RSI period and thresholds
rsiPeriod = input.int(14, "RSI Period")
rsi = ta.rsi(src, rsiPeriod)
momentumUp = rsi > 70 and adx > adxThreshold
momentumDown = rsi < 30 and adx > adxThreshold

// // Plot ADX-based Trend Confirmation Lines
// if (strongTrendUp)
//     line.new(bar_index, low, bar_index + 1, low, color=color.new(color.blue, 50), width=2, style=line.style_dashed)

// if (strongTrendDown)
//     line.new(bar_index, high, bar_index + 1, high, color=color.new(color.red, 50), width=2, style=line.style_dashed)

// Plot Breakout Confirmation Dots
plotshape(series=breakoutUp, style=shape.circle, location=location.abovebar, color=color.blue, size=size.tiny, title="Breakout Up")
plotshape(series=breakoutDown, style=shape.circle, location=location.belowbar, color=color.orange, size=size.tiny, title="Breakout Down")

// Plot Momentum Confirmation Arrows
plotshape(series=momentumUp, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Momentum Up")
plotshape(series=momentumDown, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Momentum Down")

// Strategy Entry and Exit
var float stopLossLevel = na
var float highestPrice = na

potentialBuy = strongTrendUp and breakoutUp
potentialSell = strongTrendDown and breakoutDown
momentumConfirmUp = potentialBuy and momentumUp
momentumConfirmDown = potentialSell and momentumDown

if (momentumConfirmUp)
    strategy.entry("Buy", strategy.long)
    stopLossLevel := close * 0.90
    highestPrice := close

if (momentumConfirmDown)
    strategy.entry("Sell", strategy.short)
    stopLossLevel := close * 1.10
    highestPrice := close

if (strategy.position_size > 0)
    highestPrice := math.max(highestPrice, close)
    stopLossLevel := math.max(highestPrice * 0.85, close * 0.90)

if (strategy.position_size < 0)
    highestPrice := math.min(highestPrice, close)
    stopLossLevel := math.min(highestPrice * 1.15, close * 1.10)

// Close position if stop loss is hit
if (strategy.position_size > 0 and close < stopLossLevel)
    strategy.close("Buy")

if (strategy.position_size < 0 and close > stopLossLevel)
    strategy.close("Sell")


Связанные

Больше