Este artículo explica en detalle una estrategia de negociación cuantitativa que combina tanto la inversión media como las técnicas de seguimiento de tendencias.
I. Lógica de la estrategia
La estrategia utiliza principalmente el indicador Simple Moving Average y RSI para generar señales comerciales:
Cuando el precio está por debajo de la SMA de 200 períodos, juzga el mercado actual como tendencia bajista.
Cuando el RSI está por debajo de 20, se toman operaciones de reversión de la media contra tendencia.
Cuando el precio está por encima de la SMA de 200 períodos, juzga el mercado actual como tendencia alcista.
Cuando el precio cruza por encima de la SMA, se requieren operaciones de seguimiento de tendencia.
Las salidas se activan cuando el RSI excede el 80 o el precio cae por debajo de la SMA en un cierto porcentaje.
El dimensionamiento de la posición para la reversión media y el seguimiento de la tendencia se puede ajustar por separado.
La estrategia combina técnicas de reversión media y de seguimiento de tendencias y las aplica en diferentes etapas del mercado.
II. Ventajas de la Estrategia
Las principales ventajas son:
La combinación de dos técnicas mejora la adaptabilidad de la estrategia.
Puede encontrar oportunidades comerciales en mercados de tendencias y variantes.
Los riesgos pueden controlarse ajustando el tamaño de las posiciones.
Las configuraciones de parámetros simples lo hacen fácil de implementar.
III. Riesgos potenciales
Sin embargo, los riesgos son:
Los indicadores como SMA y RSI son susceptibles a las fallas.
Puede haber retraso en el cambio entre dos modos.
Ciertas reducciones deben soportarse para obtener beneficios a largo plazo.
IV. Resumen
En resumen, este artículo ha explicado una estrategia cuantitativa que utiliza la reversión media y las técnicas de seguimiento de tendencias. Puede operar en diferentes etapas del mercado para mejorar la adaptabilidad. Pero se deben gestionar riesgos como el fallo del indicador y el cambio de modo retardado. En general, proporciona un enfoque flexible para combinar diferentes técnicas.
/*backtest start: 2022-09-07 00:00:00 end: 2023-04-05 00:00:00 period: 1d basePeriod: 1h 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/ // © I11L //@version=5 strategy("Mean Reversion and Trendfollowing", overlay=true, pyramiding=1, default_qty_value=100000, initial_capital=100000, default_qty_type=strategy.cash, process_orders_on_close=false, calc_on_every_tick=false) // Input for the starting date start_date = input(timestamp("1 Feb 2000 12:00"), title="Starting Date") enableMeanReversion = input.bool(true) enableTrendfollowing = input.bool(true) trendPositionFactor = input.float(1) meanReversionPositionFactor = input.float(0.5) // Convert the input string to a timestamp start_ts = timestamp(year(start_date), month(start_date), dayofmonth(start_date), 0, 0) // Check if the current bar's time is greater than or equal to the start timestamp start_condition = time >= start_ts var tradeOrigin = "" sma200 = ta.sma(close,200) rsi2 = ta.rsi(close,2) isMeanReversionMode = close < sma200 or not(enableTrendfollowing) isTrendfollowingMode = close > sma200 or not(enableMeanReversion) isRsiBuy = rsi2 < 20 and enableMeanReversion isRsiClose = rsi2 > 80 and enableMeanReversion isSmaBuy = close > sma200 and enableTrendfollowing isSmaClose = close < sma200 * 0.95 and enableTrendfollowing isBuy = (isMeanReversionMode and isRsiBuy) or (isTrendfollowingMode and isSmaBuy) positionSizeFactor = isSmaBuy ? trendPositionFactor : meanReversionPositionFactor // Only execute the strategy after the starting date if (start_condition) if (isBuy and strategy.opentrades == 0) tradeOrigin := isSmaBuy ? "SMA" : "RSI" strategy.entry("My Long Entry Id", strategy.long, qty=(strategy.equity / close) * positionSizeFactor, comment=str.tostring(positionSizeFactor)) isClose = tradeOrigin == "SMA" ? isSmaClose : isRsiClose if (isClose) strategy.exit("Exit", limit = close) plot(sma200) plot(sma200 * 0.95, color=color.orange)