
Strategi perdagangan pelacakan cerdas linier ganda adalah strategi pelacakan tren berdasarkan linier rata-rata dan indikator tertentu. Strategi ini menggunakan saluran konstruksi linier rata-rata dari dua pengaturan parameter yang berbeda, dan digabungkan dengan indikator OTT yang menetapkan batas atas dan bawah saluran, untuk melakukan pelacakan cerdas terhadap tren harga.
Strategi ini terutama menggunakan dua rata-rata bergerak dan indikator OTT untuk membangun saluran adaptasi, prinsipnya adalah sebagai berikut:
Hitung garis MAvg, dengan input harga closeout CLOSE dan garis rata-rata kustom, dengan panjang 5;
Berdasarkan MAvg dan persentase pengaturan, perhitungan batas bawah atas saluran untuk posisi garis panjang Stop dan garis pendek Stop;
Menghitung MT Stop Mobile Channel dalam indikator OTT, menghitung harga saluran OTT berdasarkan keadaan kosong;
Ketika harga menembus OTT, sinyal transaksi dihasilkan.
Di atas dibangun proses adaptasi saluran yang memungkinkan strategi untuk melacak tren perubahan harga secara real-time dan menghasilkan sinyal perdagangan.
Strategi ini memiliki keuntungan sebagai berikut:
Strategi ini juga memiliki beberapa risiko:
Untuk risiko yang disebutkan di atas, dapat ditingkatkan dan dioptimalkan melalui pengoptimalan parameter, dikombinasikan dengan indikator lain atau sinyal penyaringan dasar.
Strategi ini dapat dioptimalkan dari beberapa arah:
Secara keseluruhan, strategi ini adalah strategi yang didasarkan pada saluran paralel ganda dan indikator OTT untuk melacak tren. Gagasan utamanya adalah membangun saluran adaptif dan menghasilkan sinyal perdagangan dengan terobosan. Strategi ini memiliki beberapa keunggulan, tetapi ada juga ruang untuk perbaikan. Dengan parameter dan aturan yang dioptimalkan, strategi ini dapat menjadi strategi perdagangan kuantitatif yang efisien yang layak untuk diuji coba.
/*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")