La estrategia de impulso relativo

El autor:¿ Qué pasa?, Fecha: 2024-01-29 08:38:04
Las etiquetas:

img

Resumen general

La estrategia de impulso relativo compara el impulso de acciones e índices individuales para juzgar la fuerza relativa de las acciones al mercado en general. Compra cuando el impulso de las acciones es mayor que el del índice y vende cuando el impulso de las acciones es menor que el del índice, con el fin de capturar el pico de crecimiento de las acciones individuales.

Principios

La lógica central de esta estrategia es juzgar la fuerza relativa de las acciones individuales frente al mercado, específicamente:

  1. Calcular el rendimiento durante un período de tiempo como el impulso de la acción
  2. Calcular el rendimiento del índice durante el mismo período que el impulso del índice
  3. Utilice la media móvil para suavizar el impulso de las acciones e índices
  4. Cuando la media móvil del impulso de las acciones cruza por encima de la del índice, el impulso de las acciones se considera más fuerte que el mercado en general, es decir, la señal de compra
  5. Cuando el promedio móvil del momento de las acciones se cruza por debajo del promedio móvil del momento del índice, el momento de las acciones se considera más débil, lo que activa la señal de venta

A través de esta lógica, podemos comprar acciones cuando su crecimiento está floreciendo y vender cuando el impulso de crecimiento se desvanece, bloqueando el exceso de rendimientos durante el período de pico de crecimiento de las acciones.

Análisis de ventajas

Las principales ventajas de la estrategia de impulso relativo:

  1. Puede capturar dinámicamente el pico de crecimiento de las existencias sin tener en cuenta las condiciones específicas del mercado - sólo comprar cuando el crecimiento de las existencias supera el mercado general
  2. El suavizado con medias móviles filtra las fluctuaciones a corto plazo y mejora la fiabilidad de la señal
  3. Condiciones de compra y venta directas y sencillas, fáciles de entender y operar
  4. Flexibilidad para configurar el período de tiempo para calcular el momento relativo y optimizar

Análisis de riesgos

También hay algunos riesgos con la estrategia de impulso relativo:

  1. Las existencias pueden retroceder después de que termine el pico de crecimiento, lo que supone un riesgo insuficiente de obtener beneficios
  2. Las señales de momento relativo pueden ser falsas, identificando un pico falso en lugar de real
  3. Necesidad de establecer la pérdida de parada para controlar la pérdida máxima

Estos riesgos se pueden gestionar mediante una obtención razonable de beneficios, paradas de pérdidas, ajustes de parámetros, etc.

Direcciones de optimización

La estrategia de impulso relativo se puede optimizar principalmente a partir de los siguientes aspectos:

  1. Prueba diferentes períodos de tiempo para calcular el impulso para encontrar óptimo
  2. Pruebe diferentes tipos y longitudes de medias móviles para obtener los mejores parámetros
  3. Añadir un filtro de volumen para evitar fallas falsas debido a la falta de momento
  4. Incorporar otros indicadores para confirmar el momento óptimo de entrada

Conclusión

La estrategia de impulso relativo captura las fases de crecimiento excesivo de las acciones individuales en comparación con el mercado general para generar alfa. Con su lógica de compra / venta simple y clara y su facilidad de operación, y cuando se combina con la optimización de parámetros y el control de riesgos, esta estrategia puede funcionar muy bien.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)

Más.