Strategi Trend Trading Berdasarkan Golden Cross

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

img

Gambaran umum

Strategi perdagangan silang emas adalah strategi pelacakan tren jangka menengah hingga panjang. Strategi ini mengidentifikasi arah tren harga saham dengan menghitung indikator SR dan indikator sinyal SR, dan mengimplementasikan operasi pelacakan tren dengan menggambar saluran tren menggunakan algoritma jaringan saraf. Ketika indikator SR melintasi sinyal SR, sinyal beli dihasilkan. Ketika indikator SR melintasi di bawah sinyal SR, sinyal jual dihasilkan. Strategi ini juga menggunakan teknik filter regresi linier adaptif untuk mengoptimalkan kurva saluran, yang secara efektif menekan sinyal palsu.

Prinsip-prinsip

Indikator SR adalah sintesis sekunder dari rata-rata bergerak WMA dan SMA dengan periode 8. Indikator sinyal SR adalah indikator SR yang dihitung dengan periode 20. Salib emas dan kematian indikator SR dan sinyal SR digunakan untuk menentukan arah tren.

Strategi ini menggunakan algoritma jaringan saraf untuk secara otomatis memetakan batas atas dan bawah harga saham untuk membentuk saluran adaptif. Batas atas mengambil nilai maksimum historis dari indikator SR sebagai input, batas bawah mengambil nilai minimum historis sebagai input, dan kurva regresi dihitung sebagai batas atas dan bawah saluran masing-masing.

Ketika indikator SR melintasi sinyal SR, sinyal beli dihasilkan. Ketika indikator SR melintasi sinyal SR, sinyal jual dihasilkan. Setelah sinyal panjang dan pendek dikeluarkan, hubungan antara harga saham dan batas atas dan bawah saluran menentukan posisi stop loss dan take profit.

Keuntungan

  • Menggunakan teknologi sintesis bilinear untuk menghilangkan dampak fluktuasi harga dan menentukan arah tren dengan akurat;
  • Algoritma saluran adaptif mengoptimalkan waktu masuk dan keluar dan menghindari kebocoran palsu;
  • Kurva saluran menggunakan teknologi penyaringan regresi linier adaptif untuk menghindari distorsi dari ekstrem;
  • Stop loss dan mengambil posisi keuntungan berubah secara dinamis dengan saluran, secara otomatis melacak tren untuk keuntungan.

Analisis Risiko

Risiko utama dari strategi pelacakan tren ini adalah:

  • Menghasilkan banyak sinyal palsu dan operasi yang berlebihan tidak valid dalam tren osilasi;
  • Putus cepat di bawah batas bawah saluran yang disebabkan oleh peristiwa tiba-tiba menghasilkan kerugian besar;
  • Pengaturan parameter yang tidak benar dapat menyebabkan kegagalan strategi.

Untuk mengendalikan risiko, disarankan untuk menggabungkan dengan strategi lain daripada mengandalkan satu strategi; pada saat yang sama mengoptimalkan pengaturan parameter untuk beradaptasi dengan lingkungan pasar yang berbeda.

Arahan Optimasi

Strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter indikator SR dan indikator sinyal untuk meningkatkan stabilitas sinyal silang;

  2. Mengoptimalkan periode siklus saluran adaptif untuk meluruskan kurva saluran;

  3. Tambahkan indikator filter lainnya untuk menghindari kesalahan operasi, seperti indikator energi, indikator volatilitas, dll.

  4. Menggabungkan algoritma pembelajaran mendalam untuk mengoptimalkan kurva saluran secara real time dan meningkatkan adaptivitas.

Ringkasan

Strategi perdagangan silang emas adalah strategi kuantitatif yang efektif untuk melacak tren jangka menengah hingga panjang. Strategi ini memiliki probabilitas tinggi untuk menentukan arah tren dengan benar dan risiko operasi yang rendah. Dengan ruang yang sangat besar untuk mengoptimalkan model algoritma, strategi ini berpotensi menjadi alat yang kuat untuk melacak perubahan tren 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 banyak