Estrategia de toma de ganancias y deslizamiento paso a paso


Fecha de creación: 2023-11-28 16:05:24 Última modificación: 2023-11-28 16:05:24
Copiar: 0 Número de Visitas: 778
1
Seguir
1619
Seguidores

Estrategia de toma de ganancias y deslizamiento paso a paso

Descripción general

Esta estrategia es una estrategia de salida que utiliza un stop-loss escalonado combinado con un stop-loss deslizante. Tras alcanzar el primer stop-loss, el stop-loss se traslada al punto de equilibrio de pérdidas y al punto de equilibrio de pérdidas, tras alcanzar el segundo stop-loss, el stop-loss se traslada al primer stop-loss, lo que permite un mecanismo de stop-loss deslizante escalonado. Esto puede bloquear parte de las ganancias y mantener un gran espacio para las ganancias.

Principio de estrategia

Esta estrategia se desarrolla principalmente a través de las siguientes partes:

  1. Establece un punto de parada y 3 puntos de parada.
  2. La función de cálculo que define el número de ganancias y el precio de parada actual.
  3. La función de juicio que define la etapa de ganancia.
  4. Modificar el precio de stop loss para lograr un stop loss en el punto de deslizamiento en diferentes etapas de ganancia.

Concretamente, primero se establece una distancia de parada de pérdida de 100 puntos y tres distancias de parada de 100/200/300 puntos. Luego se define una función para calcular el valor de ventaja basado en el precio actual y el precio de apertura de la posición.curProfitInPts, y la función que calcula el precio de parada en función de la distancia de puntoscalcStopLossPrice

La lógica clave es quegetCurrentStageFunción que determina si hay una posición en el momento y si el número de ganancias ha superado un punto de parada, si se supera, se pasa a la siguiente etapa. Por ejemplo, se pasa a la segunda etapa después de alcanzar el punto de parada 100, se pasa a la tercera etapa después de alcanzar el punto de parada 200.

Finalmente, se modifica el precio de parada en función de las etapas, lo que permite un punto de parada deslizante. En la primera etapa, el punto de parada se mantiene en la configuración original, en la segunda etapa se mueve a un equilibrio de pérdidas y ganancias, y en la tercera etapa se mueve al primer punto de parada.

Análisis de las ventajas

Esta estrategia de puntos de parada escalonados tiene las siguientes ventajas:

  1. Se puede bloquear una parte de las ganancias, mientras se mantiene un mayor margen de beneficio posterior.
  2. El uso de paradas de deslizamiento para rastrear los precios reduce la posibilidad de retroceder PRODID o perder.
  3. El riesgo de estiramiento múltiple es mejor controlado que el de estiramiento único.
  4. La lógica de la estrategia es clara, sencilla y fácil de entender.

Análisis de riesgos

La estrategia también tiene ciertos riesgos:

  1. La parada por etapas puede ocasionar la imposibilidad de detenerse a tiempo y perderse el punto de salida. Se puede optimizar mediante el ajuste del número de puntos de parada.
  2. La configuración de la amplitud de deslizamiento demasiado grande puede causar que el stop loss se active demasiado pronto. Se pueden probar diferentes amplitudes de deslizamiento.
  3. La imposibilidad de detener los pérdidas también conlleva un mayor riesgo de pérdidas. Se puede considerar el detener rápidamente en ciertas circunstancias.

Dirección de optimización

La estrategia puede ser optimizada en las siguientes direcciones:

  1. Prueba de diferentes distancias de frenado y parámetros de optimización.
  2. En casos excepcionales, se debe considerar el mecanismo de suspensión rápida.
  3. Determinación de paradas y paradas de pérdidas en combinación con el juicio de los indicadores técnicos.
  4. Optimización de la amplitud del punto de deslizamiento para equilibrar el frenado y el frenado.
Código Fuente de la Estrategia
/*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)