
La estrategia es un sistema de negociación que combina varios indicadores técnicos para abrir posiciones basadas principalmente en la confirmación de la triple señal de cruce de la línea media EMA, sobreventa RSI y el tenedor de oro MACD, y para administrar el riesgo a través de un mecanismo de entrada y salida múltiple en el precio de límite dinámico. La estrategia utiliza una media móvil de índice de 9 y 21 períodos como indicador de tendencia principal, combinada con un índice relativamente débil (RSI) y una media móvil de tendencia detrás del indicador (MACD) para filtrar las señales de negociación, y para controlar el riesgo mediante el establecimiento de una distancia de precio de límite y un número fijo de puntos de parada y pérdida.
La lógica de transacción central de la estrategia incluye las siguientes partes clave:
Las estrategias de entrada única de precio limitado permiten establecer posiciones en mejores posiciones de precios y mejorar la precisión de las operaciones mediante la combinación de múltiples indicadores técnicos.
Esta es una estrategia de negociación multi-indicadores estructurada y lógica, que identifica tendencias a través de un sistema uniforme, filtra las señales RSI y MACD, controla el riesgo de las órdenes de precios límite y los mecanismos de parada múltiple. La ventaja de la estrategia reside en la alta fiabilidad de la señal, el control de riesgo es perfecto, pero también hay problemas como el retraso de la señal y la optimización de los parámetros.
/*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)