Chiến lược giao dịch thuật toán Double Moving Average Golden Cross và Death Cross


Ngày tạo: 2024-01-29 15:11:58 sửa đổi lần cuối: 2024-01-29 15:11:58
sao chép: 0 Số nhấp chuột: 590
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch thuật toán Double Moving Average Golden Cross và Death Cross

Tổng quan

Chiến lược giao dịch giao dịch số lượng sử dụng các giao dịch số lượng để đánh giá các giao dịch vào và ra. Chiến lược này kết hợp các đường trung bình của các chu kỳ khác nhau để tạo ra nhiều lớp lọc, có thể làm giảm hiệu quả các tín hiệu giả và tăng độ tin cậy của tín hiệu giao dịch.

Nguyên tắc chiến lược

Lập luận cốt lõi của chiến lược này là theo dõi 2 đường trung bình di chuyển trong 3 chu kỳ thời gian: 180 phút, 60 phút, 120 phút (đường 10 ngày và đường 200 ngày). Khi đường nhanh đi qua đường chậm từ phía dưới, nó sẽ tạo ra tín hiệu nén vàng, đại diện cho sự chuyển đổi của giống vào nhiều đầu; khi đường nhanh đi qua đường chậm từ phía trên xuống, nó sẽ tạo ra tín hiệu nén chết, đại diện cho sự chuyển đổi của giống vào không đầu.

Chiến lược này bắt đầu bằng cách tính toán đường 10 ngày và đường 200 ngày trong chu kỳ 180 phút và 60 phút. Khi đường 10 ngày 180 phút đi qua đường 200 ngày từ phía dưới, tạo ra tín hiệu vàng; khi đi qua từ phía trên xuống, tạo ra tín hiệu chết. Điều này tương đương với tín hiệu giao dịch trong chu kỳ nhanh.

Sau đó, chiến lược giới thiệu đường 200 ngày trong chu kỳ 120 phút làm đường kiểm soát. Chỉ khi có sự cố của Gold Fork hoặc Dead Fork, quyết định bắt đầu giao dịch bằng cách đánh giá xem đường 200 ngày trong chu kỳ 60 phút có cao hơn hoặc thấp hơn đường 200 ngày trong chu kỳ 120 phút để loại bỏ một số tín hiệu giả.

Ví dụ, khi 180 phút tạo ra một cái nĩa vàng, nếu đường 200 phút của 60 phút cao hơn đường 200 phút của 120 phút, hãy nhìn nhiều hơn; chỉ trong điều kiện này, nhiều đơn sẽ được mở. Ngược lại, nếu đường 200 phút của 60 phút thấp hơn đường 200 phút của 120 phút, đừng nhìn nhiều và không mở.

Tóm lại, chiến lược này tạo ra nhiều lớp lọc bằng cách so sánh các mối quan hệ trung bình của các chu kỳ thời gian khác nhau, do đó cải thiện độ tin cậy của tín hiệu, thuộc loại chiến lược giao dịch lọc phổ biến.

Lợi thế chiến lược

  • Xác nhận nhiều chu kỳ, tăng độ chính xác của tín hiệu. So với phán đoán một chu kỳ, chiến lược này sử dụng mối quan hệ trung bình của ba chu kỳ 180 phút, 60 phút và 120 phút để xác nhận, có thể làm giảm đáng kể tín hiệu giả và cải thiện chất lượng tín hiệu giao dịch.

  • Tần số hoạt động vừa phải. Tần số giao dịch của chiến lược này thấp hơn so với chiến lược giao dịch tần số cao, không cần hoạt động thường xuyên và phù hợp hơn với kế toán thủ công.

  • Thực hiện đơn giản, dễ hiểu. Chiến lược này chỉ sử dụng chỉ số trung bình, không có logic phức tạp, rất dễ hiểu thực hiện, ngưỡng thấp, phù hợp với người mới bắt đầu thực hành.

  • Có thể tối ưu hóa cho các chu kỳ và tham số khác nhau. Chu kỳ và loại đường trung bình trong chiến lược có thể được điều chỉnh, có thể nghiên cứu các kết hợp tham số phù hợp với các giống và môi trường thị trường khác nhau.

