La estrategia de promedio móvil de ruptura de impulso es una estrategia de negociación de acciones que combina señales de cruce de promedio móvil con indicadores de impulso. La estrategia emplea múltiples indicadores técnicos, incluyendo promedio móvil exponencial (EMA), promedio móvil simple (SMA), promedio móvil convergencia divergencia (MACD), y un índice de fuerza relativa modificado (StockRSI) para generar señales de compra al confirmar una tendencia al alza a largo plazo. Cuando los indicadores de impulso a corto plazo muestran señales de reversión, la estrategia obtiene ganancias.
Los componentes clave de esta estrategia son:
Las operaciones de transferencia de activos de la EMA: Una línea rápida de la EMA de 9 períodos cruza por encima de una línea lenta de la SMA de 21 períodos para activar una señal de compra.
Indicador MACD: El histograma MACD debe ser positivo cuando se combina con la señal de cruce EMA/SMA como confirmación adicional.
Indicador del stockRSI: Las señales se activan cuando el StockRSI está por encima del nivel de sobreventa (80) o por debajo del nivel de sobreventa (20).
Las bandas de Bollinger: Requerir que el precio esté dentro de las bandas donde la banda media es una SMA de 20 períodos y el ancho de las bandas es de dos desviaciones estándar.
Deje de perder y obtenga beneficios: Calculado sobre la base del ATR de 14 períodos.
La estrategia requiere al menos 2 de los 3 indicadores para dar señales de compra, el precio está dentro de las bandas de Bollinger y la tendencia a largo plazo sigue siendo alcista para generar la señal final de compra.
Las principales fortalezas de esta estrategia son:
Excelentes resultados de las pruebas de retroceso: Múltiples indicadores probados conducen a un rendimiento superior al de los indicadores de referencia y de los indicadores individuales.
Parámetros optimizados: Los parámetros clave como los períodos de EMA y las bandas de Bollinger están optimizados para mejorar la estabilidad.
Se aplicará el método de valoración de las pérdidas y ganancias.: Las bandas de Bollinger y ATR permiten un ajuste dinámico de las paradas para un mejor control del riesgo.
Es fácil de aplicar: Una estructura de código limpia y una fácil accesibilidad a los datos dan lugar a operaciones prácticas sencillas.
A pesar del buen desempeño, los principales riesgos incluyen:
Señales falsas: Las fluctuaciones inusuales del mercado o el fallo de los indicadores pueden generar señales incorrectas.
Parámetros insuficientes: Los parámetros inadecuados podrían conducir a una negociación demasiado frecuente o a una sensibilidad insuficiente.
Las pérdidas de detención no apropiadas: Un stop loss demasiado ajustado tiende a detenerse prematuramente, mientras que un stop loss demasiado amplio puede dar lugar a pérdidas excesivas.
Para hacer frente a los riesgos mencionados anteriormente, pueden adoptarse las siguientes medidas:
Intervención manual: En situaciones anormales, las señales pueden comprobarse manualmente, ajustar los parámetros o detener temporalmente las estrategias.
Optimización de parámetros: Se pueden emplear métodos más científicos y objetivos como algoritmos genéticos para la optimización sistemática.
Se trata de los valores de los valores de los instrumentos financieros.El valor de las pérdidas se calculará en función de la variación de las pérdidas.
La estrategia puede mejorarse aún más en los siguientes ámbitos:
Mecanismos más robustos para detener pérdidasSe puede incorporar un stop loss o un stop basado en promedios móviles.
Filtros de volumen: Añadir indicadores de volumen para evitar errores.
Parámetros dinámicos: Optimización automática de parámetros como los períodos de media móvil y el ancho de banda basados en las condiciones cambiantes del mercado.
Aprendizaje automático: LSTM, RNN y otros algoritmos pueden permitir la optimización dinámica de parámetros.
La estrategia de promedio móvil de ruptura de impulso capitaliza las fortalezas de la combinación de múltiples indicadores técnicos y ha logrado una rentabilidad decente con confirmación a largo y corto plazo.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true) // Volatility volatility = ta.atr(14) // EMA/MA Crossover fast_length = 9 slow_length = 21 fast_ma = ta.ema(close, fast_length) slow_ma = ta.sma(close, slow_length) crossover_signal = ta.crossover(fast_ma, slow_ma) // MACD [macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9) macd_signal = crossover_signal and (macdHistogram > 0) // Bollinger Bands source = close basis = ta.sma(source, 20) upper = basis + 2 * ta.stdev(source, 20) lower = basis - 2 * ta.stdev(source, 20) // Fractal-based Support and Resistance levels isFractalHigh = high[2] < high[1] and high[1] > high[0] isFractalLow = low[2] > low[1] and low[1] < low[0] resistance = ta.valuewhen(isFractalHigh, high[1], 0) support = ta.valuewhen(isFractalLow, low[1], 0) // StockRSI length = 14 K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length)) D = ta.sma(K, 3) overbought = 80 oversold = 20 stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought)) // Buy and sell conditions mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0) // Long-term Trend Check long_term_ma = ta.sma(close, 200) long_term_bullish = close > long_term_ma long_term_bearish = close < long_term_ma // Plot the long-term MA for visual clarity plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1) // Simplified Buy and Sell conditions buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper) sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought) // Potential SL and TP based on volatility potential_SL = close - volatility potential_TP = close + 2 * volatility plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr) plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr) // ... (rest of your code above) // State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting var bool inPosition = false var tradeCounter = 0 var tradeCounterDelayed = 0 // Declaration of the variable // Buy logic: Check if tradeCounter is 0 and the buy condition is met if tradeCounter == 0 and buy_condition strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP) inPosition := true tradeCounter := tradeCounter + 1 // Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position if tradeCounter == 1 and inPosition and sell_condition strategy.close("BUY") inPosition := false tradeCounter := tradeCounter - 1 // Update the delayed trade counter: tradeCounterDelayed := tradeCounter // Plotting bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na) plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small) plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small) // ... (rest of your code if any)