Strategi perdagangan pelacakan rata-rata bergerak ganda adalah strategi mengikuti tren berdasarkan rata-rata bergerak dan indikator tertentu. Strategi ini menggunakan dua rata-rata bergerak dengan pengaturan parameter yang berbeda untuk membangun saluran dan menggabungkan indikator OTT untuk mengatur batas atas dan bawah saluran untuk melacak tren harga secara cerdas. Ketika harga menembus saluran, operasi beli atau jual dilaksanakan.
Metodologi inti dari strategi ini adalah membangun saluran adaptif menggunakan dua rata-rata bergerak dan indikator OTT, khususnya:
Menghitung garis cepat MAvg menggunakan rata-rata bergerak CLOSE dan khusus sebagai input, dengan panjang 5 periode;
Menghitung posisi garis panjang LongStop dan posisi garis pendek ShortStop untuk saluran berdasarkan MAvg dan persentase yang telah ditetapkan sebelumnya;
Menghitung stop loss MT saluran dalam indikator OTT, dan harga saluran OTT berdasarkan arah panjang/pendek;
Menghasilkan sinyal perdagangan ketika harga pecah melalui OTT.
Proses di atas memungkinkan pelacakan perubahan tren harga secara real time, menghasilkan sinyal perdagangan.
Keuntungan dari strategi ini meliputi:
Ada juga beberapa risiko:
Risiko dapat ditangani melalui optimasi parameter, mengintegrasikan indikator lain dan filter fundamental.
Strategi dapat dioptimalkan dalam beberapa aspek:
Secara singkat, ini adalah strategi trend berikut berdasarkan saluran rata-rata bergerak ganda dan indikator OTT. Ide inti adalah membangun saluran adaptif dan menghasilkan sinyal ketika harga pecah. Strategi ini memiliki kelebihan tetapi juga ruang untuk perbaikan. Dengan penyesuaian parameter dan optimasi logika, ini memiliki potensi untuk menjadi strategi perdagangan kuantitatif yang efisien yang layak digunakan.
/*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")