Estrategia de seguimiento del impulso del precio para detener la pérdida

El autor:¿ Qué pasa?, Fecha: 2023-11-27 11:45:04
Las etiquetas:

img

Resumen general

Esta estrategia calcula el impulso del precio para determinar la dirección de la tendencia y establece paradas bidireccionales de seguimiento para bloquear las ganancias, realizando el stop loss siguiendo la tendencia.

Estrategia lógica

Calcula el impulso del precio de 12 períodos, y calcula el impulso del momento de 1 período. Cuando el impulso rápido (momento del momento del precio de 1 período) es mayor que 0, va largo. Cuando es menor que 0, va corto. Esto juzga el cambio de dirección del impulso del precio para determinar la tendencia del precio.

Establece la distancia de parada de seguimiento y el nivel de activación. La distancia de parada de seguimiento se refiere al ajuste de la parada a una distancia especificada desde el máximo o mínimo más reciente cuando el precio alcanza nuevos máximos o mínimos. El nivel de activación significa que la parada de seguimiento comienza solo después de alcanzar una cierta proporción de ganancias.

La estrategia bloquea las ganancias siguiendo el precio más alto o el precio más bajo, enviando órdenes de cierre cuando el precio retrocede más allá de la distancia de parada establecida.

Análisis de ventajas

  1. La determinación del doble impulso juzga con precisión la dirección de la tendencia, reduce las operaciones y evita quedar atrapado.

  2. La distancia de detención flexible reduce el riesgo y bloquea los beneficios.

  3. El nivel de activación evita el stop loss prematuro al permitir el retraso solo después de alcanzar un objetivo de ganancia.

  4. Las paradas bidireccionales controlan de manera integral los riesgos tanto para largos como para cortos.

  5. Cálculo simple y eficiente, fácil de entender e implementar.

Análisis de riesgos

  1. El doble impulso puede generar señales inversas, necesitando un filtro de tendencia.

  2. La distancia excesiva de parada puede causar pérdidas significativas.

  3. Un alto nivel de activación puede perder oportunidades de detención.

  4. Se necesitan más pruebas y optimización de parámetros para encontrar paradas óptimas.

Puede reducir las señales falsas mediante el juicio de tendencia y la optimización de parámetros. Prueba en diferentes productos y conjuntos de parámetros para encontrar la mejor configuración.

Direcciones de optimización

  1. Combinar el reconocimiento de la estructura del mercado para la tendencia, evitando el comercio inverso.

  2. Añadir más condiciones de tiempo como cambios de volumen, apretar breakouts para mejorar la precisión de la señal.

  3. Optimizar los parámetros probando diferentes distancias de parada y niveles de activación.

  4. Considere la parada de seguimiento dinámica según la volatilidad del mercado.

  5. Establecer paradas parciales o paradas en movimiento para un mejor control del riesgo.

Conclusión

La estrategia tiene una estructura clara, juzga la tendencia con doble impulso y bloquea las ganancias con paradas de seguimiento flexibles, controlando eficazmente los riesgos comerciales. Es fácil de entender e implementar, con espacio optimizable. Agregar más indicadores técnicos y pruebas de parámetros puede mejorar aún más el rendimiento de la estrategia. La estrategia proporciona ideas y referencias para realizar la gestión de pérdidas de parada.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trailing Stop Snippet", overlay=true)

length = input(12)
price = close
momentum(seria, length) =>
	mom = seria - seria[length]
	mom
mom0 = momentum(price, length)
mom1 = momentum( mom0, 1)

tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
	strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
	strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
	strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
	strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail    
    strategy.close_all()
if not strategy.opentrades
	array.clear(ts_)

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)

Más.