Estrategia de trading cuantitativo de seguimiento de tendencia de media móvil T3 y stop loss móvil

T3MA SMA EMA
Fecha de creación: 2024-11-28 15:17:13 Última modificación: 2024-11-28 15:17:13
Copiar: 1 Número de Visitas: 505
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo de seguimiento de tendencia de media móvil T3 y stop loss móvil

Descripción general

Esta estrategia es un sistema de comercio cuantitativo integral que combina la línea media T3, el seguimiento de la tendencia y el mecanismo de parada móvil. La estrategia identifica la dirección de la tendencia del mercado a través de la media móvil T3, al mismo tiempo que utiliza el indicador de tendencia Lemon y el indicador TDFI para la confirmación de la señal, y se combina con el sistema de gestión de riesgos que combina la parada móvil y la parada fija para lograr la captura de la tendencia y el control efectivo del riesgo.

Principio de estrategia

El núcleo de la estrategia contiene tres partes principales: la identificación de tendencias, la confirmación de señales y la gestión de riesgos. En primer lugar, el uso de la media móvil T3 como herramienta principal de identificación de tendencias, la media T3 mediante el cálculo de la media móvil del índice hexagonal, puede reducir eficazmente la lateralidad y mantener la suavidad. En segundo lugar, se calcula el intervalo de fluctuación de los precios a través del indicador de tendencia Lemon, se filtra la señal en combinación con el indicador TDFI, y solo se produce una señal de negociación cuando el precio rompe el intervalo de fluctuación y el indicador TDFI se confirma.

Ventajas estratégicas

  1. El mecanismo de confirmación de múltiples señales mejora la precisión de las transacciones
  2. El uso de la línea media T3 reduce el efecto de la falsa ruptura
  3. Sistemas de gestión de riesgos flexibles que permiten un margen de maniobra adecuado para las tendencias a la vez que protegen los beneficios
  4. Apoyo a la suspensión parcial de las posiciones, lo que permite el desembolso por etapas de los beneficios
  5. Los parámetros son muy ajustables, lo que facilita la optimización en función de las diferentes condiciones del mercado

Riesgo estratégico

  1. T3 median lineal es complicado y puede haber un retraso en el cálculo
  2. La confirmación de múltiples señales puede llevar a perder algunas oportunidades de negociación
  3. El deterioro móvil puede ser provocado prematuramente en situaciones de gran volatilidad
  4. Se necesita una gran fluctuación de precios para generar una señal efectiva.
  5. Las señales falsas pueden ser frecuentes en el mercado horizontal

Dirección de optimización de la estrategia

  1. Introducción de un indicador de fluctuación para ajustar el parámetro de parada móvil
  2. Aumentar el módulo de reconocimiento de entornos de mercado para usar diferentes parámetros en diferentes condiciones de mercado
  3. Optimizar el ciclo de cálculo de los indicadores TDFI para mejorar la puntualidad de las señales
  4. Considere agregar un factor de volumen de transacciones para la confirmación de la señal
  5. Mecanismos de ajuste de la proporción de frenado parcial en la auto-adaptación

Resumir

Se trata de una estrategia de seguimiento de tendencias diseñada de forma integral, que garantiza la fiabilidad de las señales de negociación mediante el uso conjunto de múltiples indicadores técnicos y permite una gestión eficaz del riesgo. El diseño modular de la estrategia le permite una buena escalabilidad y espacio de optimización, lo que la convierte en el marco básico de un sistema de seguimiento de tendencias a medio y largo plazo. En la aplicación práctica, se recomienda ajustar los parámetros de manera óptima en función de la variedad de operaciones y el entorno del mercado.

Código Fuente de la Estrategia
/*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)