Strategi Penembusan Harga Purata Bergerak Berganda

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

img

Ringkasan

Strategi ini menggunakan dua purata bergerak untuk menentukan trend harga dan terobosan. Pergi pendek apabila harga memecahkan rel atas dan pergi panjang apabila harga memecahkan rel bawah. Tetapkan stop loss exit untuk mengawal risiko.

Prinsip-prinsip

  1. Gunakan fungsi sma() untuk mengira jangka pendek dan jangka panjang dua purata bergerak sebagai rel atas dan bawah strategi perdagangan.
  2. Mengira harga beli dan harga jual: harga beli adalah rel bawah didarab dengan pekali kurang daripada 1, dan harga jual adalah rel atas didarab dengan pekali lebih besar daripada 1.
  3. Apabila harga menembusi rel atas, buka kedudukan pendek dengan pesanan pasaran; apabila harga menembusi rel bawah, buka kedudukan panjang dengan pesanan had.
  4. Tetapkan tahun, bulan dan julat tarikh untuk mengawal kitaran perdagangan strategi.
  5. Tutup semua kedudukan apabila backtest berakhir atau melebihi julat tarikh.

Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan sistem rel berganda boleh menapis bunyi pasaran dan mengenal pasti trend.
  2. Menggunakan kejayaan harga untuk menentukan masa kemasukan boleh mengurangkan isyarat palsu.
  3. Menggunakan pesanan had mengurangkan kos kesan pasaran.
  4. Kitaran perdagangan boleh dengan mudah disesuaikan untuk mengawal risiko strategi.

Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Penembusan rel berganda boleh dengan mudah membawa kepada risiko kerugian berterusan.
  2. Apabila sasaran perdagangan memasuki penyatuan, terdapat risiko terlalu banyak transaksi. Jarak antara rel atas dan bawah boleh diperluas dengan sewajarnya.
  3. Perintah had mungkin terlepas beberapa peluang pembelian.

Pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Uji kombinasi panjang purata bergerak yang berbeza untuk mencari parameter terbaik.
  2. Meningkatkan penunjuk Volume untuk menentukan kejayaan dalam jumlah transaksi.
  3. Meningkatkan mekanisme stop loss adaptif untuk menyesuaikan harga stop loss dalam masa nyata.
  4. Meningkatkan model pembelajaran mesin untuk menentukan arah trend.

Ringkasan

Idea keseluruhan strategi ini jelas dan mudah difahami. Dengan menggunakan sistem rel ganda untuk mengenal pasti trend dan menggunakan terobosan harga untuk menentukan masa kemasukan, ia dapat menapis bunyi bising dan mencapai keuntungan yang stabil.


/*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 lanjut