Chiến lược này sử dụng hai tham số khác nhau của chỉ số di chuyển trung bình ((EMA), làm nhiều hơn khi đi qua EMA dài hạn trên EMA ngắn hạn; khi đi qua EMA dài hạn dưới EMA ngắn hạn, bằng phẳng. Chiến lược này sử dụng EMA ngắn hạn để phản ứng nhanh hơn với sự thay đổi giá và EMA dài hạn để phản ánh xu hướng, sử dụng EMA chéo để tạo ra tín hiệu giao dịch.
Chiến lược này bắt đầu bằng việc xác định hai đường trung bình EMA, với độ dài EMA1 là 10 và độ dài EMA2 là 21. Sau đó, tính giá trị của hai đường trung bình. Khi EMA1 vượt qua EMA2, báo hiệu giá bắt đầu phá vỡ lên, thuộc về tín hiệu nhiều; khi EMA1 vượt qua EMA2, báo hiệu giá giảm xuống đường trung bình EMA, thuộc về tín hiệu ngang.
Để lọc các đột phá giả, mã cũng xác định một ngưỡng, và công thức tính toán là:
threshold = ((ema1 - ema2)*100) / ((ema1 + ema2)/2)
Mức rào này thể hiện tỷ lệ phần trăm của khoảng cách giữa hai đường trung bình so với giá trị trung bình của đường trung bình. Khi ngưỡng lớn hơn 0,15% là tín hiệu nhiều, khi nhỏ hơn -0,006 là tín hiệu yên.
Tóm lại, các tín hiệu giao dịch của chiến lược này là:
Chiến lược này có những ưu điểm sau:
Sử dụng đường trung bình EMA có thể làm mịn dữ liệu giá, có lợi cho việc tạo ra tín hiệu giao dịch.
Dual EMA đặt các tham số khác nhau, có thể đạt được sự cân bằng về tốc độ đáp ứng và ổn định.
Tăng threshold có thể lọc các vụ phá vỡ giả mạo và tránh các giao dịch vô nghĩa.
Các chiến lược này rất đơn giản, dễ hiểu và phù hợp cho người mới bắt đầu giao dịch số lượng.
Có thể điều chỉnh linh hoạt các tham số EMA và giá trị ngưỡng để tối ưu hóa hiệu quả của chiến lược.
Chiến lược này cũng có một số rủi ro:
Đường trung bình của EMA bị tụt hậu so với giá, có thể bỏ lỡ cơ hội hoạt động ngắn.
Có nguy cơ bị giam giữ và có thể gây thiệt hại lớn hơn nếu xu hướng thay đổi.
Thiết lập threshold không đúng có thể lọc tín hiệu có hiệu lực hoặc phát ra tín hiệu sai.
Các tham số EMA không phù hợp, EMA ngắn hạn và dài hạn không có sự khác biệt đặc trưng rõ ràng, tạo ra tín hiệu sai.
Các biến động lớn có thể dẫn đến dừng lỗ và bị phá vỡ, nên thiết lập dừng lỗ hợp lý.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa tham số EMA, kiểm tra ảnh hưởng của các tham số khác nhau về hiệu quả chiến lược.
Tối ưu hóa threshold, cân bằng các tín hiệu lọc giả và duy trì tín hiệu có hiệu lực.
Thêm các chỉ số kỹ thuật khác, như MACD, KDJ, và nhiều hơn nữa, để đánh giá tổng hợp các tín hiệu giao dịch.
Tham gia vào các cơ chế dừng lỗ, có thể là dừng di chuyển hoặc dừng một lần để kiểm soát tổn thất đơn lẻ.
Có thể xem xét thêm phương pháp xây dựng nhà kho theo lô để giảm nguy cơ nhập cảnh đơn lẻ.
Kiểm tra thời gian giữ vị trí khác nhau để tìm chu kỳ giữ vị trí phù hợp hơn.
Chiến lược giao dịch EMA có một số ưu điểm, nhưng cũng cần lưu ý đến một số rủi ro tiềm ẩn. Có thể đạt được hiệu quả chiến lược tốt hơn thông qua các phương pháp tối ưu hóa tham số, thiết lập dừng lỗ và lọc tín hiệu. Chiến lược này phù hợp để học và thực hành như là chiến lược nhập cảnh cho giao dịch định lượng hợp tác.
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
if high > ta.highest(high[1], 5)
strategy.entry("Enter Long", strategy.long)
else if low < ta.lowest(low[1], 5)
strategy.entry("Enter Short", strategy.short)//@version=3
strategy(title="ema10-21", shorttitle="10/21", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 2500, commission_type = strategy.commission.percent, commission_value = 0.2)
len1 = input(10, minval=1, title="EMA #1 length")
src1 = input(close, title="EMA Source #1")
a = ta.ema(src1, len1)
plot(a, title="EMA #1", color=color.orange, linewidth=2, style=plot.style_line)
len2 = input(21, minval=1, title="EMA #2 length")
src2 = input(close, title="EMA Source #2")
b = ta.ema(src2, len2)
plot(b, title="EMA #2", color=color.blue, linewidth=2, style=plot.style_line)
threshold = ((a-b)*100)/((a+b)/2)
thresholdUp = threshold > 0.15
thresholdDown = threshold < -0.006
if (thresholdUp)
strategy.entry("Buy", strategy.long)
if (thresholdDown)
strategy.close("Buy", strategy.long)
//goLong() => (crossover(a, b)) and (threshold >= 0.0025)
//killLong() => (crossunder(a, b)) and (threshold <= -0.0025)
//strategy.entry("Buy", strategy.long, when = goLong())
//strategy.close("Buy", when = killLong())
//threshold = ((a-b)*100)/((a+b)/2)
//achat = out1 > out2
//vente = out1 < out2 //and threshold < -0.025
//strategy.entry("long", true, when = achat)
//strategy.exit("exit", "long", when = vente)