
Chiến lược này là một hệ thống giao dịch thông minh dựa trên giao dịch hai chiều ngang, sử dụng đường trung bình di chuyển chỉ số 9 chu kỳ và 21 chu kỳ ((EMA) làm chỉ số cốt lõi. Chiến lược này tích hợp cơ chế dừng lỗ động, tự động thực hiện lệnh giao dịch bằng cách theo dõi tín hiệu giao dịch của chỉ số EMA theo thời gian thực. Hệ thống sử dụng phần trăm theo dõi dừng lỗ và chương trình dừng tỷ lệ cố định, đảm bảo an toàn giao dịch và đảm bảo khả năng kiếm lợi nhuận.
Lịch lý cốt lõi của chiến lược hoạt động dựa trên mối quan hệ chéo giữa EMA (9) nhanh và EMA (21) chậm. Khi đường nhanh đi lên vượt qua đường chậm, hệ thống nhận ra là tín hiệu mua, tự động xóa bỏ và mở nhiều vị trí; khi đường nhanh đi xuống vượt qua đường chậm, hệ thống nhận ra là tín hiệu mua giảm, tự động xóa bỏ nhiều vị trí và mở nhiều vị trí. Đồng thời, hệ thống cũng thiết lập một cơ chế dừng lỗ động: trong quá trình giữ nhiều vị trí, giá dừng lỗ được đặt ở mức 5% dưới giá mở vị trí, giá dừng lỗ được đặt ở mức 10% trên giá mở vị trí; trong quá trình giữ vị trí trống, giá dừng lỗ được đặt ở mức 5% trên giá mở vị trí và giá dừng lỗ được đặt ở mức 10% dưới giá mở vị trí.
Chiến lược này là một hệ thống giao dịch tự động có cấu trúc, logic rõ ràng. Quyết định giao dịch được thực hiện thông qua tín hiệu giao chéo EMA, kết hợp với cơ chế dừng lỗ động, có thể đạt được hiệu suất tốt hơn trong thị trường xu hướng. Tuy nhiên, trong quá trình sử dụng, cần chú ý đến sự thay đổi của môi trường thị trường, điều chỉnh cài đặt tham số phù hợp và kiểm soát rủi ro.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Cross Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// 添加策略参数设置
var showLabels = input.bool(true, "显示标签")
var stopLossPercent = input.float(5.0, "止损百分比", minval=0.1, maxval=20.0, step=0.1)
var takeProfitPercent = input.float(10.0, "止盈百分比", minval=0.1, maxval=50.0, step=0.1)
// 计算EMA
ema9 = ta.ema(close, 9)
ema21 = ta.ema(close, 21)
// 绘制EMA线
plot(ema9, "EMA9", color=color.blue, linewidth=2)
plot(ema21, "EMA21", color=color.red, linewidth=2)
// 检测交叉
crossOver = ta.crossover(ema9, ema21)
crossUnder = ta.crossunder(ema9, ema21)
// 格式化时间显示 (UTC+8)
utc8Time = time + 8 * 60 * 60 * 1000
timeStr = str.format("{0,date,MM-dd HH:mm}", utc8Time)
// 计算止损止盈价格
longStopLoss = strategy.position_avg_price * (1 - stopLossPercent / 100)
longTakeProfit = strategy.position_avg_price * (1 + takeProfitPercent / 100)
shortStopLoss = strategy.position_avg_price * (1 + stopLossPercent / 100)
shortTakeProfit = strategy.position_avg_price * (1 - takeProfitPercent / 100)
// 交易逻辑
if crossOver
if strategy.position_size < 0 // 如果持有空仓
strategy.close("做空") // 先平掉空仓
strategy.entry("做多", strategy.long) // 开多仓
if showLabels
label.new(bar_index, high, text="做多入场\n" + timeStr, color=color.green, textcolor=color.white, style=label.style_label_down, yloc=yloc.abovebar)
if crossUnder
if strategy.position_size > 0 // 如果持有多仓
strategy.close("做多") // 先平掉多仓
strategy.entry("做空", strategy.short) // 开空仓
if showLabels
label.new(bar_index, low, text="做空入场\n" + timeStr, color=color.red, textcolor=color.white, style=label.style_label_up, yloc=yloc.belowbar)
// 设置止损止盈
if strategy.position_size > 0 // 多仓止损止盈
strategy.exit("多仓止损止盈", "做多", stop=longStopLoss, limit=longTakeProfit)
if strategy.position_size < 0 // 空仓止损止盈
strategy.exit("空仓止损止盈", "做空", stop=shortStopLoss, limit=shortTakeProfit)