Chiến lược giao dịch theo dõi thông minh trung bình động kép

Tác giả:ChaoZhangNgày: 2024-02-18 15:58:08
Tags:

img

Tổng quan

Chiến lược giao dịch theo dõi thông minh trung bình động kép là một chiến lược theo xu hướng dựa trên các đường trung bình động và các chỉ số cụ thể. Chiến lược sử dụng hai đường trung bình động với các thiết lập tham số khác nhau để xây dựng một kênh và kết hợp chỉ số OTT để thiết lập giới hạn trên và dưới của kênh để theo dõi xu hướng giá một cách thông minh. Khi giá vượt qua kênh, các hoạt động mua hoặc bán được thực hiện.

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

Phương pháp cốt lõi của chiến lược này là xây dựng một kênh thích nghi bằng cách sử dụng hai đường trung bình động và chỉ số OTT, cụ thể là:

  1. Tính toán đường nhanh MAvg bằng cách sử dụng trung bình động CLOSE và tùy chỉnh như đầu vào, với độ dài 5 giai đoạn;

  2. Tính toán vị trí đường dài LongStop và vị trí đường ngắn ShortStop cho kênh dựa trên MAvg và tỷ lệ phần trăm đã được đặt trước;

  3. Tính toán MT dừng lỗ kênh trong chỉ số OTT và giá kênh OTT dựa trên hướng dài / ngắn;

  4. Tạo tín hiệu giao dịch khi giá vượt qua OTT.

Quá trình trên cho phép theo dõi thời gian thực về sự thay đổi xu hướng giá, tạo ra các tín hiệu giao dịch.

Ưu điểm chiến lược

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

  1. Cấu trúc kênh trung bình di chuyển kép nắm bắt hiệu quả xu hướng giá;
  2. Chỉ số OTT thiết lập kênh dừng lỗ để kiểm soát rủi ro;
  3. Cấu trúc kênh thích nghi phản ứng nhanh chóng với sự thay đổi giá;
  4. Điều chỉnh tham số linh hoạt cho các sản phẩm và khung thời gian khác nhau.

Rủi ro chiến lược

Ngoài ra còn có một số rủi ro:

  1. Các đường trung bình động kép có thể tạo ra sự phân kỳ dẫn đến tín hiệu sai;
  2. Các thiết lập tham số OTT không chính xác có thể quá hung hăng hoặc bảo thủ;
  3. Chiến lược chỉ dựa trên các chỉ số kỹ thuật mà không xem xét các yếu tố cơ bản.

Rủi ro có thể được giải quyết thông qua tối ưu hóa tham số, tích hợp các chỉ số khác và bộ lọc cơ bản.

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

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

  1. Tối ưu hóa các thông số trung bình động cho sản phẩm và khung thời gian thích hợp;
  2. Tối ưu hóa các tham số chiều rộng kênh cân bằng độ nhạy và ổn định;
  3. Thêm bộ lọc dựa trên khối lượng giao dịch;
  4. Đặt bộ lọc hướng dựa trên các nguyên tắc cơ bản.

Tóm lại

Tóm lại, đây là một chiến lược theo xu hướng dựa trên kênh trung bình động kép và chỉ số OTT. Ý tưởng cốt lõi là xây dựng một kênh thích nghi và tạo ra tín hiệu khi giá phá vỡ. Chiến lược có giá trị nhưng cũng có chỗ để cải thiện. Với điều chỉnh tham số và tối ưu hóa logic, nó có tiềm năng trở thành một chiến lược giao dịch lượng hiệu quả đáng triển khai.


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

//@version=4
strategy(title="BugRA_Trade_Strategy", shorttitle="BugRA_Trade_Strategy", overlay=true)

// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close

// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")

// Tarih Filtresi Fonksiyonu
isDateInRange() => true

// Özel Fonksiyonlar
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = sum(vud1, length)
    vDD = sum(vdd1, length)
    vCMO = (vUD - vDD) / (vUD + vDD)
    varResult = 0.0
    varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
    varResult

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    wwma = 0.0
    wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
    wwma

Zlema_Func(src, length) =>
    zxLag = floor(length / 2)
    zxEMAData = src + (src - src[zxLag])
    zlema = ema(zxEMAData, length)
    zlema

Tsf_Func(src, length) =>
    lrc = linreg(src, length, 0)
    lrs = lrc - linreg(src, length, 1)
    tsf = lrc + lrs
    tsf

getMA(src, length) =>
    ma = mav == "SMA" ? sma(src, length) :
         mav == "EMA" ? ema(src, length) :
         mav == "WMA" ? wma(src, length) :
         mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
         mav == "VAR" ? Var_Func(src, length) :
         mav == "WWMA" ? Wwma_Func(src, length) :
         mav == "ZLEMA" ? Zlema_Func(src, length) :
         mav == "TSF" ? Tsf_Func(src, length) : na

// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200

plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))

// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()

// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.close("Long")


Thêm nữa