Esta estrategia utiliza una media móvil rápida de 3 días, una media móvil lenta de 10 días y una media móvil de suavización de la señal de 16 días para construir el indicador MACD, complementado con el indicador RSI y las características de volumen, y establece características multidimensionales de la línea K para determinar la extensión excesiva de la tendencia del mercado, la formación de una tendencia de oscilación de rango y la reversión de entradas largas o cortas para obtener ganancias.
La estrategia tiene como objetivo capturar rápidas reversiones de precios de los niveles locales de sobrecompra o sobreventa.
La estrategia utiliza principalmente un promedio móvil rápido de 3 días menos un promedio móvil lento de 10 días para formar el indicador MACD, con una línea de señal de 16 días para suavizar, constituyendo una estrategia MACD estándar. También combina el análisis de volumen de los volúmenes de compra y venta para determinar las características del impulso.
Específicamente, al observar la relación entre la línea MACD y la línea de señal, así como los cambios de pendiente, determina el flujo y reflujo de las fuerzas alcistas y bajistas para detectar oportunidades de reversión. Al mismo tiempo, los cambios en los volúmenes de compra y venta reflejan cambios en el impulso alcista y bajista. Combinados con los cambios en el indicador RSI para determinar las condiciones de sobrecompra y sobreventa, estos indicadores nos permiten determinar las características del perfil de mercado localizado y el posible momento de reversión.
La estrategia establece tres señales de entrada en total:
Long cuando el volumen de compra no tiene ventaja sobre el volumen de venta, el RSI por debajo de 41 mientras sube, la señal MACD no tiene desviaciones significativas;
Largo cuando el volumen de compra es más fuerte que el volumen de venta, RSI en el rango de 45-55 y en aumento, MACD y línea de señal que se mueven hacia arriba al unísono;
Corto cuando el MACD está por encima del umbral mientras sube.
Estos 3 escenarios reflejan oscilaciones localizadas en una sobreexpansión direccional, juzgadas como un momento de reversión oportuno para las entradas en dirección contraria.
Las salidas se establecen como Take profit (orden de límite) y Stop loss, para controlar las reducciones y obtener ganancias.
La estrategia combina múltiples indicadores para determinar las condiciones de rango y sobrecompra / sobreventa, con una lógica clara de reversión de la toma de ganancias. Utiliza el análisis de volumen para una convicción adicional sobre las entradas.
En concreto, las ventajas incluyen:
El MACD, como oscilador de momento ponderado por volumen, evita el análisis técnico simplista.
Las condiciones de volumen aumentan la convicción de entrada;
El RSI ayuda a detectar posibles reversiones;
El stop loss y el take profit controlan las reducciones excesivas y bloquean algunos beneficios.
A pesar de combinar indicadores para mejorar la tasa de ganancia, todas las estrategias tienen riesgos.
Probabilidad de señales falsas, como continuidades después de la inversión inicial;
Los ajustes inadecuados de stop loss y take profit conducen a extracciones excesivas y a la imposibilidad de fijar las ganancias;
El ajuste de parámetros como las longitudes de MA, los períodos de RSI, las tasas de ganancia pueden necesitar una mayor optimización.
Estos riesgos pueden reducirse mediante una optimización adicional.
Queda espacio para una mayor optimización, principalmente:
Prueba de diferentes combinaciones de parámetros MA para obtener los mejores resultados;
Los periodos de observación del índice de rendimiento de la inversión se analizarán para determinar el juez óptimo de sobrecompra/sobreventa.
Optimizar los ratios de toma de ganancias y de detención de pérdidas para equilibrar las reducciones y la captura de ganancias;
Introduzca modelos de aprendizaje automático, aproveche más datos para reducir los juicios erróneos y mejorar la tasa de ganancia.
A medida que los espacios de parámetros se expanden y los tamaños de la muestra crecen, la tasa de ganancia de la estrategia y la rentabilidad también mejorarán.
Esta estrategia combina el MACD, el RSI y el análisis de volumen para determinar las características de los rangos del mercado, estableciendo entradas en zonas de reversión para capturar los movimientos de retroceso. La lógica es clara, equilibrando la tendencia y las reversiones.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false) signalBiasValue = input(title="Signal Bias", defval=0.26) macdBiasValue = input(title="MACD Bias", defval=0.7) shortLookBack = input( title="Short LookBack", defval=3) longLookBack = input( title="Long LookBack", defval=6) takeProfit = input( title="Take Profit", defval=2) stopLoss = input( title="Stop Loss", defval=0.7) fast_ma = ta.sma(close, 3) slow_ma = ta.sma(close, 10) macd = fast_ma - slow_ma signal = ta.sma(macd, 16) hline(0, "Zero Line", color = color.black) buyVolume = volume*((close-low)/(high-low)) sellVolume = volume*((high-close)/(high-low)) buyVolSlope = buyVolume - buyVolume[1] sellVolSlope = sellVolume - sellVolume[1] signalSlope = ( signal - signal[1] ) macdSlope = ( macd - macd[1] ) plot(macd, color=color.blue, title="Total Volume") plot(signal, color=color.orange, title="Total Volume") plot(macdSlope, color=color.green, title="MACD Slope") plot(signalSlope, color=color.red, title="Signal Slope") intrabarRange = high - low rsi = ta.rsi(close, 14) rsiSlope = rsi - rsi[1] plot(rsiSlope, color=color.black, title="RSI Slope") getRSISlopeChange(lookBack) => j = 0 for i = 0 to lookBack if ( rsi[i] - rsi[ i + 1 ] ) > -5 j += 1 j getBuyerVolBias(lookBack) => j = 0 for i = 1 to lookBack if buyVolume[i] > sellVolume[i] j += 1 j getSellerVolBias(lookBack) => j = 0 for i = 1 to lookBack if sellVolume[i] > buyVolume[i] j += 1 j getVolBias(lookBack) => float b = 0.0 float s = 0.0 for i = 1 to lookBack b += buyVolume[i] s += sellVolume[i] b > s getSignalBuyerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] > signalBiasValue j += 1 j getSignalSellerBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < ( 0.0 - signalBiasValue ) j += 1 j getSignalNoBias(lookBack) => j = 0 for i = 1 to lookBack if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue ) j += 1 j getPriceRising(lookBack) => j = 0 for i = 1 to lookBack if close[i] > close[i + 1] j += 1 j getPriceFalling(lookBack) => j = 0 for i = 1 to lookBack if close[i] < close[i + 1] j += 1 j getRangeNarrowing(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] < intrabarRange[i + 1] j+= 1 j getRangeBroadening(lookBack) => j = 0 for i = 1 to lookBack if intrabarRange[i] > intrabarRange[i + 1] j+= 1 j bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0 bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0 bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0 bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0 bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0 bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0 bool hasSignalBias = math.abs(signal) >= signalBiasValue bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue ) bool hasSignalBuyerBias = hasSignalBias and signal > 0.0 bool hasSignalSellerBias = hasSignalBias and signal < 0.0 bool hasPositiveMACDBias = macd > macdBiasValue bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue ) bool hasBullAntiPattern = ta.crossunder(macd, signal) bool hasBearAntiPattern = ta.crossover(macd, signal) bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 ) bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 ) // 202.30 Profit 55.29% 5m if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open) strategy.entry("5C1", strategy.long, qty=1) strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 171.70 Profit 50.22% 5m if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0) strategy.entry("5C2", strategy.long, qty=1) strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss) // 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades if ( macd > macdBiasValue and macdSlope > 0) strategy.entry("5P1", strategy.short, qty=1) strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)