La mejor estrategia de trailing stop con deslizamiento


Fecha de creación: 2023-09-21 20:58:22 Última modificación: 2023-09-21 20:58:22
Copiar: 0 Número de Visitas: 741
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia utiliza un mecanismo de seguimiento de pérdidas por deslizamiento, que mueve la línea de pérdidas en función de la amplitud de las fluctuaciones de los precios, para lograr una parada dinámica. El objetivo de iniciar el seguimiento de las pérdidas cuando los precios alcanzan un nivel de ganancias especificado es proteger las ganancias, mientras se minimiza la posibilidad de que las pérdidas se activen prematuramente.

Principio de estrategia

La estrategia se basa en una entrada en la dirección de la tendencia de la línea de paridad binaria, donde la señal de entrada cruza la línea de paridad lenta sobre la línea de paridad rápida.

La innovación está en el diseño de los mecanismos de detención de pérdidas:

  1. Establecer una línea de inicio de stop loss. Activar el seguimiento de stop loss cuando el precio rompa la línea.

  2. La línea de parada se mueve siguiendo el porcentaje de deslizamiento establecido. Si se establece un deslizamiento del 3%, la línea de parada estará por debajo del 3 por ciento del precio mínimo.

  3. Cuando el precio se invierte en la dirección negativa y toca la línea de seguimiento del stop loss, se detiene la posición de liquidación.

Este diseño asegura que la línea de stop loss siga automáticamente las ganancias y reduce la probabilidad de que las ganancias se detengan cuando las ganancias son buenas.

Ventajas estratégicas

  • Deterioro de la proporción de puntos de deslizamiento, seguimiento automático del deterioro
  • Configuración de la línea de arranque para evitar la pérdida de activación prematura
  • La línea de pérdidas de seguimiento dinámico protege los beneficios
  • Evite las pérdidas por revocaciones a corto plazo
  • La línea de arranque y la proporción de puntos de deslizamiento se ajustan al mercado

Riesgo estratégico

  • La medianía puede retrasarse y generar falsas señales
  • La línea de arranque mal configurada puede activar el stop loss demasiado temprano o demasiado tarde
  • Proporción de punto de deslizamiento mal ajustada, demasiado floja o demasiado apretada
  • No se puede evitar por completo el riesgo de ser atrapado
  • Parámetros que necesitan ser optimizados para la volatilidad del mercado

El riesgo se puede reducir de la siguiente manera:

  • Optimización del ciclo de la línea media para mejorar la precisión de entrada
  • Prueba diferentes parámetros de la línea de arranque para encontrar la mejor posición
  • Proporción de puntos de deslizamiento óptimos para pruebas basadas en retrocesos históricos
  • Tener en cuenta las oportunidades de reingreso y reducir las faltas
  • Añadir otros criterios para evitar el retroceso

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimización de los parámetros de ciclo de doble línea media

Prueba de los diferentes parámetros de combinación de la línea rápida y la línea lenta

  1. Optimice o elimine la línea de inicio

Habilitar el stop loss de seguimiento directamente o configurar diferentes parámetros según la variedad

  1. Prueba de diferentes parámetros de proporción de puntos de deslizamiento

Buscar la proporción óptima de punto de deslizamiento para las diferentes variedades

  1. Acompañamiento en el mecanismo de readmisión

Establecer las condiciones para la reingreso después de la salida con pérdidas.

  1. Ajuste de la fuerza de parada en función de la fluctuación

La amplitud de los límites de pérdidas se puede flexibilizar adecuadamente cuando la volatilidad del mercado aumenta

Resumir

Esta estrategia utiliza un método de seguimiento de pérdidas por deslizamiento, para ajustar dinámicamente la posición de parada después de la línea de inicio. Este método de parada puede ajustar automáticamente la fuerza de parada en función de las fluctuaciones del mercado, para lograr el equilibrio entre la protección de los beneficios y la reducción de pérdidas innecesarias.

Código Fuente de la Estrategia
/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

SystemName = "BEST Trailing Stop Strategy"
TradeId = "BEST"

InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true


// strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay, 
//  pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
//  commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2)


src = close
// Calculate moving averages
fastSMA = sma(close, 15)
slowSMA = sma(close, 45)

// Calculate trading conditions
enterLong  = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)

// trend states
since_buy  = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend  = since_sell > since_buy
sell_trend = since_sell < since_buy 

change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1])

//plot(buy_trend ? 1 : 0, title='buy_trend', transp=100)
//plot(sell_trend ? 1 : 0, title='sell_trend', transp=100)

// get the entry price
entry_price = valuewhen(enterLong or enterShort, close, 0)

// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)

// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)



///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////

// use SL?
useSL = input(true, "Use stop Loss")
// Configure trail stop level with input
StopTrailPerc = input(title="Trail Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
// Will trigger the take profit trailing once reached
use_SL_Trigger = input(true, "Use stop Loss Trigger")
StopTrailTrigger   = input(2.0, "SL Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01


StopLossPriceTrigger = 0.0
StopLossPriceTrigger := if (use_SL_Trigger)
    if buy_trend
        entry_price * (1 + StopTrailTrigger) 
    else
        entry_price * (1 - StopTrailTrigger)
else
    -1


var SL_Trigger_Long_HIT = false
SL_Trigger_Long_HIT := useSL and use_SL_Trigger and buy_trend and high >= StopLossPriceTrigger
 ? true : SL_Trigger_Long_HIT[1]


var SL_Trigger_Short_HIT = false
SL_Trigger_Short_HIT := useSL and use_SL_Trigger and sell_trend and low <= StopLossPriceTrigger
 ? true : SL_Trigger_Short_HIT[1]


display_long_SL_trigger     = useSL and buy_trend  and use_SL_Trigger 
 and SL_Trigger_Long_HIT == false and StopLossPriceTrigger != -1
display_short_SL_trigger    = useSL and sell_trend and use_SL_Trigger 
 and SL_Trigger_Short_HIT == false and StopLossPriceTrigger != -1
display_SL_trigger          = display_long_SL_trigger or display_short_SL_trigger

plot(display_SL_trigger ? StopLossPriceTrigger : na, title='SLPriceTrigger', transp=0, 
 color=color.maroon, style=plot.style_circles, linewidth=3)


// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0

longStopPrice := if useSL and buy_trend
    stopValue = low * (1 - StopTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if useSL and sell_trend
    stopValue = high * (1 + StopTrailPerc)
    min(stopValue, shortStopPrice[1])
else
    999999

//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS  ***//
//////////////////////////////////////////////////////////////////////////////////////////

cond_long_stop_loss_hit  = useSL and buy_trend and crossunder(low, longStopPrice[1]) 
 and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1]) 
 and (SL_Trigger_Short_HIT or use_SL_Trigger == false)


// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice 
 and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
 ? longStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Long Trail Stop")

plot(series=useSL and sell_trend and high <= shortStopPrice 
 and (SL_Trigger_Short_HIT or use_SL_Trigger == false)
 ? shortStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Short Trail Stop")

close_long  = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit

// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)

//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)


if change_trend
    SL_Trigger_Long_HIT := false
    SL_Trigger_Short_HIT := false