Rủi ro chiến lược

  • Hệ thống đường thẳng bị chậm trễ, không thể bắt kịp sự đảo ngược nhanh chóng. Chiến lược này phụ thuộc chủ yếu vào mối quan hệ đường thẳng, phản ứng với sự thay đổi giá có một sự chậm trễ, dễ dàng bỏ lỡ sự đảo ngược nhanh chóng.

  • Thị trường dễ bị dừng khi có sự biến động lớn. Khi thị trường có sự biến động lớn, mối quan hệ trung bình có thể xuyên qua, dẫn đến việc mở và dừng vị trí thường xuyên. Điều này làm tăng chi phí giao dịch và rủi ro mất mát.

  • Quá phụ thuộc vào tối ưu hóa tham số, dễ bị quá phù hợp. Chiến lược này chủ yếu đạt được alpha thông qua tối ưu hóa tham số, sự phụ thuộc vào kết quả của một tập dữ liệu duy nhất có thể dẫn đến vấn đề tối ưu hóa và quá phù hợp.

Các giải pháp đối phó với rủi ro như sau:

  • Cắt giảm tham số đường trung bình một cách thích hợp, tăng tốc độ phản ứng.

  • Tăng các điều kiện lọc để tránh việc mở các vị trí thường xuyên trong thị trường biến động.

  • Kiểm tra dữ liệu của các giống và khoảng thời gian khác nhau để đánh giá tính ổn định của tham số.

Hướng tối ưu hóa chiến lược

Chiến lược này vẫn có thể được tối ưu hóa hơn nữa:

  • Cố gắng với sự kết hợp khác nhau của chu kỳ và tham số đường trung bình để tìm các tham số tốt hơn. Bạn có thể tìm các tham số tốt hơn thông qua các phương pháp tối ưu hóa và học máy.

  • Thêm xác nhận Volume và các chỉ số xu hướng cấp độ lớn. Điều này có thể lọc thêm các tín hiệu sai lệch, chẳng hạn như không mở vị trí khi không đủ Volume.

  • Kết hợp với mô hình học sâu dự đoán đường cong. Sử dụng mô hình học sâu như RNN để dự đoán giá trong tương lai, hỗ trợ quyết định.

  • Sử dụng đường trung bình thích ứng, cải thiện logic lọc. Khi thị trường đi vào trạng thái chấn động, điều chỉnh động chiều dài đường trung bình, giảm tần suất mở vị trí.

Tóm tắt

Chiến lược giao dịch của thuật toán giao dịch hai dòng bằng nhau bằng cách so sánh mối quan hệ bằng nhau trong các chu kỳ thời gian khác nhau, thiết lập nhiều lớp lọc, có thể cải thiện chất lượng tín hiệu giao dịch một cách hiệu quả, là một chiến lược giao dịch thuật toán lọc phổ biến. Chiến lược này dễ thực hiện, phù hợp cho người mới bắt đầu học, cũng có thể mở rộng và tối ưu hóa đa chiều, đáng để nghiên cứu và ứng dụng sâu hơn.

Mã nguồn chiến lược
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)

bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false

MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)

MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)

MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)

if MA23Crossover
    startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
    lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
    label.set_y(lblBull, MA2)  
    strategy.close("go Short")
    strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
    //not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
    startSHORTBOTandDEAL := true
    lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
    label.set_y(lblBull, MA2)
    strategy.close("go Long")
    strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
    if MA2 >= MA3
        openLONG := true
        lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.entry("go Long", strategy.long, comment="go Long")
    if MA2 <= MA3
        closeSHORT := true
        lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.close("go Short")
    
if MA12Crossunder
    if MA2 >= MA3
        closeLONG := true
        lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.close("go Long")
    if MA2 <= MA3
        openSHORT := true
        lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.entry("go Short", strategy.short, comment="go Short")


plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")


alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")