Chiến lược Golden Cross của EMA

Tác giả:ChaoZhang, Ngày: 2023-09-18 21:18:17
Tags:

Tổng quan

Chiến lược EMA Golden Cross là một chiến lược giao dịch định lượng phổ biến. Nó sử dụng hai đường trung bình chuyển động theo cấp số nhân (EMA) với các thông số khác nhau. Khi EMA ngắn hơn vượt qua EMA dài hơn, nó sẽ đi dài. Khi EMA ngắn hơn vượt qua dưới EMA dài hơn, nó sẽ đóng vị trí. Chiến lược này sử dụng phản ứng nhanh hơn của EMA ngắn hơn và khả năng theo xu hướng của EMA dài hơn để tạo ra tín hiệu giao dịch.

Chiến lược logic

Chiến lược đầu tiên xác định hai EMA, ema1 với chiều dài 10 và ema2 với chiều dài 21. Sau đó nó tính toán các giá trị của hai EMA. Khi ema1 vượt qua trên ema2, nó báo hiệu đột phá lên, đó là một tín hiệu dài. Khi ema1 vượt qua dưới ema2, nó báo hiệu sự phá vỡ thông qua các EMA, đó là một tín hiệu vị trí gần.

Để lọc các sự đột phá sai, mã cũng xác định một giá trị ngưỡng, được tính như sau:

threshold = ((ema1 - ema2)*100) / ((ema1 + ema2)/2) 

Mức ngưỡng này đại diện cho tỷ lệ phần trăm khoảng cách EMA so với mức trung bình EMA. Khi ngưỡng trên 0,15%, đó là tín hiệu dài. Khi ngưỡng dưới -0,006%, đó là tín hiệu vị trí gần.

Tóm lại, các tín hiệu giao dịch của chiến lược này là:

  • Tín hiệu dài: ema1 vượt qua ema2, và ngưỡng >= 0,15%
  • Tín hiệu vị trí gần: ema1 vượt dưới ema2, và ngưỡng <= -0,006%

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Sử dụng EMA có thể làm mịn dữ liệu giá và giúp tạo ra các tín hiệu giao dịch.

  2. Cấu trúc EMA kép cân bằng khả năng đáp ứng và ổn định.

  3. Mức ngưỡng lọc các vụ phá vỡ sai và tránh các giao dịch không cần thiết.

  4. Chiến lược logic là đơn giản và rõ ràng, phù hợp cho người mới bắt đầu.

  5. Các thông số EMA và ngưỡng có thể được tối ưu hóa.

Phân tích rủi ro

Những rủi ro của chiến lược này bao gồm:

  1. Các EMA tụt lại sau giá và có thể bỏ lỡ các cơ hội ngắn hạn.

  2. Rủi ro bị mắc kẹt khi xu hướng đảo ngược, có khả năng dẫn đến tổn thất lớn.

  3. Mức ngưỡng không chính xác có thể lọc các tín hiệu hợp lệ hoặc tạo ra các tín hiệu sai.

  4. Nếu các thông số EMA không phù hợp, hai EMA có thể không cho thấy sự khác biệt đáng kể, tạo ra tín hiệu sai.

  5. Stop loss nên được thiết lập hợp lý để tránh bị phá vỡ bởi những biến động lớn của thị trường.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Tối ưu hóa các thông số EMA và thử nghiệm các khoảng thời gian khác nhau.

  2. Tối ưu hóa giá trị ngưỡng để cân bằng tín hiệu sai và tín hiệu hợp lệ.

  3. Thêm các chỉ số kỹ thuật khác như MACD, KDJ để xác nhận tín hiệu.

  4. Thêm các cơ chế dừng lỗ như lệnh dừng hoặc lệnh OCO để hạn chế lỗ.

  5. Xem xét các mục vị trí một phần để giảm rủi ro.

  6. Kiểm tra các khoảng thời gian giữ khác nhau để tìm thời gian tối ưu.

Kết luận

Chiến lược EMA Golden Cross có logic rõ ràng và đơn giản, sử dụng các đặc điểm của EMA để tạo ra các tín hiệu giao dịch. Chiến lược có một số lợi thế nhất định nhưng rủi ro tiềm ẩn tồn tại. Chiến lược có thể được cải thiện bằng cách tối ưu hóa các tham số, đặt dừng lỗ, lọc tín hiệu vv. Nó phù hợp với chiến lược giao dịch định lượng của người mới bắt đầu.


/*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)

Thêm nữa