
La estrategia es un sistema de trading de seguimiento de tendencias basado en el cruce de los promedios móviles de 110 y 200 días de los índices (EMA). La estrategia determina la tendencia del mercado observando el cruce de los EMA de corto plazo y los EMA de largo plazo, y combina el mecanismo de parada de pérdidas para controlar el riesgo. Una vez que se confirma la señal de tendencia, el sistema ejecuta automáticamente las operaciones de trading en el aire libre correspondientes, al tiempo que monitorea el riesgo de la posición en tiempo real.
La lógica central de la estrategia se basa en la continuidad de las tendencias de los precios, capturando señales de cambio de tendencia a través de la intersección de EMA110 y EMA200. Cuando se atraviesa la línea media a corto plazo (EMA110) en la línea media a largo plazo (EMA200), se emite una señal múltiple que indica la formación de una tendencia alcista; cuando se atraviesa la línea media a corto plazo en la línea media a largo plazo en la que se muestra una tendencia descendente, se emite una señal de vacío. Para controlar el riesgo, la estrategia establece un stop loss del 1% y un stop loss del 0,5% para proteger los beneficios y limitar las posibles pérdidas en cada posición abierta.
La estrategia gestiona el riesgo mediante la captura de tendencias en cruce de línea uniforme, junto con un mecanismo de parada de pérdidas. La estrategia está diseñada de manera razonable y lógica rigurosa. Aunque puede tener un mal desempeño en mercados convulsos, la estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante la orientación de optimización recomendada.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA110/200 Cross with Stop-Loss and Take-Profit", overlay=true)
// 定义EMA110和EMA200
ema110 = ta.ema(close, 110)
ema200 = ta.ema(close, 250)
// 画出EMA
plot(ema110, color=color.blue, title="EMA110")
plot(ema200, color=color.red, title="EMA200")
// 计算交叉信号
longCondition = ta.crossover(ema110, ema200) // EMA110上穿EMA200,做多
shortCondition = ta.crossunder(ema110, ema200) // EMA110下穿EMA200,做空
// 设置止损和止盈
stopLoss = 0.01 // 止损1%
takeProfit = 0.005 // 止盈0.5%
// 判断是否已有仓位
isLong = strategy.position_size > 0 // 当前是否为多头仓位
isShort = strategy.position_size < 0 // 当前是否为空头仓位
// 执行策略:做多时平空,做空时平多
if (longCondition and not isLong) // 如果满足做多条件并且当前没有多头仓位
if (isShort) // 如果当前是空头仓位,先平空
strategy.close("Short")
strategy.entry("Long", strategy.long) // 执行做多
strategy.exit("Take Profit/Stop Loss", "Long", stop=close * (1 - stopLoss), limit=close * (1 + takeProfit))
if (shortCondition and not isShort) // 如果满足做空条件并且当前没有空头仓位
if (isLong) // 如果当前是多头仓位,先平多
strategy.close("Long")
strategy.entry("Short", strategy.short) // 执行做空
strategy.exit("Take Profit/Stop Loss", "Short", stop=close * (1 + stopLoss), limit=close * (1 - takeProfit))
// 在表格中显示信号
var table myTable = table.new(position.top_right, 1, 1)
if (longCondition and not isLong)
table.cell(myTable, 0, 0, "Buy Signal", text_color=color.green)
if (shortCondition and not isShort)
table.cell(myTable, 0, 0, "Sell Signal", text_color=color.red)