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.
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à:
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;
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;
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;
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.
Những lợi thế của chiến lược này bao gồm:
Ngoài ra còn có một số rủi ro:
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.
Chiến lược có thể được tối ưu hóa trong một số khía cạnh:
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")