Detención gradual con estrategia de obtención de beneficios parciales

El autor:¿ Qué pasa?, Fecha: 2023-11-28 16:05:24
Las etiquetas:

img

Resumen general

Esta es una estrategia de salida que utiliza una parada de seguimiento escalonada con una toma parcial de ganancias. Mueve la parada de pérdida al punto de equilibrio después de alcanzar el primer nivel de ganancia y se mueve a la primera toma de ganancias después de alcanzar el segundo nivel. Esto permite bloquear algunas ganancias manteniendo el potencial de ganancia.

Estrategia lógica

Los componentes clave de esta estrategia son:

  1. Establecer un stop loss y 3 toma los niveles de ganancia en puntos.
  2. Definición de funciones para calcular el beneficio actual en puntos y el precio de stop loss.
  3. Definir una función para determinar el nivel de ganancia actual.
  4. Modificación del precio de stop loss basado en la etapa de ganancia al precio de seguimiento.

Específicamente, primero establece un stop loss de 100 puntos y toma ganancias en 100/200/300 puntos.curProfitInPtsLa función calcula el beneficio actual basándose en el precio actual y el precio de entrada.calcStopLossPriceLa función calcula el precio de stop loss basado en la distancia del punto.

La lógica clave está dentro de lagetCurrentStageFunción que comprueba si existe una posición y si el beneficio ha superado cada nivel de beneficio, avanzando la etapa si es verdad.

Finalmente, el stop loss se modifica de acuerdo con la etapa: la etapa 1 utiliza el stop original, la etapa 2 el break-even y la etapa 3 sigue el primer nivel de take profit.

Análisis de ventajas

Las ventajas de esta estrategia gradual de detención de trailers:

  1. Permite obtener algunos beneficios manteniendo un potencial de ganancia adicional.
  2. El stop loss de seguimiento sigue el precio y reduce la posibilidad de descenso.
  3. Los controles de toma de ganancias en varios pasos son mejores para el riesgo que una toma de ganancias.
  4. Una lógica simple y clara.

Análisis de riesgos

Hay algunos riesgos a tener en cuenta:

  1. La toma de ganancias escalonada puede perder mejores oportunidades de salida.
  2. Si la distancia de parada del rastro es demasiado alta, la parada puede activarse prematuramente.
  3. La incapacidad de reducir las pérdidas también puede conducir a pérdidas más grandes.

Optimización

Algunas maneras de mejorar esta estrategia:

  1. Prueba diferentes ganancias y distancias de parada para optimizar los parámetros.
  2. Considere los mecanismos de pérdida rápida para situaciones específicas.
  3. Utilizar indicadores técnicos para determinar objetivos de ganancia y niveles de parada.
  4. Equilibrar las salidas rentables y las distancias de parada.

/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
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/
// © adolgov

// @description
// when tp1 is reached, sl is moved to break-even
// when tp2 is reached, sl is moved to tp1
// when tp3 is reached - exit

//@version=4
strategy("Stepped trailing strategy example", overlay=true)

// random entry condition
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

// sl & tp in points
sl = input(100)
tp1 = input(100)
tp2 = input(200)
tp3 = input(300)

curProfitInPts() =>
    if strategy.position_size > 0
        (high - strategy.position_avg_price) / syminfo.mintick
    else if strategy.position_size < 0
        (strategy.position_avg_price - low) / syminfo.mintick
    else
        0
        
calcStopLossPrice(OffsetPts) =>
    if strategy.position_size > 0
        strategy.position_avg_price - OffsetPts * syminfo.mintick
    else if strategy.position_size < 0
        strategy.position_avg_price + OffsetPts * syminfo.mintick
    else
        0
        
calcProfitTrgtPrice(OffsetPts) =>
    calcStopLossPrice(-OffsetPts)

getCurrentStage() =>
    var stage = 0
    if strategy.position_size == 0 
        stage := 0
    if stage == 0 and strategy.position_size != 0
        stage := 1
    else if stage == 1 and curProfitInPts() >= tp1
        stage := 2
    else if stage == 2 and curProfitInPts() >= tp2
        stage := 3
    stage

stopLevel = -1.
profitLevel = calcProfitTrgtPrice(tp3)

// based on current stage set up exit
// note: we use same exit ids ("x") consciously, for MODIFY the exit's parameters
curStage = getCurrentStage()
if curStage == 1
    stopLevel := calcStopLossPrice(sl)
    strategy.exit("x", loss = sl, profit = tp3, comment = "sl or tp3")
else if curStage == 2
    stopLevel := calcStopLossPrice(0)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "breakeven or tp3")
else if curStage == 3
    stopLevel := calcStopLossPrice(-tp1)
    strategy.exit("x", stop = stopLevel, profit = tp3, comment = "tp1 or tp3")
else
    strategy.cancel("x")
    
// this is debug plots for visulalize TP & SL levels
plot(stopLevel > 0 ? stopLevel : na, style = plot.style_linebr)
plot(profitLevel > 0 ? profitLevel : na, style = plot.style_linebr)

Más.