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

Tendência combinada multi-SMA e estocástica na sequência de uma estratégia de negociação

Autora:ChaoZhang, Data: 2024-12-27 14:43:30
Tags:SMAKDJATRRSIMACD

img

Resumo

Esta estratégia é um sistema de negociação que combina múltiplas médias móveis simples (SMA) com o oscilador estocástico. Executa transações quando as tendências do mercado são claramente definidas através do estabelecimento de zonas de preços e condições de identificação de tendências.

Princípios de estratégia

A estratégia baseia-se em vários componentes essenciais:

  1. Sistema de SMA dupla: utiliza SMAs de 19 períodos e 74 períodos para a determinação da tendência
  2. Zonas de preços: Divide a faixa de preços em 5 níveis para avaliação da força de mercado
  3. Oscilador estocástico: utiliza um estocástico de 60 períodos para condições de sobrecompra/supervenda
  4. Confirmação da tendência: utiliza três velas consecutivas para confirmar a continuação da tendência
  5. Condições de entrada: entra quando o preço cruza a SMA de 74 períodos e se encontra dentro de zonas de preços especificadas
  6. Mecanismo Stop-Loss: implementa paradas de trailing com saídas baseadas na tendência

Vantagens da estratégia

  1. Complexidade do sistema: combina indicadores de tendência e de dinâmica para uma análise abrangente do mercado
  2. Gestão de riscos: mecanismos múltiplos de stop-loss, incluindo hard stops e trailing stops
  3. Adaptabilidade: pode ser ajustado para diferentes condições de mercado através da otimização de parâmetros
  4. Captura de tendências: captura eficazmente tendências de médio a longo prazo, evitando sinais falsos
  5. Gestão de posições: ajusta dinamicamente as posições com base nas condições de mercado para uma utilização eficiente do capital

Riscos estratégicos

  1. Risco de mercado perturbado: pode gerar frequentes transacções em mercados laterais
  2. Risco de deslizamento: deslizamento potencialmente significativo em mercados em rápida evolução
  3. Sensibilidade dos parâmetros: diferentes combinações de parâmetros podem dar origem a diferentes desempenhos.
  4. Dependência do ambiente de mercado: a estratégia tem um melhor desempenho nos mercados em tendência
  5. Risco de gestão de capital: o dimensionamento completo das posições pode conduzir a uma redução significativa

Orientações de otimização

  1. Incorporar indicadores de volatilidade: considerar a adição de ATR para o ajustamento dinâmico de stop-loss
  2. Otimizar o tempo de entrada: adicionar confirmação de volume para melhorar a precisão da entrada
  3. Melhorar a gestão de capitais: implementar um módulo de dimensionamento de posições baseado na avaliação do risco
  4. Adicionar Análise do Ambiente de Mercado: Incluir indicadores de força da tendência para filtrar sinais
  5. Melhorar o Mecanismo de Stop-Loss: considerar paradas de atraso baseadas em percentagem para maior flexibilidade

Resumo

Esta estratégia constrói um sistema de negociação abrangente, combinando múltiplos indicadores técnicos, com fortes capacidades de seguimento de tendências e mecanismos de gerenciamento de riscos. Embora possa enfrentar desafios em certas condições de mercado, a otimização e refinamento contínuos podem ajudar a manter um desempenho estável em diferentes ambientes de mercado.


/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-25 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Purple SMA Strategy", overlay=true)

// === INPUTS ===
zoneLength = input.int(20, "Price Zone Length", minval=5)
tickSize = input.float(1.0, "Tick Size for Hard Stop")
hardStopTicks = input.int(50, "Hard Stop Loss in Ticks")

// === CALCULATE ZONES ===
h = ta.highest(high, zoneLength)
l = ta.lowest(low, zoneLength)
priceRange = h - l
lvl5 = h
lvl4 = l + (priceRange * 0.75)  // Orange line
lvl3 = l + (priceRange * 0.50)  // Yellow line
lvl2 = l + (priceRange * 0.25)  // Green line
lvl1 = l

// === INDICATORS ===
sma19 = ta.sma(close, 19)
sma74 = ta.sma(close, 74)

