Chiến lược giao dịch định lượng dựa trên Crossover EMA đôi

Tác giả:ChaoZhang, Ngày: 2023-11-21 11:41:40
Tags:

img

Tổng quan

Chiến lược này tạo ra tín hiệu giao dịch bằng cách tính toán sự chéo giữa hai đường EMA của các giai đoạn khác nhau để xác định xu hướng thị trường. Nó sẽ mở các vị trí dài khi EMA thời gian ngắn hơn vượt qua EMA thời gian dài hơn, cho thấy xu hướng tăng, và nó sẽ đóng các vị trí khi EMA thời gian ngắn hơn vượt qua dưới EMA thời gian dài hơn, cho thấy xu hướng giảm.

Nguyên tắc

Chiến lược này chủ yếu áp dụng lý thuyết chéo vàng và chéo chết của đường EMA kép. Các đường EMA kép bao gồm đường EMA dài và đường EMA ngắn. Các thông số EMA ngắn được đặt thành 10 ngày và các thông số EMA dài được đặt thành 21 ngày.

Khi EMA ngắn vượt qua EMA dài, một tín hiệu mua được tạo ra. Khi EMA ngắn vượt qua dưới EMA dài, một tín hiệu bán được tạo ra. Chiến lược cũng thiết lập ngưỡng tốc độ tăng trưởng, chỉ mở các vị trí dài khi tăng trưởng vượt quá ngưỡng dương tính và đóng các vị trí chỉ khi giảm vượt quá ngưỡng âm.

Cụ thể, điều kiện mua là khi EMA ngắn cao hơn EMA dài và tốc độ tăng trưởng cổ phiếu vượt quá ngưỡng dương. Điều kiện vị trí đóng là khi EMA ngắn thấp hơn EMA dài và tốc độ tăng trưởng cổ phiếu giảm xuống dưới ngưỡng âm.

Ưu điểm

  • Sử dụng lý thuyết thánh giá vàng và thánh giá chết của đường EMA đôi để đơn giản và đáng tin cậy
  • Thêm ngưỡng tốc độ tăng trưởng để tránh giao dịch sai lầm trong thời gian tăng trưởng yếu
  • Có thể kiểm soát chặt chẽ tỷ lệ mất mát tối đa
  • Các thông số thời gian EMA có thể được điều chỉnh linh hoạt cho các chu kỳ khác nhau

Phân tích rủi ro

  • Các đường EMA có tác động chậm, có thể thiếu các điểm đảo ngược giá
  • Đường băng đường có một số sự chậm trễ, có thể thiếu các điểm vào tốt nhất
  • Tùy thuộc vào tối ưu hóa tham số, cài đặt không đúng có thể gây ra quá mức giao dịch hoặc tín hiệu không đủ

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

  • Kết hợp với các chỉ số khác như MACD, KD vv để cải thiện độ chính xác tín hiệu
  • Thêm các chiến lược dừng lỗ như dừng lỗ để tối đa hóa lợi nhuận
  • Tối ưu hóa các tham số thời gian EMA cho các thiết lập tốt nhất trên các sản phẩm khác nhau
  • Kết hợp dữ liệu thời gian thực và các phương pháp học máy để điều chỉnh và tối ưu hóa tham số động

Tóm lại

Chiến lược tổng thể tương đối đơn giản và đáng tin cậy, sử dụng đường chéo EMA kép để xác định xu hướng giá và thiết lập ngưỡng tốc độ tăng trưởng để tạo ra tín hiệu giao dịch. So với đường chéo đơn, nó có thể lọc ra một số tín hiệu sai. Nhưng các đường EMA có những vấn đề chậm trễ. Kết hợp các chỉ số khác hoặc điều chỉnh tham số năng động có thể cải thiện hơn nữa hiệu suất chiến lược.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)

Thêm nữa