Strategi perdagangan pelacakan cerdas berdasarkan rata-rata pergerakan ganda


Tanggal Pembuatan: 2024-02-18 15:58:08 Akhirnya memodifikasi: 2024-02-18 15:58:08
menyalin: 2 Jumlah klik: 505
1
fokus pada
1617
Pengikut

Strategi perdagangan pelacakan cerdas berdasarkan rata-rata pergerakan ganda

Ringkasan

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.

Prinsip Strategi

Strategi ini terutama menggunakan dua rata-rata bergerak dan indikator OTT untuk membangun saluran adaptasi, prinsipnya adalah sebagai berikut:

  1. Hitung garis MAvg, dengan input harga closeout CLOSE dan garis rata-rata kustom, dengan panjang 5;

  2. Berdasarkan MAvg dan persentase pengaturan, perhitungan batas bawah atas saluran untuk posisi garis panjang Stop dan garis pendek Stop;

  3. Menghitung MT Stop Mobile Channel dalam indikator OTT, menghitung harga saluran OTT berdasarkan keadaan kosong;

  4. 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.

Keunggulan Strategis

Strategi ini memiliki keuntungan sebagai berikut:

  1. Struktur saluran dua arah yang efektif untuk menangkap tren harga;
  2. Indikator OTT mengatur channel mobile stop loss dan mengendalikan risiko;
  3. Adaptasi struktur saluran, yang dapat merespons perubahan harga dengan cepat;
  4. Parameter kebijakan diatur secara fleksibel dan dapat dioptimalkan untuk varietas dan siklus yang berbeda.

Risiko Strategis

Strategi ini juga memiliki beberapa risiko:

  1. Garis dua rata mudah terbentuk dan dapat menghasilkan sinyal yang salah;
  2. Pengaturan parameter OTT yang tidak tepat dapat menjadi terlalu radikal atau konservatif dan mempengaruhi kinerja strategi;
  3. Strategi ini hanya didasarkan pada indikator teknis dan tidak menggabungkan faktor-faktor mendasar.

Untuk risiko yang disebutkan di atas, dapat ditingkatkan dan dioptimalkan melalui pengoptimalan parameter, dikombinasikan dengan indikator lain atau sinyal penyaringan dasar.

Arah optimasi strategi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. mengoptimalkan parameter rata-rata, memilih kombinasi parameter yang sesuai untuk varietas dan siklus;
  2. Mengoptimalkan parameter bandwidth saluran, menyeimbangkan sensitivitas dan stabilitas pelacakan;
  3. Filter sinyal berdasarkan volume transaksi;
  4. Ini adalah cara yang paling efektif untuk memfilter transaksi berdasarkan kondisi dasar.

Meringkaskan

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.

Kode Sumber Strategi
/*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")