Esta estrategia adopta múltiples indicadores como Bollinger Bands, RSI, ADX, MACD para juzgar las tendencias del mercado y tiene una fuerte capacidad de identificación de tendencias.
A través del juicio combinado de múltiples indicadores, puede identificar con precisión las tendencias de precios y realizar un seguimiento oportuno de ellas cuando se produce una tendencia para lograr rendimientos excesivos.
La mayor ventaja de esta estrategia es que el juicio de la combinación de indicadores es más completo y preciso, lo que permite identificar eficazmente las tendencias de precios y evitar señales falsas causadas por indicadores individuales.
En concreto, las ventajas son:
A través del juicio de combinación de indicadores, puede maximizar reducir las señales falsas y mejorar la estabilidad de la estrategia.
Los principales riesgos de esta estrategia provienen de:
En el caso del riesgo 1, la dependencia de múltiples indicadores puede mitigar en cierta medida el problema del fallo de un solo indicador, pero aún es necesario mejorar los mecanismos de gestión del riesgo.
Para el riesgo 2, los parámetros pueden ajustarse adecuadamente a un rango de operaciones estrecho y reducir la frecuencia de operaciones para mitigar los riesgos.
Los principales aspectos que pueden optimizarse de esta estrategia incluyen:
Mediante la optimización continua, mejorar continuamente la robustez de los parámetros y reducir las probabilidades de falsas señales.
En general, esta estrategia tiene una capacidad relativamente fuerte para identificar señales de tendencia a través de juicios de combinación de indicadores que pueden identificar eficazmente las tendencias de precios.
Pero también tiene ciertos riesgos, la gestión de riesgos y la optimización de parámetros deben mejorarse continuamente para operaciones estables a largo plazo.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 00:00:00 period: 5h basePeriod: 15m 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/ // © abilash.s.90 dIMinusCalc(adxLen) => smoothedTrueRange = 0.0 smoothedDirectionalMovementMinus = 0.0 dIMinus = 0.0 trueRange = 0.0 directionalMovementMinus = 0.0 trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) directionalMovementMinus := nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange smoothedDirectionalMovementMinus := nz(smoothedDirectionalMovementMinus[1]) - (nz(smoothedDirectionalMovementMinus[1])/adxLen) + directionalMovementMinus dIMinus := smoothedDirectionalMovementMinus / smoothedTrueRange * 100 dIMinus dIPlusCalc(adxLen) => smoothedTrueRange = 0.0 smoothedDirectionalMovementPlus = 0.0 dIPlus = 0.0 trueRange = 0.0 directionalMovementPlus = 0.0 trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) directionalMovementPlus := high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange smoothedDirectionalMovementPlus := nz(smoothedDirectionalMovementPlus[1]) - (nz(smoothedDirectionalMovementPlus[1])/adxLen) + directionalMovementPlus dIPlus := smoothedDirectionalMovementPlus / smoothedTrueRange * 100 dIPlus Adx(adxLen) => dIPlus = 0.0 dIMinus = 0.0 dX = 0.0 aDX = 0.0 dIPlus := dIPlusCalc(adxLen) dIMinus := dIMinusCalc(adxLen) dX := abs(dIPlus-dIMinus) / (dIPlus+dIMinus)*100 aDX := sma(dX, adxLen) aDX BarInSession(sess) => time(timeframe.period, sess) != 0 //@version=4 strategy("Bollinger Band + RSI + ADX + MACD", overlay=true) //Session session = input(title="Trading Session", type=input.session, defval="0930-1500") sessionColor = BarInSession(session) ? color.green : na bgcolor(color=sessionColor, transp=95) // Bollinger Bands src = input(high, title="Bollinger Band Source", type=input.source) length = input(3, minval=1, type=input.integer, title="Bollinger Band Length") mult = input(4.989, minval=0.001, maxval=50, step=0.001, type=input.float, title="Bollinger Band Std Dev") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev plot(upper, title="Bollinger Band Upper", color=color.red) plot(lower, title="Bollinger Band Lower", color=color.green) // RSI rsiSrc = input(close, title="RSI Source", type=input.source) rsiLength = input(16, minval=1, type=input.integer, title="RSI Length") rsiComparator = input(39.2, title="RSI Comparator", type=input.float, step=0.1) rsi = rsi(rsiSrc, rsiLength) // ADX adxLength = input(14, minval=1, type=input.integer, title="ADX Length") adxComparator = input(14, minval=1, type=input.integer, title="ADX Comparator") adx = Adx(adxLength) // Heikinashi haClose = security(heikinashi(syminfo.ticker), timeframe.period, close) haOpen = security(heikinashi(syminfo.ticker), timeframe.period, open) nextHaOpen = (haOpen + haClose) / 2 //MACD macdCalcTypeProcessed = input(title="MACD Source", type=input.source, defval=high) fast = input(12, title="MACD Fast") slow = input(20, title="MACD Slow") signalLen = input(15, title="MACD Signal") fastMA = ema(macdCalcTypeProcessed, fast) slowMA = ema(macdCalcTypeProcessed, slow) macd = fastMA - slowMA signal = sma(macd, signalLen) longCondition() => (low < lower) and (rsi[0] > rsiComparator) and (adx > adxComparator) and (close > nextHaOpen) and BarInSession(session) and macd > signal stop = (close - max((low - (low * 0.0022)), (close - (close * 0.0032)))) / syminfo.mintick target = (max(upper, (close + (close * 0.0075))) - close) / syminfo.mintick strategy.entry("SX,LE", strategy.long, when=longCondition(), comment="SX,LE") strategy.close_all(when=(not BarInSession(session))) strategy.exit("LX", from_entry="SX,LE", profit=target, loss=stop)