Strategi Dagangan Pengesanan Pintar Rata-rata Bergerak Berganda

Penulis:ChaoZhang, Tarikh: 2024-02-18 15:58:08
Tag:

img

Ringkasan

Strategi perdagangan pelacakan purata bergerak berganda adalah strategi mengikuti trend berdasarkan purata bergerak dan penunjuk tertentu. Strategi ini menggunakan dua purata bergerak dengan tetapan parameter yang berbeza untuk membina saluran dan menggabungkan penunjuk OTT untuk menetapkan had atas dan bawah saluran untuk menjejaki trend harga dengan bijak. Apabila harga menembusi saluran, operasi beli atau jual dilaksanakan.

Prinsip Strategi

Metodologi teras strategi ini adalah untuk membina saluran penyesuaian menggunakan dua purata bergerak dan penunjuk OTT, khususnya:

  1. Mengira garis pantas MAvg menggunakan CLOSE dan purata bergerak tersuai sebagai input, dengan panjang 5 tempoh;

  2. Mengira kedudukan baris panjang LongStop dan kedudukan baris pendek ShortStop untuk saluran berdasarkan MAvg dan peratusan yang telah ditetapkan;

  3. Mengira MT stop loss saluran dalam penunjuk OTT, dan harga saluran OTT berdasarkan arah panjang/pendek;

  4. Menghasilkan isyarat perdagangan apabila harga memecahkan melalui OTT.

Proses di atas membolehkan pengesanan perubahan trend harga secara real-time, menghasilkan isyarat perdagangan.

Kelebihan Strategi

Kelebihan strategi ini termasuk:

  1. Struktur saluran purata bergerak berganda secara berkesan menangkap trend harga;
  2. Penunjuk OTT menetapkan saluran stop loss untuk mengawal risiko;
  3. Struktur saluran adaptif bertindak balas dengan cepat terhadap perubahan harga;
  4. Penyesuaian parameter yang fleksibel untuk produk dan jangka masa yang berbeza.

Risiko Strategi

Terdapat juga beberapa risiko:

  1. purata bergerak berganda boleh membentuk perbezaan yang mengakibatkan isyarat palsu;
  2. Tetapan parameter OTT yang tidak betul mungkin terlalu agresif atau konservatif;
  3. Strategi ini hanya bergantung kepada penunjuk teknikal tanpa mempertimbangkan asas-asas.

Risiko boleh ditangani melalui pengoptimuman parameter, mengintegrasikan penapis penunjuk dan asas lain.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan parameter purata bergerak untuk produk dan jangka masa yang betul;
  2. Mengoptimumkan parameter lebar saluran menyeimbangkan kepekaan dan kestabilan;
  3. Tambah penapis berdasarkan jumlah dagangan;
  4. Tetapkan penapis arah berdasarkan asas.

Ringkasan

Ringkasnya, ini adalah strategi trend berikut berdasarkan saluran purata bergerak berganda dan penunjuk OTT. Idea utama adalah membina saluran adaptif dan menghasilkan isyarat apabila harga pecah. Strategi ini mempunyai kelebihan tetapi juga ruang untuk penambahbaikan. Dengan penyesuaian parameter dan pengoptimuman logik, ia berpotensi menjadi strategi perdagangan kuant yang cekap yang patut 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")


Lebih lanjut