Estrategia de negociación con toma de ganancias por lotes que sigue tendencias dinámicas y múltiples indicadores

EMA MACD RSI ATR
Fecha de creación: 2025-02-10 14:49:11 Última modificación: 2025-02-10 14:49:11
Copiar: 2 Número de Visitas: 378
1
Seguir
1617
Seguidores

Estrategia de negociación con toma de ganancias por lotes que sigue tendencias dinámicas y múltiples indicadores

Descripción general

Se trata de una estrategia de negociación cuantitativa que combina el seguimiento de tendencias y el análisis técnico. La estrategia confirma las señales de negociación a través de múltiples indicadores técnicos, y utiliza un mecanismo de gestión de posiciones de bloqueo por lotes y dinámico, diseñado para capturar las principales tendencias del mercado y controlar el riesgo al mismo tiempo. La estrategia integra varios indicadores técnicos, como EMA, MACD y RSI, para identificar oportunidades de negociación potenciales a través de cruces y desviaciones entre indicadores.

Principio de estrategia

La lógica de transacción central de la estrategia se basa en los siguientes elementos clave:

  1. Las entradas utilizan múltiples filtros de indicadores técnicos: cruce de la EMA rápida con la EMA lenta, la señal de la horca dorada MACD / horca muerta y el indicador de sobreventa y sobreventa RSI. Las entradas múltiples requieren que la EMA rápida atraviese la EMA lenta, la horca dorada MACD y el RSI sea inferior a 70; las entradas en blanco requieren que la EMA rápida atraviese la EMA lenta, la horca muerta MACD y el RSI sea superior a 30.
  2. El control de riesgo utiliza un stop loss de proporción fija, establecido en el 5% del precio de apertura de la posición.
  3. El mecanismo de parada de lote: la primera parada se encuentra en el 8% y la segunda parada en el 12%, ajustando dinámicamente la posición de la segunda parada para adaptarse a las fluctuaciones del mercado.
  4. La gestión de la posición se basa en el cálculo dinámico de ATR, con un control de riesgo máximo del 5% por unidad y una posición máxima no superior al 40% de los intereses de la cuenta.

Ventajas estratégicas

  1. La verificación cruzada de múltiples indicadores tecnológicos permite filtrar de manera eficaz las señales falsas y mejorar la calidad de las transacciones.
  2. El uso de un mecanismo de suspensión por lotes puede bloquear parte de las ganancias y no perder completamente los beneficios de la continuación de la situación.
  3. El sistema de gestión de posiciones dinámicas puede ajustar automáticamente el tamaño de las transacciones en función de la volatilidad del mercado y controlar el riesgo de manera efectiva.
  4. Un buen sistema de control de riesgo, incluyendo paradas fijas, posiciones dinámicas y límites máximos de tenencia de posiciones, garantiza la estabilidad a largo plazo de la estrategia.
  5. La lógica de la estrategia es clara, los parámetros son ajustables, lo que facilita la optimización de acuerdo con los diferentes entornos del mercado.

Riesgo estratégico

  1. En los mercados de rápida volatilidad, los problemas de stop loss pueden ser frecuentes, y es necesario tener en cuenta ajustar los parámetros o suspender el comercio cuando la volatilidad del mercado es demasiado alta.
  2. Las oscilaciones en el mercado horizontal pueden causar pérdidas continuas, por lo que se recomienda agregar un mecanismo de juicio horizontal.
  3. El filtrado de múltiples indicadores puede causar que se pierda parte de la tendencia, y en un mercado de fuerte tendencia puede no ser tan bueno como una sola estrategia de indicadores.
  4. El mecanismo de detención por lotes puede no ser capaz de cerrar posiciones a tiempo en un mercado de rápida reversión, por lo que se debe considerar la posibilidad de incrementar el juicio de señales de reversión.

Dirección de optimización de la estrategia

  1. Considere la posibilidad de introducir un filtro de volatilidad del mercado, reduciendo las posiciones o suspendiendo las operaciones si la volatilidad es demasiado alta.
  2. Se puede aumentar la determinación de la intensidad de la tendencia y ajustar la posición de parada durante una fuerte tendencia para obtener más ganancias de la tendencia.
  3. Optimizar el sistema de gestión de posiciones y considerar la inclusión de ajustes dinámicos de posiciones basados en ganancias y pérdidas.
  4. Aumentar el mecanismo de evaluación del estado del mercado, utilizando diferentes combinaciones de parámetros en diferentes estados del mercado.
  5. Considerar la inclusión de indicadores de volumen de transacciones para mejorar la fiabilidad de las señales de transacción.

Resumir

La estrategia utiliza el uso combinado de múltiples indicadores técnicos, combinado con el bloqueo por lotes y la gestión dinámica de posiciones, para construir un sistema de negociación relativamente completo. La estrategia tiene la ventaja de que el control de riesgos es completo y la señal de negociación es de alta fiabilidad, pero también existe la desventaja de que puede perderse parte de la situación.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Hang Strategy Aggressive", overlay=true, initial_capital=1000, currency=currency.USDT, default_qty_type=strategy.cash, default_qty_value=100)

