Estrategia de negociación de valores cuánticos que combina la media móvil exponencial con pérdida de parada de seguimiento y pérdida de parada porcentual

El autor:¿ Qué pasa?, Fecha: 2024-01-03 16:25:54
Las etiquetas:

img

Resumen general

El núcleo de esta estrategia es el uso de cruces de promedios móviles exponenciales como señales de negociación, combinadas con stop loss y stop loss porcentuales para bloquear las ganancias y controlar los riesgos.

Estrategia lógica

  1. Calcular la EMA rápida y la EMA lenta, con un período de EMA rápida de 20 días y un período de EMA lenta de 50 días.

  2. Después de la entrada, configure el stop loss trasero basado en la dirección de retención, por ejemplo, 7% para la posición larga y 7% para la posición corta.

  3. Al mismo tiempo, fije un precio de stop loss basado en el precio de entrada y la dirección de retención, por ejemplo, un 2% por debajo del precio de entrada para operaciones largas y un 2% por encima del precio de entrada para operaciones cortas.

  4. Compare el precio de stop de seguimiento y el precio de stop loss, use el más cercano al precio de mercado como el stop loss final para esta operación, envíe la orden de stop loss.

Ventajas

  1. Sencillo y fácil de implementar señales de comercio de promedio móvil.

  2. El seguimiento del stop loss bloquea las ganancias en la mayor medida posible, evitando al mismo tiempo pérdidas innecesarias por señales falsas.

  3. El porcentaje de stop loss es intuitivo y fácil de ajustar para controlar la pérdida máxima por operación.

  4. La combinación de trailing stops y fixed stops bloquea los beneficios y controla los riesgos.

Riesgos y contramedidas

  1. Los promedios móviles pueden generar señales falsas fácilmente, añadir filtros adicionales como el volumen.

  2. Las paradas de arrastre a veces se activan demasiado pronto, relaja un poco el porcentaje de arrastre.

  3. La configuración incorrecta de pérdida de parada fija puede ser demasiado agresiva o conservadora, necesita probar y ajustar el parámetro porcentual.

  4. Las salidas mecánicas de stop loss podrían perder oportunidades de reversión del mercado, incorporar indicadores técnicos para juzgar el detonante de stop.

Direcciones de optimización

  1. Prueba diferentes combinaciones de EMA para encontrar el equilibrio óptimo.

  2. Agregue indicadores como el volumen para filtrar señales falsas.

  3. Prueba más acciones para encontrar porcentajes de stop loss adecuados.

  4. Prueba paradas adaptativas que se ajusten a las condiciones del mercado.

  5. Incorporar indicadores como el RSI para determinar el tiempo de stop loss.

Resumen de las actividades

Esta estrategia integra señales de comercio promedio móvil, trailing stops y stops porcentual. A través de la optimización de parámetros, puede lograr ganancias estables con un estricto control de riesgos en varias acciones y productos básicos, vale la pena investigar y mejorar continuamente para los operadores de cantidad.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wouterpruym1828

//@version=5
strategy(title=" Combining Trailing Stop and Stop loss (% of instrument price)",
     overlay=true, pyramiding=1, shorttitle="TSL&SL%")

//INDICATOR SECTION

// Indicator Input options+
i_FastEMA = input.int(title = "Fast EMA period", minval = 0, defval = 20)
i_SlowEMA = input.int(title = "Slow EMA period", minval = 0, defval = 50)
     
// Calculate moving averages
fastEMA = ta.ema(close, i_FastEMA)
slowEMA = ta.ema(close, i_SlowEMA)

// Plot moving averages
plot(fastEMA, title="Fast SMA", color=color.blue)
plot(slowEMA, title="Slow SMA", color=color.orange)




//STRATEGY SECTION  

// Calculate trading conditions
buy  = ta.crossover(fastEMA, slowEMA)
sell = ta.crossunder(fastEMA, slowEMA)

// STEP 1:
// Configure trail stop loss level with input options (optional)

longTrailPerc = input.float(title="Long Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

shortTrailPerc = input.float(title="Short Trailing Stop (%)", minval=0.0, step=0.1, defval=7) * 0.01

//Configure stop loss level with input options (optional)

longStopPerc = input.float(title="Long Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01

shortStopPerc = input.float(title="Short Stop Loss (%)", minval=0.0, step=0.1, defval=2)*0.01


// STEP 2:
// Determine trail stop loss prices
longTrailPrice = 0.0, shortTrailPrice = 0.0

longTrailPrice := if (strategy.position_size > 0)
    stopValue = high * (1 - longTrailPerc)
    math.max(stopValue, longTrailPrice[1])
else
    0

shortTrailPrice := if (strategy.position_size < 0)
    stopValue = low * (1 + shortTrailPerc)
    math.min(stopValue, shortTrailPrice[1])
else
    999999

// Determine stop loss prices
entryPrice = 0.0

entryPrice := strategy.opentrades.entry_price(strategy.opentrades - 1)


longLossPrice = entryPrice * (1 - longStopPerc)

shortLossPrice = entryPrice * (1 + shortStopPerc)


// Plot stop loss values for confirmation

plot(series=(strategy.position_size > 0) ? longTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Long Trail Stop")
plot(series=(strategy.position_size < 0) ? shortTrailPrice : na,
     color=color.fuchsia, style=plot.style_cross,
     linewidth=2, title="Short Trail Stop")

plot(series=(strategy.position_size > 0) ? longLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Long Stop Loss")
plot(series=(strategy.position_size < 0) ? shortLossPrice : na,
     color=color.olive, style=plot.style_cross,
     linewidth=2, title="Short Stop Loss")

// Submit entry orders
if (buy)
    strategy.entry("Buy", strategy.long)

if (sell)
    strategy.entry("Sell", strategy.short)


//Evaluating trailing stop or stop loss to use

longStopPrice = longTrailPrice < longLossPrice ? longLossPrice : longTrailPrice

shortStopPrice = shortTrailPrice > shortLossPrice ? shortLossPrice : shortTrailPrice

// STEP 3:
// Submit exit orders for stop price

if (strategy.position_size > 0)
    strategy.exit(id="Buy Stop", stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit(id="Sell Stop", stop=shortStopPrice)


Más.