O recurso está a ser carregado... Carregamento...

O valor da taxa de câmbio é o valor da taxa de câmbio da taxa de câmbio da taxa de câmbio.

Autora:ChaoZhang, Data: 2024-05-24 17:58:47
Tags:ADXD.I.RSIMAE

img

Resumo

Esta estratégia utiliza o envelope de Nadaraya-Watson para suavizar os dados de preço e calcular as faixas superior e inferior com base no preço suavizado. Em seguida, usa os indicadores ADX e DI para determinar a força e direção da tendência e o indicador RSI para confirmar o impulso da tendência.

Princípios de estratégia

  1. Aplicar o envelope Nadaraya-Watson para suavizar os dados de preços e calcular as faixas superior e inferior.
  2. Utilize os indicadores ADX e DI para determinar a força e a direção da tendência.
  3. Identificar breakouts potenciais quando o preço ultrapassa a faixa superior ou a faixa inferior.
  4. Confirme o impulso da tendência usando o indicador RSI. Um RSI acima de 70 indica impulso de alta, enquanto um RSI abaixo de 30 indica impulso de baixa.
  5. Execução de operações com base nos sinais combinados de tendência, ruptura e impulso:
    • Entre em uma posição longa quando houver uma forte tendência de alta, uma ruptura ascendente e um impulso de alta.
    • Entrar numa posição curta quando houver uma forte tendência descendente, uma ruptura descendente e um ímpeto de baixa.
  6. Implementar um stop-loss dinâmico para gerir o risco.
  7. Visualize os sinais de estratégia traçando linhas de tendência, pontos de ruptura e sinais de impulso no gráfico.

Vantagens da estratégia

  1. O envelope Nadaraya-Watson suaviza efetivamente os dados de preços, reduzindo a interferência de ruído.
  2. O mecanismo de confirmação múltipla melhora a confiabilidade do sinal.
  3. A gestão dinâmica de stop-loss adapta-se melhor às flutuações do mercado e reduz o risco.
  4. A traçação visual de linhas de tendência, pontos de ruptura e sinais de momento no gráfico facilita a observação e interpretação dos sinais de estratégia pelo usuário.

Riscos estratégicos

  1. Em mercados instáveis ou durante inversões de tendência, sinais frequentes de ruptura podem levar a excesso de negociação e perdas.
  2. O stop-loss dinâmico pode falhar na saída imediata das posições durante inversões de tendência, resultando em um aumento dos drawdowns.
  3. Os parâmetros da estratégia, como a largura de banda do envelope Nadaraya-Watson e o limiar ADX, devem ser otimizados para diferentes mercados e instrumentos.

Orientações para a otimização da estratégia

  1. Incorporar indicadores adicionais eficazes de determinação de tendências, tais como MACD, sistemas de médias móveis, etc., para melhorar a precisão e a estabilidade da identificação de tendências.
  2. Otimizar o método dinâmico de cálculo do stop-loss, considerando indicadores relacionados com a volatilidade, como ATR e SAR, para tornar os stop-loss mais flexíveis e eficazes.
  3. Desenvolver diferentes combinações de parâmetros para várias características do mercado, tais como tendências ou mercados de gama, para melhorar a adaptabilidade da estratégia.
  4. Introduzir um módulo de dimensionamento das posições para ajustar dinamicamente as dimensões das posições com base em fatores como a tendência e a volatilidade do mercado, controlando assim o risco.

Resumo

Esta estratégia combina o envelope de Nadaraya-Watson para suavização de preços com indicadores de tendência como ADX e DI, o indicador de impulso RSI e pontos de ruptura de preços para criar um sistema de negociação abrangente.


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


Relacionados

Mais.