Estrategia de stop dinámico de precio


Fecha de creación: 2023-11-27 11:45:04 Última modificación: 2023-11-27 11:45:04
Copiar: 0 Número de Visitas: 627
1
Seguir
1617
Seguidores

Estrategia de stop dinámico de precio

Descripción general

Esta estrategia calcula el indicador de la dinámica de los precios y establece un alto de seguimiento bidireccional largo y corto para bloquear las ganancias, lo que permite el seguimiento de la tendencia. Al mismo tiempo, la estrategia combina los niveles de activación y comienza a seguir los paros solo después de alcanzar la ganancia especificada, lo que puede prevenir los paros prematuros.

Principio de estrategia

Calcula el movimiento de 12 ciclos de precios y luego calcula el movimiento de 1 ciclo de movimiento. Cuando el movimiento rápido (el movimiento de 1 ciclo de movimiento de precios) es mayor que 0 y menor que 0 es más. Así se puede determinar la dirección del cambio de movimiento de precios y dominar la tendencia de los precios.

Configuración de la distancia de seguimiento de la parada de pérdidas y el nivel de activación de la parada de pérdidas. La distancia de seguimiento de la parada de pérdidas es cuando el precio se ejecuta a un nuevo punto alto o bajo y se ajusta la parada a la distancia indicada. La activación de la parada de pérdidas de seguimiento es cuando el seguimiento de la parada de pérdidas debe comenzar después de alcanzar un cierto porcentaje de ganancias.

La estrategia de bloquear las ganancias mediante el seguimiento de los precios más altos o más bajos, y emitir una señal de salida cuando el precio retrocede más allá de la distancia de parada establecida.

Análisis de las ventajas estratégicas

  1. Utilizando el doble movimiento de la determinación, se puede determinar con precisión la dirección de la tendencia de los precios, reducir el número de operaciones y evitar la estafa.

  2. La configuración flexible permite el seguimiento de la distancia de parada para reducir el riesgo y bloquear las ganancias.

  3. Se puede configurar el nivel de activación de seguimiento de la parada de pérdidas, y el mecanismo de parada de pérdidas se activa solo después de alcanzar cierta ganancia, para evitar la parada prematura.

  4. Se puede configurar el nivel de pérdida de múltiples y vacío, para controlar el riesgo.

  5. El proceso de cálculo es simple, eficiente, fácil de entender y de implementar.

Análisis de riesgos estratégicos

  1. La doble determinación de la dinámica puede dar lugar a una señal de reversión, que requiere una combinación de filtros de tendencia.

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

  3. Si el nivel de activación es demasiado alto, se puede perder la oportunidad de detener el daño.

  4. Se necesitan más pruebas y optimizaciones de parámetros para encontrar el punto de parada óptimo.

Se pueden reducir las señales falsas mediante el juicio de tendencias y la optimización de parámetros. Se pueden probar diferentes variedades de contratos y configuraciones de parámetros para encontrar la configuración óptima.

Dirección de optimización de la estrategia

  1. En combinación con los indicadores de identificación de la estructura del mercado, se puede identificar la tendencia a la pérdida de espacio y evitar el comercio inverso.

  2. Se añaden más condiciones de tiempo, como cambios en el volumen de transacciones, brechas en la reducción, etc., para mejorar la precisión de la señal.

  3. Optimización de parámetros para probar el rendimiento de diferentes distancias de frenado y niveles de activación.

  4. Considere la distancia de parada de seguimiento dinámico, que se ajusta automáticamente según la volatilidad del mercado.

  5. Se puede configurar un parón parcial o un parón móvil para controlar aún más el riesgo.

Resumir

La estructura general de esta estrategia es clara, determina la tendencia de los precios a través de indicadores de doble dinámica, establece un stop loss de seguimiento flexible para bloquear los beneficios y controla eficazmente el riesgo de las transacciones. La estrategia es fácil de entender y implementar, y al mismo tiempo hay espacio para optimizar, y agregar más indicadores técnicos y pruebas de parámetros puede mejorar aún más el rendimiento de la estrategia.

Código Fuente de la Estrategia
/*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)