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.
La lógica central de esta estrategia es juzgar la fuerza relativa de las acciones individuales frente al mercado, específicamente:
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.
Las principales ventajas de la estrategia de impulso relativo:
También hay algunos riesgos con la estrategia de impulso relativo:
Estos riesgos se pueden gestionar mediante una obtención razonable de beneficios, paradas de pérdidas, ajustes de parámetros, etc.
La estrategia de impulso relativo se puede optimizar principalmente a partir de los siguientes aspectos:
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)