Estrategia cuantitativa de cruce de medias móviles con stop loss y doble beneficio


Fecha de creación: 2023-11-14 16:04:33 Última modificación: 2023-11-14 16:04:33
Copiar: 0 Número de Visitas: 682
1
Seguir
1621
Seguidores

Estrategia cuantitativa de cruce de medias móviles con stop loss y doble beneficio

Descripción general

Esta estrategia utiliza técnicas simples de medias móviles cruzadas y paradas dobles para controlar el riesgo y aumentar la probabilidad de obtener ganancias. La estrategia es adecuada para operaciones a corto y medio plazo y puede capturar oportunidades cuando la tendencia cambia.

Principio de estrategia

La estrategia se basa en el cruce de EMA y WMA para determinar el movimiento del mercado. Cuando la EMA está por encima de la WMA, haga más; cuando la EMA está por debajo de la WMA, haga menos.

Cada vez que se abre una posición, la estrategia establece dos niveles de parada. El primer nivel de parada se fija en el precio de apertura de la posición + 20 puntos, el segundo nivel de parada se fija en el precio de apertura de la posición + 40 puntos.

Cuando el precio toque el primer nivel de parada, se cancela la mitad de la posición. La posición restante se mantiene, se busca el segundo nivel de parada o se cancela.

Así, cada transacción tiene tres resultados:

  1. El precio desencadena el stop loss, una pérdida directa del 2%.

  2. El precio se activa primero en el primer stop, a la mitad de la posición, para bloquear el 1% de ganancias, y luego continúa funcionando hasta que se detiene, y finalmente se liquida equilibrado, con cero ganancias.

  3. El precio continúa después de la primera parada, luego la segunda parada, y finalmente obtiene un beneficio de 1% + 2% = 3%.

Análisis de las ventajas

La mayor ventaja de esta estrategia de doble parada de pérdidas es que se puede controlar el riesgo y evitar grandes pérdidas en una sola vez. Cuando el mercado es desfavorable, el stop loss puede controlar la pérdida dentro del 2%. Cuando el mercado es soleado, dos niveles de parada pueden obtener más ganancias.

En comparación con una única estrategia de stop loss, la estrategia tiene tres resultados: pérdidas, ganancias y no pérdidas, lo que reduce la probabilidad de un stop loss. Incluso con un stop loss, la pérdida máxima se controla en un 2%. En comparación con la estrategia de stop loss tradicional, esta estrategia de stop loss doble reduce significativamente el DD y mejora la tasa de ganancias.

Otra ventaja es la simplicidad de uso. EMA y WMA son indicadores conocidos y fáciles de entender. La lógica de stop loss es muy clara y fácil de monitorear. Esto hace que las estrategias sean fácilmente aceptadas e implementadas por los principiantes en el comercio cuantitativo.

Análisis de riesgos

A pesar de las ventajas de esta estrategia, existen algunos riesgos a tener en cuenta.

En primer lugar, los EMA y WMA, como indicadores de la media, tienen una capacidad de reconocimiento de la situación de la oscilación más débil. Cuando la tendencia no es clara, puede generar más señales erróneas, lo que lleva a un comercio demasiado frecuente.

En segundo lugar, el punto de parada fijo puede no coincidir con la fluctuación del mercado. Cuando la fluctuación es grande, el stop loss puede ser superado y no servir de protección.

Finalmente, la estrategia no puede responder a eventos inesperados y existe el riesgo de ser arbitraje. Cuando ocurren eventos de noticias importantes, el mercado puede saltar fuertemente y atravesar directamente la línea de parada de suspensión, causando grandes pérdidas.

Dirección de optimización

Se puede optimizar aún más la estrategia en los siguientes aspectos:

  1. Mejorar la señal de entrada. Se puede probar un indicador de línea media o un indicador de tendencia mejor que EMA y WMA para mejorar la calidad de la señal.

  2. Ajuste dinámico de la parada de pérdidas. Se puede ajustar la parada de pérdidas en tiempo real según el ATR, el stop loss móvil, etc., para que pueda seguir dinámicamente el mercado.

  3. Añadir condiciones de filtrado. Se puede agregar el volumen de transacciones o la confirmación de los subíndices antes de la horca de oro, para evitar la estafa. También se puede elegir si se negocia o no según el calendario de eventos importantes.

  4. Optimización de la gestión de la posición. Se puede optimizar el tamaño de la posición específica de cada transacción de acuerdo con los principios de gestión de fondos.

Resumir

En general, esta estrategia es una estrategia de seguimiento de tendencias sencilla y práctica. Utiliza EMA y WMA para formar señales de negociación y controla el riesgo con técnicas de doble parada. En comparación con las estrategias tradicionales, tiene una mayor probabilidad de ganancias y un menor riesgo.

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

//@version=4
strategy("FS ATR & PS (MA)", overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Time Period
start_year   = input(title='Start year'   ,defval=2019)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_hour   = input(title='Start hour '  ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time     = input(title='set end time?',defval=false)
end_year     = input(title='end year'     ,defval=2019)
end_month    = input(title='end month'    ,defval=12)
end_day      = input(title='end day'      ,defval=31)
end_hour     = input(title='end hour'     ,defval=23)
end_minute   = input(title='end minute'   ,defval=59)

// MA
ema_period   = input(title='EMA period',defval=10)
wma_period   = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)

// Entry Condition
longCondition  = 
 crossover(ema,wma) and Buy and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
shortCondition = 
 crossunder(ema,wma) and Sell and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick

long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + c : long_profit_level1  [1]
long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 

// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size  = 1

// Strategy
if longCondition
    strategy.entry("Buy"  , strategy.long, qty=size)
    strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
    strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
    
if shortCondition
    strategy.entry("Sell" , strategy.short, qty=size)
    strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
    strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
    
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level    , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level    , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level   , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level   , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)