Estratégia de combinação de rastreamento de tendência de cruzamento de média móvel dinâmica

EMA SMA Moving Average CROSSOVER TREND FOLLOWING STOP LOSS TAKE PROFIT
Data de criação: 2025-02-24 09:46:10 última modificação: 2025-02-24 09:46:10
cópia: 1 Cliques: 315
2
focar em
319
Seguidores

Estratégia de combinação de rastreamento de tendência de cruzamento de média móvel dinâmica Estratégia de combinação de rastreamento de tendência de cruzamento de média móvel dinâmica

Visão geral

A estratégia é um sistema de acompanhamento de tendências baseado em cruzamentos de múltiplos médios, combinando os indicadores SMA e EMA para capturar as tendências do mercado. A estratégia usa uma média móvel simples (SMA) e duas médias móveis de índices (EMA) em combinação com um ciclo personalizado para construir um sistema de negociação de acompanhamento de tendências completo. Ao mesmo tempo, integra mecanismos de gestão de stop-loss e de objetivos de lucro dinâmicos, controlando efetivamente os riscos e bloqueando os ganhos.

Princípio da estratégia

A estratégia baseia-se principalmente na relação dinâmica de três linhas uniformes para a tomada de decisões comerciais. O sistema determina a direção da tendência monitorando a posição relativa do preço em relação ao SMA e o cruzamento entre o EMA rápido e o EMA lento. Os sinais de entrada são divididos em dois tipos de acionamento: um, quando o preço está acima do SMA e o EMA rápido atravessa o EMA lento; o outro, quando o preço quebra o SMA e o preço anterior permanece acima do SMA.

Vantagens estratégicas

  1. O uso de combinações de linhas médias múltiplas aumenta a precisão do julgamento de tendências e reduz os prejuízos causados por falsas rupturas
  2. A dupla entrada foi concebida para capturar oportunidades no início de uma tendência e para acompanhar a continuidade de uma tendência já estabelecida.
  3. O mecanismo de parada dinâmica protege os trunfos já lucrativos e dá espaço para que a tendência se desenvolva plenamente
  4. A configuração do Stop Loss Ratio é razoável, com um bom equilíbrio entre controle de risco e espaço de ganho
  5. O cruzamento da linha média serve como condição adicional para a posição de equilíbrio, ajudando a evitar o risco de reversão da tendência em tempo hábil.

Risco estratégico

  1. Perda de lucro em mercados de baixa volatilidade
  2. Sistemas de linha média múltipla podem gerar atraso em mercados de rápida volatilidade
  3. O multiplicador de stop loss fixo pode não ser adequado para todas as circunstâncias do mercado
  4. Em mercados com alta volatilidade, o stop loss móvel pode bloquear lucros prematuramente
  5. A otimização excessiva dos parâmetros pode levar a que a estratégia não atenda aos resultados da retrospectiva no disco

Direção de otimização da estratégia

  1. Introdução de indicadores de volatilidade para ajustar dinamicamente os parâmetros de stop loss e de stop loss para que a estratégia se adapte melhor a diferentes cenários de mercado
  2. Aumentar o índice de tráfego como confirmação auxiliar, aumentando a confiabilidade do sinal de entrada
  3. Ajustar o ciclo de linha média de acordo com a dinâmica das características de flutuação do mercado para melhorar a adaptabilidade da estratégia
  4. Adicionar um filtro de intensidade de tendência para evitar transações frequentes em um ambiente de tendência fraca
  5. Desenvolvimento de mecanismos de stop loss móveis adaptáveis para ajustar a distância de stop loss de acordo com a dinâmica de volatilidade do mercado

Resumir

A estratégia de construção de um sistema completo de acompanhamento de tendências por meio do uso de combinação de múltiplas linhas de equilíbrio, com regras detalhadas de design em entradas, saídas e gerenciamento de risco. A vantagem da estratégia reside na capacidade de identificar e acompanhar as tendências de forma eficaz, ao mesmo tempo em que protege os lucros por meio de mecanismos de parada de perdas dinâmicas. Embora existam alguns riscos inerentes, a direção de otimização proposta pode melhorar ainda mais a estabilidade e adaptabilidade da estratégia.

