Đây là một chiến lược giao dịch định lượng vượt qua EMA. Nó sử dụng hai EMA với các khoảng thời gian khác nhau làm tín hiệu giao dịch, đi dài khi EMA ngắn hơn vượt qua EMA dài hơn và đi ngắn khi EMA ngắn hơn vượt qua dưới EMA dài hơn. Nó thuộc về các chiến lược theo xu hướng. Chiến lược này cũng đặt dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro.
Chiến lược này sử dụng đường chéo vàng và đường chéo chết của EMA làm tín hiệu giao dịch. Cụ thể, nó tính toán EMA ngắn hạn và EMA dài hạn tương ứng. Khi EMA ngắn hạn vượt qua EMA dài hạn, nó tạo ra tín hiệu mua để đi dài. Khi EMA ngắn hạn vượt qua dưới EMA dài hạn, nó tạo ra tín hiệu bán để đi ngắn. Vì vậy, xu hướng chuyển động của EMA xác định hướng giao dịch.
Sau khi nhập vào các vị trí, chiến lược cũng thiết lập stop loss và take profit đồng thời. Stop loss là một tỷ lệ phần trăm nhất định của giá nhập như đường stop loss. Nếu giá chạm vào đường stop loss, nó sẽ thoát khỏi vị trí để dừng lỗ. Take profit là một tỷ lệ phần trăm nhất định của giá nhập như đường take profit. Nếu giá chạm vào đường take profit, nó sẽ thoát khỏi vị trí để lấy lợi nhuận.
Chiến lược này cũng cho phép chọn chỉ giao dịch dài, chỉ ngắn, giao dịch trong ngày hoặc giao dịch vị trí.
Chiến lược này có những lợi thế sau:
Sử dụng chỉ số EMA để lọc tiếng ồn và nắm bắt xu hướng trung dài hạn trơn tru.
Sử dụng các giao dịch giao dịch qua đường EMA giữa các khoảng thời gian ngắn hơn và dài hơn như là tín hiệu giao dịch để tránh giao dịch quá mức.
Thiết lập dừng lỗ và lấy lợi nhuận để kiểm soát tỷ lệ rủi ro-lợi nhuận của mỗi giao dịch, điều này là tốt cho quản lý tiền.
Cho phép chỉ giao dịch dài, chỉ giao dịch ngắn, giao dịch trong ngày và giao dịch vị trí phù hợp với các loại thương nhân khác nhau.
Hỗ trợ nhiều tài sản giao dịch như cổ phiếu, ngoại hối, tiền điện tử vv
Chiến lược này cũng có một số rủi ro tiềm ẩn:
Chỉ số EMA có hiệu ứng chậm trễ và có thể bỏ lỡ một số điểm chuyển hướng ngắn hạn.
Các lựa chọn không phù hợp của các khoảng thời gian EMA ngắn hơn và dài hơn có thể gây ra các tín hiệu giao dịch lộn xộn.
Giữ các vị trí quá lâu có thể chịu biến động thị trường lớn hơn.
Stop loss và take profit cơ học có thể thoát khỏi các vị trí quá sớm hoặc làm giảm lợi nhuận sớm.
Các phép đo quản lý rủi ro tương ứng:
Tối ưu hóa các thông số EMA để tìm kết hợp thời gian tốt nhất.
Thêm các chỉ số khác như một đánh giá phụ trợ.
Điều chỉnh stop loss và lấy lợi nhuận một cách động.
Hành động thủ công trong điều kiện thị trường bất thường.
Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:
Tối ưu hóa tốt nhất các thông số EMA để tìm các kết hợp ngắn và dài phù hợp cho các tài sản giao dịch khác nhau.
Thêm các chỉ số khác như MACD, KD cho sự hợp tác đa chỉ số.
Thêm các mô hình học máy để tạo ra stop loss động và lấy lợi nhuận.
Kết nối các chỉ số RISK tiên tiến hơn cho kỹ thuật tính năng.
Thêm các thành phần giao dịch thích nghi để tự tối ưu hóa tham số.
Tóm lại, đây là một xu hướng tuyệt vời sau mẫu chiến lược. Sức mạnh cốt lõi của nó nằm trong việc sử dụng chỉ số EMA để lọc tiếng ồn và đạt được lợi nhuận ổn định, trong khi sở hữu quản lý rủi ro - phần thưởng toàn diện. Thông qua tối ưu hóa liên tục, chiến lược này có thể trở thành một chiến lược định lượng phổ quát trên các thị trường và có giá trị cho các nhà giao dịch học và thực hành.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover Strategy by Vikrant Singh", overlay=true) // Input for EMA Lengths var bool runningPOS = false var float stopLossLevel = na var float targetLevel = na shortLength = input(11, title="Short EMA Length") longLength = input(21, title="Long EMA Length") // Input for Stop-Loss and Target stopLossPct = input(1, title="Stop-Loss (%)") targetPct = input(3, title="Target (%)") longOnly = input(true, title="Long Only") intraDay = input(true, title="intraday?") // Calculate EMAs emaShort = ta.ema(close, shortLength) emaLong = ta.ema(close, longLength) // Calculate crossover conditions crossoverCondition = ta.crossover(emaShort, emaLong) crossunderCondition = ta.crossunder(emaShort, emaLong) // Entry condition (long position just before crossover) if crossoverCondition and not runningPOS and longOnly and (hour <= 15) strategy.entry("Long", strategy.long) runningPOS := true stopLossLevel := close * (1 - stopLossPct / 100) targetLevel := close * (1 + targetPct / 100) //Entry condition (short position just before crossover) if crossunderCondition and not runningPOS and not longOnly and (hour <= 15) strategy.entry("Short", strategy.short) runningPOS := true stopLossLevel := close * (1 + stopLossPct / 100) targetLevel := close * (1 - targetPct / 100) // Exit conditions (square off on reverse crossover) //Exit long if (crossunderCondition or (low < stopLossLevel) or (high > targetLevel) ) and longOnly and runningPOS strategy.close("Long",comment = "Exit long")// ("Long", from_entry="Long",stop=stopLossLevel, limit=targetLevel) runningPOS := false //Exit short if (crossoverCondition or (high > stopLossLevel) or (low < targetLevel) ) and not longOnly and runningPOS strategy.close("Short", comment = "Exit Short") runningPOS := false if intraDay and runningPOS if (hour >= 15) strategy.close_all(comment = "Intraday square off") //strategy.close("Long",comment = "intraday square off") runningPOS := false // Plot EMAs plot(emaShort, color=color.blue, title="Short EMA") plot(emaLong, color=color.red, title="Long EMA")