Strategi Dagangan Trend Berdasarkan Salib Emas

Penulis:ChaoZhang, Tarikh: 2023-11-23 14:07:11
Tag:

img

Ringkasan

Strategi perdagangan silang emas adalah strategi pengesanan trend jangka menengah hingga panjang. Ia mengenal pasti arah trend harga saham dengan mengira penunjuk SR dan penunjuk isyarat SR, dan melaksanakan operasi pengesanan trend dengan menggambar saluran trend menggunakan algoritma rangkaian saraf. Apabila penunjuk SR melintasi isyarat SR, isyarat beli dihasilkan. Apabila penunjuk SR melintasi isyarat SR, isyarat jual dihasilkan. Strategi ini juga menggunakan teknik penapis regresi linear adaptif untuk mengoptimumkan kurva saluran, yang secara berkesan menekan isyarat palsu.

Prinsip-prinsip

Indikator SR adalah sintesis sekunder purata bergerak WMA dan purata bergerak SMA dengan tempoh 8. Indikator isyarat SR adalah indikator SR yang dikira dengan tempoh 20. Salib emas dan kematian isyarat SR dan isyarat SR digunakan untuk menentukan arah trend.

Strategi ini menggunakan algoritma rangkaian saraf untuk secara automatik merangka had atas dan bawah harga saham untuk membentuk saluran adaptif. Had atas mengambil nilai maksimum sejarah penunjuk SR sebagai input, had bawah mengambil nilai minimum sejarah sebagai input, dan lengkung regresi dikira sebagai had atas dan bawah saluran masing-masing. lengkung saluran lebih lancar selepas penapisan regresi linear adaptif.

Apabila penunjuk SR melintasi isyarat SR, isyarat beli dihasilkan. Apabila penunjuk SR melintasi di bawah isyarat SR, isyarat jual dihasilkan. Selepas isyarat panjang dan pendek dikeluarkan, hubungan antara harga saham dan had atas dan bawah saluran menentukan posisi stop loss dan mengambil keuntungan.

Kelebihan

  • Menggunakan teknologi sintesis bilinear untuk menghapuskan kesan turun naik harga dan menentukan arah trend dengan tepat;
  • Algoritma saluran adaptif mengoptimumkan masa masuk dan keluar dan mengelakkan pembocoran palsu;
  • Lintasan saluran menggunakan teknologi penapisan regresi linear adaptif untuk mengelakkan penyimpangan dari ekstrem;
  • Stop loss dan mengambil kedudukan keuntungan berubah secara dinamik dengan saluran, secara automatik mengesan trend untuk keuntungan.

Analisis Risiko

Risiko utama strategi pengesanan trend ini adalah:

  • Menghasilkan banyak isyarat palsu dan operasi yang tidak sah yang berlebihan dalam trend berayun;
  • Pecahan pantas di bawah had saluran yang lebih rendah disebabkan oleh peristiwa tiba-tiba membawa kepada kerugian besar;
  • Tetapan parameter yang tidak betul boleh menyebabkan kegagalan strategi.

Untuk mengawal risiko, disyorkan untuk menggabungkan dengan strategi lain dan bukannya bergantung pada satu strategi; pada masa yang sama mengoptimumkan tetapan parameter untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter penunjuk SR dan penunjuk isyarat untuk meningkatkan kestabilan isyarat silang;

  2. Mengoptimumkan tempoh kitaran saluran penyesuaian untuk meluruskan lengkung saluran;

  3. Tambah penunjuk penapis lain untuk mengelakkan kesalahan operasi, seperti penunjuk tenaga, penunjuk turun naik, dan lain-lain;

  4. Menggabungkan algoritma pembelajaran mendalam untuk mengoptimumkan lengkung saluran dalam masa nyata dan meningkatkan daya adaptasi.

Ringkasan

Strategi perdagangan silang emas adalah strategi kuantitatif yang berkesan untuk mengesan trend jangka menengah hingga panjang. Ia mempunyai kebarangkalian tinggi untuk menentukan arah trend dengan betul dan risiko operasi yang rendah. Dengan ruang yang besar untuk mengoptimumkan model algoritma, strategi ini berpotensi menjadi alat yang kuat untuk mengesan perubahan trend saham.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy PyramiCover",
         shorttitle = "S-PC",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=50,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2014, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

per = input(14,title="🔹 Length")
//
up = 0.0
nup= 0.0
lowl = 0.0
nin = 0.0
//
srl=wma(close,8)
srr = sma(close,8)
sr = 2*srl - srr
//
srsl=wma(close,20)
srsr= sma(close,20)
srsignal = 2*srsl - srsr
//
if sr>srsignal
    up := highest(sr,round(150))
    nup :=highest(srsignal,round(20))
else
    up := highest(srsignal,round(150))
    nup := highest(sr,round(20))
//
if sr<srsignal
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
else
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
//reg alexgrover
f_reg(src,length)=>
    x = bar_index
    y = src
    x_ = sma(x, length)
    y_ = sma(y, length)
    mx = stdev(x, length)
    my = stdev(y, length)
    c = correlation(x, y, length)
    slope = c * (my / mx)
    inter = y_ - slope * x_
    reg = x * slope + inter
    reg
//
up_=f_reg(up,per)
lowl_=f_reg(lowl,per)
nup_=f_reg(nup,per)
nin_=f_reg(nin,per)
//
plot(sr, title='SR', color=color.green, linewidth=2, style=plot.style_line,transp=0)
plot(srsignal, title='SR-Signal', color=color.red, linewidth=2, style=plot.style_line,transp=0)
plot(up_, title='Upper limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
plot(lowl_, title='Lower limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
a=plot(nup_, title='Neuronal Upper', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
b=plot(nin_, title='Neuronal Lower', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
fill(a, b, color=color.gray)
plotshape(crossunder(sr,nup_)? sr+atr(20):na, title="Sell", text="🐻", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.black,transp=0)
plotshape(crossover(sr,nin_)? sr-atr(20):na, title="Buy", text="🐂", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.black,transp=0)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

if backTestPeriod()

    strategy.entry("Buy", true, 1, when = crossover(sr,nin_)) 
    strategy.entry("Short", false, 1, when = crossunder(sr,nup_))

Lebih lanjut