
Эта стратегия является системой для отслеживания трендов, основанной на 110-дневных и 200-дневных перекрестных скользящих средних индексов (EMA). Стратегия определяет рыночные тенденции, наблюдая за пересечением краткосрочных ЭМА по долгосрочным ЭМА, и управляет риском в сочетании с механизмом остановки убытков. После подтверждения сигнала тренда система автоматически выполняет соответствующие операции по бортовой торговле, одновременно контролируя риск удержания позиции в реальном времени.
Основная логика стратегии основана на преемственности ценовых тенденций, чтобы поймать сигнал перехода на тренд через перекрестку EMA110 и EMA200. При пересечении долгосрочной средней линии (EMA200) на краткосрочной средней линии (EMA110) образуется тенденция к росту, и система выдает многосигнал; при пересечении долгосрочной средней линии (EMA200) на краткосрочной средней линии (EMA110) образуется тенденция к снижению, и система выдает пустой сигнал.
Стратегия управляет рисками, используя равнолинейный перекрестный захват трендов и в сочетании с механизмом остановки убытков. Общая конструкция разумна и логически строга. Хотя она может плохо работать на колеблющихся рынках, она может быть еще более стабильной и прибыльной с помощью рекомендуемого направления оптимизации.
/*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)