이 전략은 이중 EMA 크로스오버 신호, 스톱-로스/테이크-프로프트 관리 및 시간 필터링을 결합한 완전한 거래 시스템이다. 핵심 전략은 시장 트렌드를 포착하기 위해 빠르고 느린 기하급수적 이동 평균 (EMA) 의 크로스오버를 기반으로 하며, 이윤을 취하고 손실을 중지하는 설정을 통해 위험을 제어합니다. 또한 전략에는 특정 시간 범위 내에서 거래를 수행 할 수있는 시간 필터 기능이 포함되어 있습니다.
이 전략은 다음과 같은 핵심 메커니즘에 기반합니다.
이 전략은 종합적인 거래 솔루션을 제공하기 위해 이동 평균 시스템, 위험 관리 및 시간 필터링을 결합한 잘 설계된 트렌드 추적 전략입니다. 이 전략은 다양한 위험 선호도를 가진 거래자에게 적합한 높은 구성성을 제공합니다. 제안된 최적화 방향에 의해 추가 개선의 여지가 있습니다. 핵심은 엄격한 위험 통제를 유지하면서 실제 시장 조건과 개인 거래 목표를 기반으로 매개 변수를 조정하는 것입니다.
/*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)