Estrategia de ruptura del indicador de doble impulso


Fecha de creación: 2023-11-16 17:00:54 Última modificación: 2023-12-01 14:59:44
Copiar: 1 Número de Visitas: 648
1
Seguir
1617
Seguidores

Estrategia de ruptura del indicador de doble impulso

Descripción general

La estrategia es una estrategia de ruptura de dos indicadores de movimiento. Utiliza dos indicadores de movimiento con diferentes parámetros para generar una señal de negociación cuando ambos indicadores de movimiento rompen el eje cero. La estrategia solo hace entradas múltiples y las cabezas vacías solo se usan para la posición en blanco.

Principio de estrategia

El código primero establece las propiedades de la política, como el modo de encargo, el modo de comisión, etc. Luego calcula dos indicadores de dinámica:

// Momentum settings

i_len           = input(defval = 12, title = "Length", minval = 1) 
i_src           = input(defval = close, title = "Source")
i_percent       = input(defval = true, title = "Percent?")
i_mom           = input(defval = "MOM2", title = "MOM Choice", options = ["MOM1", "MOM2"])

// Momentum code

mom0 = momentum(i_src, i_len, i_percent) 
mom1 = momentum(mom0, 1, i_percent)
mom2 = momentum(i_src, 1, i_percent)

momX = mom1 

if i_mom == "MOM2"
    momX := mom2

mom0 es el indicador de la dinámica básica, la longitud es i_len, la fuente de datos es i_src, si se calcula el porcentaje depende de i_percent.

mom1 es un indicador de dinámica de longitud 1 con mom0 como fuente de datos.

mom2 es un indicador de dinámica de longitud 1 con fuentes de datos primarias i_src.

Por defecto, el indicador de la dinámica momX es mom1, pero también se puede elegir mom2。

Cuando mom0 y momX están a la vez por encima del eje 0 se hace un plus; cuando mom0 y momX están a la vez por debajo del eje 0, se hace un saldo.

Ventajas estratégicas

  1. El uso de un indicador de doble dinámica combinado con diferentes configuraciones de parámetros puede mejorar la fiabilidad de las señales de negociación, y la doble confirmación reduce las señales falsas.

  2. Hacer solo entradas múltiples, las cabezas vacías solo se usan para cerrar posiciones, puede reducir la frecuencia de las transacciones y reducir los costos de las transacciones.

  3. Los parámetros del índice de dinámica se pueden ajustar para adaptarse a diferentes entornos de mercado.

  4. La estructura del código es clara, fácil de entender y modificar.

  5. Se ha añadido la configuración de mensajes de transacciones, que se puede utilizar en combinación con el sistema de operaciones automáticas.

Riesgo estratégico

  1. El indicador de la dinámica binaria, aunque puede reducir las señales falsas, también puede perder señales de tendencia más débiles.

  2. Si solo haces transacciones con más de un cliente, podrías perder la oportunidad de hacer transacciones con menos de un cliente.

  3. La configuración incorrecta de los parámetros del indicador de dinámica puede causar transacciones demasiado frecuentes o demasiado lentas.

  4. Los datos de detección insuficientes pueden causar una sobreajuste de los parámetros.

  5. La doble confirmación reduce las señales falsas, pero no las evita por completo, por lo que se debe tener en cuenta la efectividad de la ruptura en las transacciones en vivo.

Dirección de optimización de la estrategia

  1. Se puede probar una combinación de parámetros de diferentes longitudes y si se calcula el porcentaje para encontrar el mejor parámetro.

  2. Se puede considerar agregar una señal de negociación en blanco después de la confirmación de la tendencia para capturar más oportunidades de negociación.

  3. Se pueden probar diferentes métodos de cálculo de índices de dinámica, como ROC, RSI, etc., para encontrar mejores resultados.

  4. El filtro de tendencias se puede combinar para evitar el comercio en situaciones de crisis.

  5. Se puede optimizar la estrategia de detener las pérdidas y controlar el riesgo al tiempo que se maximiza la ganancia.

Resumir

Esta estrategia es una estrategia típica de ruptura de indicadores de doble dinámica. Utiliza doble confirmación para reducir las señales falsas y solo hace entradas múltiples para reducir la frecuencia de las operaciones. La estrategia es simple, clara y fácil de implementar, con mucho espacio para mejorar la optimización de los parámetros y el control del riesgo.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Long Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.long)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  =true

// Momentum settings

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

// Messages for buy and sell
message_buy  = input("{{strategy.order.alert_message}}", title="Buy message")
message_sell = input("{{strategy.order.alert_message}}", title="Sell message")

// Momentum code

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2
    
// Strategy Alerts    

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE", alert_message = message_buy)
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomExit", strategy.short, stop = low - syminfo.mintick, comment = "MomSE", alert_message = message_sell)
else
	strategy.cancel("MomExit")
	
// Plotting

plot(0, color = #5d606b, title = "ZERO")
plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")