Código-fonte da estratégia
/*backtest
start: 2025-02-17 17:00:00
end: 2025-02-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("交易策略(自定义EMA/SMA参数)", overlay=true, initial_capital=100000, currency=currency.EUR, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// 输入参数:可调的 SMA 和 EMA 周期
smaLength     = input.int(120, "SMA Length", minval=1, step=1)
emaFastPeriod = input.int(13, "EMA Fast Period", minval=1, step=1)
emaSlowPeriod = input.int(21, "EMA Slow Period", minval=1, step=1)

// 计算均线
smaVal   = ta.sma(close, smaLength)
emaFast  = ta.ema(close, emaFastPeriod)
emaSlow  = ta.ema(close, emaSlowPeriod)

// 绘制均线
plot(smaVal, color=color.orange, title="SMA")
plot(emaFast, color=color.blue, title="EMA Fast")
plot(emaSlow, color=color.red, title="EMA Slow")

// 入场条件 - 做多
// 条件1:收盘价高于SMA 且 EMA Fast 向上穿越 EMA Slow
longTrigger1 = (close > smaVal) and ta.crossover(emaFast, emaSlow)
// 条件2:收盘价上穿SMA 且前5根K线的最低价均高于各自的SMA
longTrigger2 = ta.crossover(close, smaVal) and (low[1] > smaVal[1] and low[2] > smaVal[2] and low[3] > smaVal[3] and low[4] > smaVal[4] and low[5] > smaVal[5])
longCondition = longTrigger1 or longTrigger2

// 入场条件 - 做空
// 条件1:收盘价低于SMA 且 EMA Fast 向下穿越 EMA Slow
shortTrigger1 = (close < smaVal) and ta.crossunder(emaFast, emaSlow)
// 条件2:收盘价下穿SMA 且前5根K线的最高价均低于各自的SMA
shortTrigger2 = ta.crossunder(close, smaVal) and (high[1] < smaVal[1] and high[2] < smaVal[2] and high[3] < smaVal[3] and high[4] < smaVal[4] and high[5] < smaVal[5])
shortCondition = shortTrigger1 or shortTrigger2

// 定义变量记录入场时的价格与EMA Fast值,用于计算止损
var float entryPriceLong      = na
var float entryEMA_Fast_Long   = na
var float entryPriceShort     = na
var float entryEMA_Fast_Short = na

// 入场与初始止盈止损设置 - 做多
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (longCondition and strategy.position_size == 0)
    entryPriceLong      := close
    entryEMA_Fast_Long  := emaFast
    strategy.entry("Long", strategy.long)
    stopPercLong = math.max(0.002, (entryPriceLong - entryEMA_Fast_Long) / entryPriceLong)
    stopLong     = entryPriceLong * (1 - stopPercLong)
    tpLong       = entryPriceLong * (1 + 5 * stopPercLong)
    strategy.exit("LongExit", "Long", stop=stopLong, limit=tpLong)

// 入场与初始止盈止损设置 - 做空
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (shortCondition and strategy.position_size == 0)
    entryPriceShort      := close
    entryEMA_Fast_Short  := emaFast
    strategy.entry("Short", strategy.short)
    stopPercShort = math.max(0.002, (entryEMA_Fast_Short - entryPriceShort) / entryPriceShort)
    stopShort     = entryPriceShort * (1 + stopPercShort)
    tpShort       = entryPriceShort * (1 - 5 * stopPercShort)
    strategy.exit("ShortExit", "Short", stop=stopShort, limit=tpShort)

// 移动止损逻辑
// 当持仓盈利达到0.8%时更新止损和止盈,保持止盈为止损的5倍
var float longHighest = na
if (strategy.position_size > 0)
    longHighest := na(longHighest) ? high : math.max(longHighest, high)
    if (high >= entryPriceLong * 1.008)
        newLongStop = longHighest * (1 - 0.003)
        newPerc     = (entryPriceLong - newLongStop) / entryPriceLong
        newLongTP   = entryPriceLong * (1 + 5 * newPerc)
        strategy.exit("LongExit", "Long", stop=newLongStop, limit=newLongTP)
else
    longHighest := na

var float shortLowest = na
if (strategy.position_size < 0)
    shortLowest := na(shortLowest) ? low : math.min(shortLowest, low)
    if (low <= entryPriceShort * 0.992)
        newShortStop  = shortLowest * (1 + 0.003)
        newPercShort  = (newShortStop - entryPriceShort) / entryPriceShort
        newShortTP    = entryPriceShort * (1 - 5 * newPercShort)
        strategy.exit("ShortExit", "Short", stop=newShortStop, limit=newShortTP)
else
    shortLowest := na

// 额外平仓条件
// 如果持多仓时EMA Fast下穿EMA Slow,则立即平多
if (strategy.position_size > 0 and ta.crossunder(emaFast, emaSlow))
    strategy.close("Long", comment="EMA下穿平多")
// 如果持空仓时EMA Fast上穿EMA Slow,则立即平空
if (strategy.position_size < 0 and ta.crossover(emaFast, emaSlow))
    strategy.close("Short", comment="EMA上穿平空")