Tendencia de seguimiento de la estrategia basada en la distancia con pérdida de parada de seguimiento

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

img

Resumen general

Esta estrategia utiliza el indicador Distance Close Bars (DCB) para determinar la tendencia de precios y el indicador RSI rápido como filtro, implementa el stop loss de seguimiento para la tendencia después de la negociación. También utiliza el principio de martingale para el tamaño de la posición. Adecuado para la negociación de tendencias a mediano y largo plazo.

Principios

  1. Calcular el lastg y el lastr que representan el cierre de la última barra verde y el cierre de la última barra roja.

  2. Calcular dist como la diferencia entre lastg y lastr.

  3. Calcular el adist como SMA de 30 períodos de dist.

  4. Generar una señal comercial cuando dist es mayor que 2 veces adist.

  5. Utilice el indicador RSI rápido para filtrar la señal, evitando una falsa ruptura.

  6. Entrar en operaciones a un porcentaje fijo del capital si la señal no presenta ninguna posición.

  7. Martingale para escalar después de la pérdida.

  8. Posición cerrada cuando se activa el stop loss o el take profit.

Ventajas

  1. El indicador DCB refleja eficazmente las tendencias a medio y largo plazo.

  2. El filtro RSI rápido evita las pérdidas por fallas.

  3. El trailing stop bloquea los beneficios y controla los riesgos.

  4. Martingale aumenta la posición después de la pérdida para obtener un mayor beneficio.

  5. Los parámetros razonables se adaptan a los diferentes entornos del mercado.

Los riesgos

  1. DCB puede generar señales equivocadas, necesita otros filtros.

  2. Martingale puede amplificar las pérdidas, requiere una estricta gestión de riesgos.

  3. La configuración incorrecta de stop loss puede llevar a pérdidas excesivas.

  4. El tamaño de las posiciones debe limitarse para evitar el exceso de apalancamiento.

  5. Las configuraciones incorrectas del contrato pueden llevar a una gran pérdida en el mercado extremo.

Optimización

  1. Optimice los parámetros del DCB para la mejor combinación.

  2. Pruebe otros indicadores para reemplazar el filtro RSI rápido.

  3. Optimice el stop loss y tome ganancias para una mayor tasa de ganancias.

  4. Optimice los parámetros de Martingale para reducir el riesgo.

  5. Prueba en diferentes productos para una mejor asignación de activos.

  6. Utilice el aprendizaje automático para optimizar dinámicamente los parámetros.

Resumen de las actividades

Esta es una estrategia general de seguimiento de tendencia madura. DCB determina la dirección de la tendencia y filtra rápidamente las señales RSI para evitar entradas incorrectas. Stop loss and take profit controla efectivamente la pérdida de una sola operación. Pero todavía hay riesgos, los parámetros necesitan una mayor optimización para reducir el riesgo y mejorar la estabilidad. La lógica es clara y fácil de entender, adecuada para los traders de tendencia a medio y largo plazo.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi = input(true, defval = true, title = "Use RSI-Filter")
periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), periodrsi)
fastdown = rma(-min(change(close), 0), periodrsi)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Distance
bar = close > open ? 1 : close < open ? -1 : 0
lastg = bar == 1 ? close : lastg[1]
lastr = bar == -1 ? close : lastr[1]
dist = lastg - lastr
adist = sma(dist, 30)
plot(lastg, linewidth = 3, color = lime)
plot(lastr, linewidth = 3, color = red)
up = bar == -1 and dist > adist * 2
dn = bar == 1 and dist > adist * 2

//RSI Filter
rsidn = fastrsi < limitrsi or usersi == false
rsiup = fastrsi > 100 - limitrsi or usersi == false

//Signals
up1 = up and rsidn
dn1 = dn and rsiup
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open))

//Arrows
plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue)
plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

signalup = up1
if signalup
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

signaldn = dn1
if signaldn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Más.