本策略是一个结合了双均线交叉信号、止盈止损管理以及时间过滤的完整交易系统。策略核心基于快速与慢速指数移动平均线(EMA)的交叉来捕捉市场趋势,并通过设置止盈(Take Profit)和止损(Stop Loss)来控制风险。同时,策略还包含了时间过滤功能,使交易者能够在特定的时间范围内执行交易。
策略运作基于以下核心机制: 1. 使用两条不同周期(默认为5和21)的指数移动平均线 2. 当快速EMA向上穿越慢速EMA时,系统产生做多信号 3. 当快速EMA向下穿越慢速EMA时,系统产生做空信号 4. 每个交易都设置了百分比止损和止盈水平 5. 交易方向可以灵活配置为:仅做多、仅做空或双向交易 6. 包含时间过滤功能,只在指定的时间范围内执行交易 7. 系统会在关键时刻(开仓、触及止损/止盈)发出警报
这是一个设计完善的趋势跟踪策略,通过结合均线系统、风险管理和时间过滤,为交易者提供了一个全面的交易解决方案。策略的可配置性强,适合不同风险偏好的交易者使用。通过建议的优化方向,策略还有进一步提升的空间。关键是要根据实际市场情况和个人交易目标来调整参数,并始终保持严格的风险控制。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Estrategia Cruce de EMAs con: Stop Loss, Take Profit, Días de Operación y Alertas (Modificables)", overlay=true, commission_value = 0.2, process_orders_on_close = true, initial_capital = 1000)
// Parámetros de las EMAs
emaRapidaLen = input.int(5, title="Periodo EMA rápida")
emaLentaLen = input.int(21, title="Periodo EMA lenta")
// Parámetros de Stop Loss y Take Profit
stopLoss = input.float(3.0, title="Stop Loss (%)", step=0.1) / 100
takeProfit = input.float(6.0, title="Take Profit (%)", step=0.1) / 100
// Tipo de operación: Largo, Corto o Ambos
operacion = input.string(title="Tipo de operación", defval="Largo", options=["Largo", "Corto", "Ambos"])
// Parámetros de la duración de la estrategia (días)
diasInicio = input(timestamp("2009-01-03 00:00"), title="Fecha de inicio (YYYY-MM-DD HH:MM)")
diasFin = input(timestamp("2024-09-11 00:00"), title="Fecha de fin (YYYY-MM-DD HH:MM)")
// Comprobar si estamos dentro del rango de días definido
dentroDeRango = true
// Cálculo de las EMAs
emaRapida = ta.ema(close, emaRapidaLen)
emaLenta = ta.ema(close, emaLentaLen)
// Condiciones para cruce de EMAs
cruceAlcista = ta.crossover(emaRapida, emaLenta)
cruceBajista = ta.crossunder(emaRapida, emaLenta)
// Operaciones en Largo (solo si estamos en el rango de días definido)
if dentroDeRango and (operacion == "Largo" or operacion == "Ambos") and cruceAlcista
strategy.entry("Compra", strategy.long)
alert("Posición larga abierta: Cruce alcista de EMAs", alert.freq_once_per_bar_close)
// Operaciones en Corto (solo si estamos en el rango de días definido)
if dentroDeRango and (operacion == "Corto" or operacion == "Ambos") and cruceBajista
strategy.entry("Venta", strategy.short)
alert("Posición corta abierta: Cruce bajista de EMAs", alert.freq_once_per_bar_close)
// Cálculo del Stop Loss y Take Profit para largos
if (strategy.position_size > 0 and strategy.opentrades.entry_id(strategy.opentrades - 1) == "Compra")
strategy.exit("Cerrar Compra", "Compra", stop=strategy.position_avg_price * (1 - stopLoss), limit=strategy.position_avg_price * (1 + takeProfit))
alert("Posición larga cerrada: Alcanzado Stop Loss o Take Profit", alert.freq_once_per_bar_close)
// Cálculo del Stop Loss y Take Profit para cortos
if (strategy.position_size < 0 and strategy.opentrades.entry_id(strategy.opentrades - 1) == "Venta")
strategy.exit("Cerrar Venta", "Venta", stop=strategy.position_avg_price * (1 + stopLoss), limit=strategy.position_avg_price * (1 - takeProfit))
alert("Posición corta cerrada: Alcanzado Stop Loss o Take Profit", alert.freq_once_per_bar_close)
// Plot de las EMAs
plot(emaRapida, color=color.blue, title="EMA rápida", linewidth = 2)
plot(emaLenta, color=color.red, title="EMA lenta", linewidth = 2)