Out-of-the-box Machine Learning Strategi Perdagangan

Penulis:ChaoZhang, Tanggal: 2024-01-29 11:20:42
Tag:

img

Gambaran umum

Strategi ini menggunakan metode pembelajaran mesin untuk menerapkan strategi perdagangan otomatis out-of-the-box. Ini mengintegrasikan beberapa indikator dan model untuk secara otomatis menghasilkan sinyal perdagangan dan membuat keputusan beli dan jual sesuai.

Prinsip Strategi

Strategi ini terutama didasarkan pada poin-poin utama berikut:

  1. Gunakan Hull Moving Average untuk menentukan arah tren pasar
  2. Menggunakan EMA untuk menilai tren jangka pendek dan jangka menengah
  3. Menggunakan saluran tubuh lilin untuk menemukan tingkat kunci SUPPORT / RESISTANCE
  4. Membuat keputusan berdasarkan persilangan antara harga buka dan tutup dari multi timeframe SECURITY

Secara khusus, strategi ini akan memetakan Hull MA, EMA 13 periode, dan EMA 21 periode. Menghakimi arah tren jangka pendek dan menengah berdasarkan status panjang dan pendek EMA. Dikombinasikan dengan Hull MA untuk menentukan tren siklus yang lebih lama. Ini memberikan panduan tentang arah umum untuk sinyal perdagangan berikutnya.

Sebelum penyesuaian posisi, strategi akan merujuk pada harga tertinggi dan terendah di saluran entitas yang sesuai dengan level support dan resistance.

Akhirnya, strategi ini menggunakan harga buka dan tutup 60 periode. Ketika harga tutup melintasi di atas harga buka, sinyal beli dihasilkan. Ketika melintasi di bawah, sinyal jual dihasilkan. Ini melengkapi seluruh logika perdagangan.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah menggabungkan indikator pembelajaran mesin dan analisis teknis untuk mencapai solusi perdagangan otomatis yang logis, dapat disesuaikan dan mudah digunakan.

  1. Kombinasi multi-indikator meningkatkan akurasi sinyal

    Strategi ini tidak hanya bergantung pada satu atau dua indikator, tetapi memperhitungkan beberapa faktor seperti tren, dukungan / resistensi, dan terobosan harga.

  2. Pengaturan parameter yang fleksibel

    Panjang periode Hull MA, EMA, periode open/close crossover dapat disesuaikan melalui parameter, sehingga strategi dapat disesuaikan dengan lingkungan pasar yang berbeda.

  3. Sinyal perdagangan otomatis

    Sinyal perdagangan yang didasarkan pada indikator dan crossover dapat secara otomatis memicu pembelian dan penjualan tanpa penilaian manual, mengurangi kesulitan.

  4. Tampilan yang ditampilkan

    Grafik dalam strategi dapat dengan jelas menunjukkan struktur pasar, status tren dan harga kunci, secara intuitif menampilkan dasar penilaian strategi.

Analisis Risiko

Meskipun strategi ini telah dioptimalkan dalam berbagai aspek, masih ada beberapa risiko potensial:

  1. Kegagalan untuk melacak pergerakan harga drastis

    Dalam pasar yang tidak stabil, indikator dapat menjadi tidak efektif atau tertunda, menyebabkan strategi gagal melacak perubahan harga dalam waktu. Parameter perlu dioptimalkan untuk beradaptasi dengan pasar tersebut.

  2. Keberadaan tingkat kesalahan sinyal

    Sinyal perdagangan berdasarkan indikator dan model, lebih atau kurang, akan memiliki beberapa sinyal palsu atau sinyal yang hilang.

  3. Risiko campuran panjang/pendek

    Strategi yang membuat posisi panjang dan pendek secara bersamaan memiliki risiko kerugian di kedua belah pihak jika penilaian salah.

  4. Risiko kelebihan kebugaran

    Pengaturan parameter yang terlalu kompleks berisiko terlalu banyak. Sistem harus disederhanakan dengan jumlah kombinasi parameter yang terbatas.

Arahan Optimasi

Masih ada beberapa ruang untuk mengoptimalkan strategi ini, terutama dalam aspek berikut:

  1. Tambahkan lebih banyak sinyal indikator

    Selain indikator yang ada, indikator tambahan dapat diperkenalkan, seperti saluran BOLL, indikator KD, dll, untuk memperkaya referensi sistem.

  2. Menerapkan model pembelajaran mendalam

    Menggunakan indikator sederhana sebagai fitur untuk melatih LSTM dan model pembelajaran mendalam lainnya untuk meningkatkan kualitas sinyal.

  3. Masukkan data dasar

    Tambahkan data makroekonomi, informasi kebijakan dan faktor dasar lainnya untuk mengoptimalkan keputusan siklus panjang.

  4. Ukuran risiko & posisi

    Memperkenalkan strategi stop loss, secara dinamis menyesuaikan ukuran posisi berdasarkan volatilitas strategi pengembalian untuk mengontrol risiko secara ketat.

Kesimpulan

Strategi ini mengintegrasikan tren, level support/resistance, breakout dan beberapa indikator lainnya, memanfaatkan metode pembelajaran mesin untuk mencapai solusi perdagangan kuantitatif otomatis, siap digunakan. Strategi ini memiliki keuntungan dari berbagai kombinasi indikator, parameter yang dapat disetel dan sinyal otomatis, sementara juga menghadapi penyimpangan pelacakan, kesalahan sinyal, risiko campuran panjang/pendek sampai batas tertentu. Masih ada arah untuk optimasi lebih lanjut dengan menggabungkan lebih banyak indikator dan model tambahan, menggabungkan faktor fundamental, menyesuaikan posisi secara dinamis dan sebagainya, untuk mencapai kinerja perdagangan kuantitatif yang lebih stabil, akurat dan cerdas.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title='Ali Jitu Abus', shorttitle='Ali_Jitu_Abis_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Period=input('60')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)
longCondition = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

plot(request.security(syminfo.tickerid, Period, close), color=red, title="Period request.security Close")
plot(request.security(syminfo.tickerid, Period, open), color=green, title="Period request.security Open")

///////////////////////////////////////////////////////////////////////////////////////////

Lebih banyak