Strategi perdagangan penjejakan pintar berdasarkan purata bergerak berganda


Tarikh penciptaan: 2024-02-18 15:58:08 Akhirnya diubah suai: 2024-02-18 15:58:08
Salin: 2 Bilangan klik: 505
1
fokus pada
1617
Pengikut

Strategi perdagangan penjejakan pintar berdasarkan purata bergerak berganda

Gambaran keseluruhan

Strategi perdagangan pengesanan pintar dua garis adalah strategi pengesanan trend berdasarkan garis rata dan penunjuk tertentu. Strategi ini menggunakan saluran pembinaan garis rata dengan dua set parameter yang berbeza, dan digabungkan dengan penunjuk OTT yang menetapkan batas atas dan bawah saluran, untuk mengesan trend harga secara pintar.

Prinsip Strategi

Strategi ini menggunakan dua purata bergerak dan indikator OTT untuk membina saluran adaptasi, prinsipnya adalah seperti berikut:

  1. Hitung garis MAvg, dengan harga penutupan CLOSE dan garis rata-rata tersuai sebagai input, dengan panjang 5;

  2. Berdasarkan MAvg dan set peratusan, mengira teratas terendah saluran garis panjang kedudukan lama Stop dan garis pendek kedudukan pendek Stop;

  3. Mengira MT terhenti bergerak saluran dalam penunjuk OTT, mengira harga saluran OTT berdasarkan keadaan kosong;

  4. Apabila harga menembusi OTT, ia akan menghasilkan isyarat perdagangan.

Di atas adalah proses membina saluran penyesuaian, yang membolehkan strategi untuk mengesan trend perubahan harga dalam masa nyata dan menghasilkan isyarat perdagangan.

Kelebihan Strategik

Strategi ini mempunyai kelebihan berikut:

  1. Struktur saluran dua hala yang berkesan untuk menangkap trend harga;
  2. Penunjuk OTT menetapkan terhadnya pergerakan saluran dan mengawal risiko;
  3. Struktur saluran yang beradaptasi untuk bertindak balas dengan cepat terhadap perubahan harga;
  4. Tetapan parameter strategi fleksibel, boleh dioptimumkan untuk pelbagai jenis dan kitaran.

Risiko Strategik

Strategi ini mempunyai beberapa risiko:

  1. Garis dua rata mudah terbentuk dan boleh menyebabkan isyarat salah;
  2. Penetapan parameter OTT yang tidak betul boleh menjadi terlalu radikal atau konservatif dan menjejaskan prestasi strategi;
  3. Strategi ini hanya berdasarkan kepada petunjuk teknikal dan tidak melibatkan faktor asas.

Untuk risiko yang disebutkan di atas, ia boleh diperbaiki dan dioptimumkan melalui pengoptimuman parameter, digabungkan dengan petunjuk lain atau isyarat penapisan asas.

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Mengoptimumkan parameter garis rata, memilih kombinasi parameter yang sesuai untuk varieti dan kitaran;
  2. Mengoptimumkan parameter lebar jalur untuk menyeimbangkan sensitiviti dan kestabilan pengesanan;
  3. Menapis isyarat berdasarkan jumlah dagangan;
  4. Menetapkan penapis arah perdagangan dengan keadaan asas.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi untuk mengesan trend berdasarkan saluran dua hala dan indikator OTT, idea utamanya adalah untuk membina saluran penyesuaian dan menghasilkan isyarat dagangan dengan terobosan. Strategi ini mempunyai kelebihan tertentu, tetapi juga terdapat ruang untuk peningkatan yang mungkin. Dengan pengoptimuman parameter dan peraturan, strategi ini boleh menjadi strategi perdagangan kuantitatif yang cekap yang patut diuji.

Kod 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")