
La estrategia es una combinación de estrategias que utilizan el RSI, el MACD y las medias móviles. Al determinar el momento de la entrada en el mercado, combina la señal de sobreventa del RSI, la sensibilidad del MACD y el efecto indicador de las medias móviles.
La estrategia se basa en los siguientes cuatro criterios para tomar una decisión sobre una adquisición:
La estrategia se detiene cuando se cumplen las siguientes dos condiciones de salida:
De esta manera, la estrategia se detiene en el momento de la retirada de ganancias, evitando grandes pérdidas.
La mayor ventaja de esta estrategia reside en el uso combinado de indicadores que aprovechan las ventajas de cada uno de ellos, concretamente:
La estrategia tiene dos riesgos principales:
El mayor riesgo de las estrategias de tendencia, como las medias móviles, es el mayor riesgo de retracción provocado por la reversión del mercado. Se puede controlar activamente el retracción reduciendo el tamaño de la posición y la configuración de stop loss.
La optimización de parámetros es muy difícil. La configuración y optimización de los parámetros de la estrategia de combinación de múltiples indicadores son muy difíciles. Se pueden usar métodos de optimización de parámetros como el método progresivo y el algoritmo genético para determinar los parámetros óptimos.
La estrategia puede seguir mejorando en los siguientes aspectos:
Añadir condiciones adicionales para filtrar aún más las falsas señales, como la combinación de indicadores de volumen de transacción, indicadores de volatilidad, etc.
Prueba la diferencia en la configuración de los parámetros de las diferentes variedades. Ajusta los parámetros para adaptarlos a más variedades.
Optimice la configuración de los parámetros de las medias móviles. Pruebe las diferencias entre los parámetros de diferentes longitudes.
El estudio utiliza una media móvil adaptada.
En general, esta estrategia es una versión optimizada de una estrategia de seguimiento de tendencias y promedios móviles. Absorbe los beneficios de varios indicadores principales, como el MACD, el RSI, y es única en la determinación del tiempo de entrada al mercado y el stop loss.
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)
// Inputs
src = input(close, title="RSI Source")
// RSI Settings
lengthRSI = input.int(14, minval=1)
// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")
// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)
// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")
// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")
atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")
// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)
// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)
// Calculate ATR
atr = ta.atr(atrLength)
// Variables
var bool canEnterLong = na
// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr
// Entries and Exits
if hist < exitLevel and emaShort < emaLong
canEnterLong := true
strategy.close("Long")
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
strategy.entry("Long", strategy.long)
canEnterLong := false
lastEntryPrice := close
if lastEntryPrice < close
lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)
// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
last_buy = strategy.opentrades[0]
if (close < stopLossLevel)
strategy.close("Long", comment="Stop Loss Triggered")
if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
strategy.close("Long", comment="Take Profit Triggered")