// === CANDLE COLOR CONDITIONS ===
isGreenCandle = close > open
isRedCandle = close < open

// === CONTINUOUS TREND DETECTION ===
isThreeGreenCandles = close > open and close[1] > open[1] and close[2] > open[2]
isThreeRedCandles = close < open and close[1] < open[1] and close[2] < open[2]

var bool inGreenTrend = false
var bool inRedTrend = false

// Update trends
if isThreeGreenCandles
    inGreenTrend := true
    inRedTrend := false
if isThreeRedCandles
    inRedTrend := true
    inGreenTrend := false
if (inGreenTrend and isRedCandle) or (inRedTrend and isGreenCandle)
    inGreenTrend := false
    inRedTrend := false

// === STOCHASTIC CONDITIONS ===
k = ta.stoch(close, high, low, 60)
d = ta.sma(k, 10)
isOverbought = d >= 80
isOversold = d <= 20
stochUp = d > d[1]
stochDown = d < d[1]

// === SMA COLOR LOGIC ===
sma19Color = if isOverbought and stochUp
    color.green
else if isOverbought and stochDown
    color.red
else if isOversold and stochUp
    color.green
else if isOversold and stochDown
    color.red
else if stochUp
    color.blue
else if stochDown
    color.purple
else
    color.gray

sma74Color = sma74 < sma19 ? color.green : color.red

// === CROSSING CONDITIONS ===
crossUpSMA = ta.crossover(close, sma74)
crossDownSMA = ta.crossunder(close, sma74)

// === ENTRY CONDITIONS ===
buyCondition = crossUpSMA and close > lvl4
sellCondition = crossDownSMA and close < lvl2

// === POSITION MANAGEMENT ===
var float stopLevel = na
var bool xMode = false

// Entry and Stop Loss
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)
    stopLevel := close - (hardStopTicks * tickSize)
    xMode := false

if sellCondition
    strategy.entry(id="Short", direction=strategy.short)
    stopLevel := close + (hardStopTicks * tickSize)
    xMode := false

// Update stops based on X's
if strategy.position_size != 0 and (inGreenTrend or inRedTrend)
    xMode := true
    if strategy.position_size > 0  // Long position
        stopLevel := low
    else  // Short position
        stopLevel := high

// Exit logic
if strategy.position_size > 0  // Long position
    if low <= stopLevel
        strategy.close(id="Long")
    else if xMode and not (inGreenTrend or inRedTrend)
        strategy.close(id="Long")

if strategy.position_size < 0  // Short position
    if high >= stopLevel
        strategy.close(id="Short")
    else if xMode and not (inGreenTrend or inRedTrend)
        strategy.close(id="Short")

// === PLOTTING ===
plot(sma19, "SMA 19", color=sma19Color, linewidth=2)
plot(sma74, "SMA 74", color=sma74Color, linewidth=2)
plot(lvl5, "Upper Zone Top", color=color.red, linewidth=2)
plot(lvl4, "Upper Zone Bottom", color=color.orange, linewidth=2)
plot(lvl3, "Middle Line", color=color.yellow, linewidth=2)
plot(lvl2, "Lower Zone Top", color=color.green, linewidth=2)
plot(lvl1, "Lower Zone Bottom", color=color.blue, linewidth=2)

// Plot X signals
plotshape(inGreenTrend, title="Bullish Line", style=shape.xcross, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(inRedTrend, title="Bearish Line", style=shape.xcross, location=location.abovebar, color=color.white, size=size.tiny)

// Zone fills
var p1 = plot(lvl5, display=display.none)
var p2 = plot(lvl4, display=display.none)
var p3 = plot(lvl2, display=display.none)
var p4 = plot(lvl1, display=display.none)
fill(p1, p2, color=color.new(color.red, 90))
fill(p3, p4, color=color.new(color.green, 90))

// Plot entry signals
plotshape(buyCondition, title="Buy", style=shape.square, location=location.belowbar, color=color.new(color.blue, 20), size=size.tiny, text="BUY", textcolor=color.blue)
plotshape(sellCondition, title="Sell", style=shape.square, location=location.abovebar, color=color.new(color.red, 20), size=size.tiny, text="SELL", textcolor=color.red)

Relacionados

Mais.