Rastreamento de tendência de média móvel T3 e estratégia de negociação quantitativa de stop loss móvel

T3MA SMA EMA
Data de criação: 2024-11-28 15:17:13 última modificação: 2024-11-28 15:17:13
cópia: 1 Cliques: 505
1
focar em
1617
Seguidores

Rastreamento de tendência de média móvel T3 e estratégia de negociação quantitativa de stop loss móvel

Visão geral

Esta estratégia é um sistema de negociação quantitativa integrado que combina a linha média T3, o acompanhamento de tendências e o mecanismo de parada móvel. A estratégia identifica a direção da tendência do mercado através da média móvel T3, ao mesmo tempo em que usa o indicador de tendência Lemon e o indicador TDFI para a confirmação de sinais, e funciona com o sistema de gerenciamento de risco combinado com a parada móvel e a parada fixa, para obter a captação da tendência e o controle efetivo do risco.

Princípio da estratégia

O núcleo da estratégia contém três partes principais: identificação de tendências, confirmação de sinais e gerenciamento de risco. Primeiro, o uso da média móvel T3 como principal ferramenta de identificação de tendências, a média T3 é calculada através de uma média móvel de índice hexagonal, que é capaz de reduzir efetivamente o atraso e manter a suavidade. Em seguida, o indicador de tendência Lemon calcula a faixa de flutuação dos preços, em combinação com o indicador TDFI, para filtrar os sinais de negociação, que só é produzido quando o preço quebra a faixa de flutuação e o indicador TDFI é confirmado.

Vantagens estratégicas

  1. Mecanismo de confirmação de múltiplos sinais melhora a precisão das transações
  2. O uso da linha média T3 diminui o efeito de falsas rupturas
  3. Um sistema de gestão de risco flexível, capaz de dar espaço suficiente para a tendência enquanto protege os lucros
  4. Apoio a paralisação parcial de posições, que permite a realização de lucros em etapas
  5. Parâmetros ajustáveis para otimização de acordo com diferentes cenários de mercado

Risco estratégico

  1. T3 mediano de linha de cálculo complexo, pode haver um atraso de cálculo
  2. A confirmação de múltiplos sinais pode levar a oportunidades de negociação perdidas
  3. A parada móvel pode ser desencadeada prematuramente em situações de forte volatilidade
  4. É preciso uma grande oscilação de preços para produzir um sinal eficaz.
  5. Falsos sinais podem ser frequentes no mercado horizontal

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

  1. Introdução de um indicador de volatilidade para ajustar o parâmetro de stop loss móvel
  2. Adição de módulos de reconhecimento de cenários de mercado, usando diferentes parâmetros em diferentes condições de mercado
  3. Otimização do ciclo de cálculo dos indicadores TDFI, melhorando a atualização dos sinais
  4. Considere adicionar um fator de volume de transação para a confirmação de sinal
  5. Mecanismos de ajuste de proporção de suspensão parcial de auto-adaptação

Resumir

Trata-se de uma estratégia de acompanhamento de tendências abrangente, que garante a confiabilidade dos sinais de negociação, ao mesmo tempo em que permite um gerenciamento eficaz do risco, através da utilização conjunta de múltiplos indicadores técnicos. O design modular da estratégia permite uma boa escalabilidade e espaço de otimização, adequando-se como uma estrutura básica para sistemas de acompanhamento de tendências a médio e longo prazo.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Lemon Trend Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
 
// Input parameters
lookbackPeriod = input.int(14, "Lookback Period")
t3Length = input.int(200, "T3 MA Length")
t3Factor = input.float(0.7, "T3 Factor", minval=0, maxval=1)

// 移动止损参数
trailingStopPct = input.float(1.5, "移动止损百分比", minval=0.1, step=0.1)
trailingStopActivationPct = input.float(1.0, "移动止损激活百分比", minval=0.1, step=0.1)
 
