Esta estrategia es un sistema de comercio de indicadores multi-técnicos que utiliza principalmente el cruce de la EMA, las condiciones de sobreventa del RSI y la cruz dorada del MACD para la confirmación del comercio. Emplea órdenes de límite dinámicas para la entrada y múltiples mecanismos de salida para la gestión de riesgos. La estrategia utiliza promedios móviles exponenciales (EMA) de 9 períodos y 21 períodos como indicadores de tendencia primarios, combinados con el índice de fuerza relativa (RSI) y la divergencia de convergencia de promedio móvil (MACD) para filtrar las señales comerciales.
La lógica básica de negociación incluye los siguientes componentes clave:
La estrategia utiliza órdenes límite para la entrada para lograr mejores precios de entrada y combina múltiples indicadores técnicos para mejorar la precisión de las operaciones.
Esta es una estrategia de negociación de múltiples indicadores bien estructurada que identifica tendencias utilizando promedios móviles, filtra señales con RSI y MACD, y controla el riesgo a través de órdenes límite y mecanismos de parada múltiples. Las fortalezas de la estrategia se encuentran en su fiabilidad de la señal y control de riesgos integral, aunque enfrenta desafíos con el retraso de la señal y la optimización de parámetros. Hay un margen significativo de mejora a través del ajuste dinámico de parámetros y indicadores auxiliares adicionales. Es adecuado para inversores conservadores en condiciones de mercado de tendencia.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-09 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SMA 9 & 21 with RSI and MACD Buy Strategy", overlay=true) // Inputs for Simple Moving Averages sma_short = ta.ema(close, 9) sma_long = ta.ema(close, 21) // Plotting SMA plot(sma_short, color=color.green, title="SMA 9") plot(sma_long, color=color.red, title="SMA 21") // RSI Calculation rsi_length = input.int(14, title="RSI Length") rsi_threshold = input.int(70, title="RSI Threshold") rsi = ta.rsi(close, rsi_length) // MACD Calculation macd_fast = input.int(8, title="MACD Fast Length") macd_slow = input.int(18, title="MACD Slow Length") macd_signal = input.int(6, title="MACD Signal Length") [macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal) // Inputs for Limit Order Offset limit_offset = input.int(50, title="Limit Order Offset", minval=1) // 50 points below 9 EMA // User input for specific date simulationStartDate = input(timestamp("2024-12-01 00:00"), title="Simulation Start Date", group = "Simulation Dates") simulationEndDate = input(timestamp("2024-12-30 00:00"), title="Simulation End Date", group = "Simulation Dates") // Declare limit_price as float var float limit_price = na // Calculate Limit Order Price if (sma_short[1] < sma_long[1] and sma_short > sma_long) // 9 EMA crosses above 21 EMA limit_price := sma_short - limit_offset // Buy Signal Condition (only on the specified date) buy_condition = not na(limit_price) and rsi < rsi_threshold and ta.crossover(macd_line, signal_line) // Sell Signal Condition (MACD crossover down) sell_condition = ta.crossunder(macd_line, signal_line) // Track Entry Price for Point-Based Exit var float entry_price = na if (buy_condition ) strategy.order("Buy", strategy.long, comment="Limit Order at 9 EMA - Offset", limit=limit_price) label.new(bar_index, limit_price, "Limit Buy", style=label.style_label_up, color=color.green, textcolor=color.white) entry_price := limit_price // Set entry price // Exit Conditions exit_by_macd = sell_condition exit_by_points = not na(entry_price) and ((close >= entry_price + 12) or (close <= entry_price - 12)) // Adjust as per exit points // Exit all positions at the end of the day if hour == 15 and minute > 10 and strategy.position_size > 0 strategy.close_all() // Close all positions at the end of the day strategy.cancel_all() // Exit based on sell signal or point movement if (exit_by_macd or exit_by_points and strategy.position_size > 0 ) strategy.close("Buy") label.new(bar_index, close, "Close", style=label.style_label_down, color=color.red, textcolor=color.white)