
Chiến lược này là một hệ thống giao dịch theo dõi xu hướng dựa trên các đường trung bình di chuyển 110 ngày và 200 ngày của chỉ số ((EMA). Chiến lược đánh giá xu hướng thị trường bằng cách quan sát EMA ngắn hạn so với EMA dài hạn và kiểm soát rủi ro kết hợp với hệ thống dừng lỗ. Sau khi xác nhận tín hiệu xu hướng, hệ thống sẽ tự động thực hiện các hoạt động giao dịch đa chiều tương ứng, đồng thời giám sát rủi ro giữ vị trí trong thời gian thực.
Lập luận cốt lõi của chiến lược dựa trên đặc tính liên tục của xu hướng giá, bằng cách thu thập tín hiệu chuyển hướng bằng cách giao chéo giữa EMA110 và EMA200. Khi đường trung bình ngắn hạn (EMA110) vượt qua đường trung bình dài hạn (EMA200), cho thấy xu hướng tăng, hệ thống phát ra nhiều tín hiệu; khi đường trung bình ngắn hạn vượt qua đường trung bình dài hạn, cho thấy xu hướng giảm, hệ thống phát ra tín hiệu trống. Để kiểm soát rủi ro, chiến lược sẽ đặt mức dừng lỗ 1% và mức dừng 0.5% cho mỗi lần mở vị trí để bảo vệ cả lợi nhuận và giới hạn tổn thất có thể xảy ra.
Chiến lược này quản lý rủi ro bằng cách nắm bắt xu hướng chéo bằng đường thẳng và kết hợp với cơ chế dừng lỗ, thiết kế hợp lý và logic nghiêm ngặt. Mặc dù có thể hoạt động kém trong thị trường biến động, nhưng bằng hướng tối ưu hóa được đề xuất, bạn có thể nâng cao hơn nữa sự ổn định và khả năng lợi nhuận của chiến lược. Chiến lược phù hợp cho các nhà đầu tư trung và dài hạn theo đuổi thu nhập ổn định.
/*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)