// === 参数设置 ===
fastLength = input.int(5, "快速EMA长度")
slowLength = input.int(15, "慢速EMA长度")
rsiLength = input.int(7, "RSI长度")
atrPeriod = input.int(10, "ATR周期")
leverageMultiple = input.float(3.0, "杠杆倍数", minval=1.0, step=0.5)

// === 止盈止损参数 ===
stopLossPercent = input.float(5.0, "止损百分比", minval=1.0, step=0.5)
firstTakeProfitPercent = input.float(8.0, "第一止盈点百分比", minval=1.0, step=0.5)
secondTakeProfitPercent = input.float(12.0, "第二止盈点百分比", minval=1.0, step=0.5)
firstTakeProfitQtyPercent = input.float(50.0, "第一止盈仓位百分比", minval=1.0, maxval=100.0, step=5.0)

// === 技术指标 ===
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
superFastEMA = ta.ema(close, 3)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrPeriod)

// === 趋势判断 ===
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
macdCross = (macdLine > signalLine) and (macdLine[1] < signalLine[1])
macdCrossDown = (macdLine < signalLine) and (macdLine[1] > signalLine[1])

// === 交易信号 ===
longCondition = (fastEMA > slowEMA) and macdCross and (rsi < 70)
shortCondition = (fastEMA < slowEMA) and macdCrossDown and (rsi > 30)

// === 平仓信号 ===
exitLong = shortCondition or (fastEMA < slowEMA)
exitShort = longCondition or (fastEMA > slowEMA)

// === 仓位管理 ===
maxRiskPerTrade = 0.05
basePosition = strategy.equity * maxRiskPerTrade
atrAmount = atr * close
riskPosition = basePosition / atrAmount * leverageMultiple
positionSize = math.min(riskPosition, strategy.equity * 0.4 / close)

// === 交易状态变量 ===
var isLong = false
var isShort = false
var partialTpTriggered = false
var float stopPrice = na
var float firstTpPrice = na
var float secondTpPrice = na
var float firstTpQty = na

// === 交易执行 ===
// 多头入场
if (longCondition and not isLong and not isShort)
    strategy.entry("多", strategy.long, qty=positionSize)
    isLong := true
    partialTpTriggered := false

// 空头入场
if (shortCondition and not isShort and not isLong)
    strategy.entry("空", strategy.short, qty=positionSize)
    isShort := true
    partialTpTriggered := false

// === 止盈止损逻辑 ===
if (strategy.position_size > 0)  // 多仓
    stopPrice := strategy.position_avg_price * (1 - stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 + firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 + secondTakeProfitPercent/100)
    
    if (close[1] <= stopPrice or low <= stopPrice)
        strategy.close_all("多止损")
        isLong := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] >= firstTpPrice or high >= firstTpPrice))
        strategy.order("多第一止盈", strategy.short, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := high * (1 + 0.04)  // 基于当前最高价再上涨4%
    
    if (close[1] >= secondTpPrice or high >= secondTpPrice)
        strategy.close_all("多第二止盈")
        isLong := false
        partialTpTriggered := false

if (strategy.position_size < 0)  // 空仓
    stopPrice := strategy.position_avg_price * (1 + stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 - firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 - secondTakeProfitPercent/100)
    
    if (close[1] >= stopPrice or high >= stopPrice)
        strategy.close_all("空止损")
        isShort := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] <= firstTpPrice or low <= firstTpPrice))
        strategy.order("空第一止盈", strategy.long, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := low * (1 - 0.04)  // 基于当前最低价再下跌4%
    
    if (close[1] <= secondTpPrice or low <= secondTpPrice)
        strategy.close_all("空第二止盈")
        isShort := false
        partialTpTriggered := false

// === 其他平仓条件 ===
if (exitLong and isLong)
    strategy.close_all("多平仓")
    isLong := false
    partialTpTriggered := false

if (exitShort and isShort)
    strategy.close_all("空平仓")
    isShort := false
    partialTpTriggered := false

// === 绘图 ===
plot(fastEMA, "快速EMA", color=color.blue)
plot(slowEMA, "慢速EMA", color=color.red)
plot(superFastEMA, "超快EMA", color=color.green)

// 绘制止盈止损线
plot(strategy.position_size != 0 ? strategy.position_avg_price : na, "开仓价", color=color.yellow)
plot(strategy.position_size != 0 ? stopPrice : na, "止损线", color=color.red)
plot(strategy.position_size != 0 ? firstTpPrice : na, "第一止盈线", color=color.green)
plot(strategy.position_size != 0 ? secondTpPrice : na, "第二止盈线", color=color.blue)