在量化交易领域中,趋势跟踪策略一直是最受欢迎的交易方法之一。本文将介绍一个基于双均线系统的趋势跟踪策略,该策略通过优化的风险收益比来提高交易效率。
该策略采用20日和200日指数移动平均线(EMA)作为主要指标,结合3:1的风险收益比进行交易决策。当价格突破20日均线且20日均线位于200日均线之上时,系统会发出买入信号。每笔交易都设定了固定的止损(-0.5%)和获利(1.5%)水平,以确保风险可控。
策略的核心逻辑包含以下几个关键要素: 1. 使用20日和200日EMA判断市场趋势,200日均线代表长期趋势,20日均线反映短期走势 2. 当价格突破20日均线且20日均线位于200日均线上方时,表明市场处于上升趋势 3. 采用3:1的风险收益比,即止盈点(1.5%)是止损点(0.5%)的3倍 4. 设置变量跟踪交易状态,避免重复进场 5. 当价格跌破20日均线时重置交易状态,为下一次交易做准备
这是一个结构完整、逻辑清晰的趋势跟踪策略。通过结合双均线系统和固定的风险收益比,策略在保证收益的同时也很好地控制了风险。虽然还存在一些需要优化的地方,但整体而言这是一个值得进一步研究和改进的交易系统。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Estrategia de Compra con Ratio 3:1", overlay=true)
// Parámetros de la temporalidad diaria y las EMAs
ema20 = ta.ema(close, 20)
ema200 = ta.ema(close, 200)
// Condiciones para la entrada en largo
cierre_por_encima_ema20 = close > ema20
ema20_mayor_ema200 = ema20 > ema200
// Variable para registrar si ya se realizó una compra
var bool compra_realizada = false
// Condición para registrar una compra: primera vez que cierra por encima de EMA 20 con EMA 20 > EMA 200
if (cierre_por_encima_ema20 and ema20_mayor_ema200 and not compra_realizada)
// Abrir una operación de compra
strategy.entry("Compra", strategy.long)
compra_realizada := true // Registrar que se realizó una compra
// Definir los niveles de stop loss y take profit basados en el ratio 3:1
stop_loss = strategy.position_avg_price * 0.995 // -0.50% (rendimiento)
take_profit = strategy.position_avg_price * 1.015 // +1.50% (3:1 ratio)
// Establecer el stop loss y take profit
strategy.exit("Take Profit / Stop Loss", from_entry="Compra", stop=stop_loss, limit=take_profit)
// Condición para resetear la compra: cuando el precio cierra por debajo de la EMA de 20
if (close < ema20)
compra_realizada := false // Permitir una nueva operación
// Ploteo de las EMAs
plot(ema20, title="EMA 20", color=color.blue, linewidth=2)
plot(ema200, title="EMA 200", color=color.red, linewidth=2)
// Colorear el fondo cuando el precio está por encima de ambas EMAs
bgcolor(cierre_por_encima_ema20 and ema20_mayor_ema200 ? color.new(color.green, 80) : na)