// === T3 Moving Average Function ===
t3(src, length, factor) =>
    // First EMA
    e1 = ta.ema(src, length)
    // Second EMA
    e2 = ta.ema(e1, length)
    // Third EMA
    e3 = ta.ema(e2, length)
    // Fourth EMA
    e4 = ta.ema(e3, length)
    // Fifth EMA
    e5 = ta.ema(e4, length)
    // Sixth EMA
    e6 = ta.ema(e5, length)
   
    c1 = -factor * factor * factor
    c2 = 3 * factor * factor + 3 * factor * factor * factor
    c3 = -6 * factor * factor - 3 * factor - 3 * factor * factor * factor
    c4 = 1 + 3 * factor + factor * factor * factor + 3 * factor * factor
   
    t3 = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
 
// Calculate T3 MA
t3ma = t3(close, t3Length, t3Factor)
plot(t3ma, "T3 MA", color=color.blue)
 
// === Lemon Trend Indicator ===
highLowDiff = high - low
normalizedDiff = ta.sma(highLowDiff, lookbackPeriod)
upperBand = ta.highest(high, lookbackPeriod)
lowerBand = ta.lowest(low, lookbackPeriod)
buySignal = ta.crossover(close, upperBand - normalizedDiff)
sellSignal = ta.crossunder(close, lowerBand + normalizedDiff)
 
// === TDFI Indicator ===
tdfiLength = input.int(14, "TDFI Length")
tdfi = ta.ema(close - close[1], tdfiLength)
tdfiSignal = ta.ema(tdfi, 9)
 
// Plot signals
plotshape(buySignal and tdfi > tdfiSignal and close > t3ma, "Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal and tdfi < tdfiSignal and close < t3ma, "Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
 
// === Strategy Logic ===
longCondition = buySignal and tdfi > tdfiSignal and close > t3ma
shortCondition = sellSignal and tdfi < tdfiSignal and close < t3ma
 
// 计算移动止损价格
var float longTrailingStop = na
var float shortTrailingStop = na

// 更新移动止损价格
if (strategy.position_size > 0)
    threshold = strategy.position_avg_price * (1 + trailingStopActivationPct / 100)
    if (high > threshold)
        stopPrice = high * (1 - trailingStopPct / 100)
        if (na(longTrailingStop) or stopPrice > longTrailingStop)
            longTrailingStop := stopPrice
    
if (strategy.position_size < 0)
    threshold = strategy.position_avg_price * (1 - trailingStopActivationPct / 100)
    if (low < threshold)
        stopPrice = low * (1 + trailingStopPct / 100)
        if (na(shortTrailingStop) or stopPrice < shortTrailingStop)
            shortTrailingStop := stopPrice

// Entry orders
if (longCondition)
    strategy.entry("Long", strategy.long)
    longTrailingStop := na
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortTrailingStop := na
 
// Calculate stop loss and take profit levels
longStopLoss = ta.lowest(low, lookbackPeriod)
shortStopLoss = ta.highest(high, lookbackPeriod)
 
// Exit conditions with fixed R:R
fixedRR = input.float(1.8, "Fixed Risk:Reward Ratio")
partialExitPct = input.float(50.0, "Partial Exit Percentage", minval=0, maxval=100) / 100
 
// 综合移动止损和固定止损
if (strategy.position_size > 0)
    longTakeProfit = strategy.position_avg_price + (strategy.position_avg_price - longStopLoss) * fixedRR
    stopPrice = na(longTrailingStop) ? longStopLoss : math.max(longStopLoss, longTrailingStop)
    strategy.exit("Long Exit", "Long", qty_percent=partialExitPct, stop=stopPrice, limit=longTakeProfit)
    
if (strategy.position_size < 0)
    shortTakeProfit = strategy.position_avg_price - (shortStopLoss - strategy.position_avg_price) * fixedRR
    stopPrice = na(shortTrailingStop) ? shortStopLoss : math.min(shortStopLoss, shortTrailingStop)
    strategy.exit("Short Exit", "Short", qty_percent=partialExitPct, stop=stopPrice, limit=shortTakeProfit)

// 绘制移动止损线
plot(strategy.position_size > 0 ? longTrailingStop : na, "Long Trailing Stop", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? shortTrailingStop : na, "Short Trailing Stop", color=color.red, style=plot.style_linebr)