Strategi Penembusan Harga Rata-rata Bergerak Ganda

Penulis:ChaoZhang, Tanggal: 2023-11-21 15:33:52
Tag:

img

Gambaran umum

Strategi ini menggunakan dua rata-rata bergerak untuk menentukan tren harga dan terobosan. Pergi pendek ketika harga menembus rel atas dan pergi panjang ketika harga menembus rel bawah. Atur stop loss exit untuk mengendalikan risiko.

Prinsip-prinsip

  1. Gunakan fungsi sma() untuk menghitung dua rata-rata bergerak jangka pendek dan jangka panjang sebagai rel atas dan bawah strategi perdagangan.
  2. Hitung harga beli dan harga jual: harga beli adalah rel bawah dikalikan dengan koefisien kurang dari 1, dan harga jual adalah rel atas dikalikan dengan koefisien lebih besar dari 1.
  3. Ketika harga menembus rel atas, buka posisi pendek dengan pesanan pasar; ketika harga menembus rel bawah, buka posisi panjang dengan pesanan batas.
  4. Atur rentang tahun, bulan dan tanggal untuk mengontrol siklus perdagangan strategi.
  5. Tutup semua posisi ketika backtest berakhir atau melebihi kisaran tanggal.

Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan sistem double rail dapat menyaring kebisingan pasar dan mengidentifikasi tren.
  2. Menggunakan harga terobosan untuk menentukan waktu masuk dapat mengurangi sinyal palsu.
  3. Menggunakan limit order mengurangi biaya dampak pasar.
  4. Siklus perdagangan dapat dengan mudah disesuaikan untuk mengendalikan risiko strategi.

Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Terobosan rel ganda dapat dengan mudah menyebabkan risiko kerugian berkelanjutan.
  2. Ketika target perdagangan memasuki konsolidasi, ada risiko terlalu banyak transaksi. jarak antara rel atas dan bawah dapat diperluas dengan tepat.
  3. Limit order mungkin melewatkan beberapa peluang pembelian.

Optimalisasi

Strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Uji kombinasi panjang rata-rata bergerak yang berbeda untuk menemukan parameter terbaik.
  2. Tingkatkan indikator Volume untuk menentukan terobosan dalam volume transaksi.
  3. Meningkatkan mekanisme stop loss adaptif untuk menyesuaikan harga stop loss secara real time.
  4. Meningkatkan model pembelajaran mesin untuk menentukan arah tren.

Ringkasan

Ide keseluruhan strategi ini jelas dan mudah dipahami. Dengan menggunakan sistem double rail untuk mengidentifikasi tren dan menggunakan terobosan harga untuk menentukan waktu masuk, itu dapat menyaring kebisingan dan mencapai keuntungan yang stabil. Ada juga ruang untuk perbaikan dan optimalisasi. Secara keseluruhan, ini adalah strategi perdagangan kuantitatif yang dapat direproduksi dengan nilai praktis.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's Shift MA Strategy v1.0", shorttitle = "Shift MA str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, defval = 1, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
buylevel = input(-5.0, defval = -5.0, minval = -100, maxval = 0, title = "Buy line (lime)")
selllevel = input(0.0, defval = 0.0, minval = -100, maxval = 100, title = "Sell line (red)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
buy = sma * ((100 + buylevel) / 100)
sell = sma * ((100 + selllevel) / 100)
plot(buy, linewidth = 2, color = lime, title = "Buy line")
plot(sell, linewidth = 2, color = red, title = "Sell line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0
    strategy.entry("L", strategy.long, lot, limit = buy)
    
if (not na(close[per]))    
    strategy.entry("Close", strategy.short, 0, limit = sell)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Lebih banyak