Momentum Strategi Dagangan Purata Bergerak Berganda

Penulis:ChaoZhang, Tarikh: 2023-12-01 18:13:21
Tag:

img

Ringkasan

Strategi Perdagangan Purata Bergerak Dual Momentum adalah strategi perdagangan jangka pendek yang menggunakan kedua-dua momentum harga dan penunjuk trend. Strategi ini menggunakan harga penutupan, harga pembukaan, saluran harga, RSI cepat dan penunjuk lain untuk menjana isyarat perdagangan. Ia akan menubuhkan kedudukan panjang atau pendek apabila harga pecah atau isyarat penunjuk muncul. Ia juga menetapkan syarat kehilangan berhenti untuk memaksa pembubaran apabila kerugian mencapai tahap tertentu.

Prinsip Strategi

Strategi membuat keputusan dagangan terutamanya berdasarkan penunjuk penilaian berikut:

  1. Saluran Harga: Mengira harga tertinggi dan terendah dari 30 candlestick terakhir untuk menentukan julat saluran. Harga penutupan di atas titik tengah saluran dianggap bullish. Harga penutupan di bawah titik tengah saluran dianggap bearish.

  2. RSI cepat: Mengira nilai RSI 2 candlestick terakhir. RSI di bawah 25 dianggap terlalu banyak dijual dan RSI di atas 75 dianggap terlalu banyak dibeli.

  3. Yin Yang Line: Hitung saiz entiti 2 candlestick terkini. Dua lilin merah menunjukkan isyarat penurunan manakala dua lilin hijau menunjukkan isyarat kenaikan.

  4. Keadaan Stop Loss: Memaksa pembubaran apabila kerugian mencapai peratusan tertentu untuk mengehadkan kerugian.

Dengan isyarat gabungan dari trend, momentum dan penunjuk overbought / oversold, strategi jangka pendek ini dapat mengenal pasti pembalikan dengan berkesan dan menjana isyarat perdagangan tepat pada masanya.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Penambahbaikan ketepatan isyarat dengan menggabungkan beberapa penunjuk, yang membantu menapis isyarat palsu.

  2. Tanggapan yang lebih cepat terhadap titik perubahan kerana penggunaan RSI Cepat, yang lebih sensitif daripada RSI biasa.

  3. Kebolehpercayaan yang tinggi merentasi produk dan jangka masa yang berbeza, berkat pengoptimuman parameter yang ketat semasa backtest.

  4. Mekanisme stop loss automatik untuk mengawal potensi kerugian melebihi jangkaan.

Analisis Risiko

Beberapa risiko strategi ini:

  1. Tetapan parameter saluran harga yang tidak betul boleh menyebabkan kejutan. Saluran yang terlalu sempit boleh mencetuskan pecah palsu.

  2. Masa memegang kedudukan satu sisi mungkin terlalu lama semasa trend yang kuat, melebihi unjuran.

  3. Tetapan titik stop loss yang tidak betul boleh meningkatkan kerugian. Parameter ini memerlukan konfigurasi yang berhati-hati - terlalu tinggi atau terlalu rendah boleh menjadi tidak menguntungkan.

Kita boleh mengurangkan dan mengurangkan risiko ini dengan menyesuaikan parameter saluran, mengoptimumkan masa kemasukan, menyesuaikan titik stop loss secara dinamik dan sebagainya.

Arahan pengoptimuman

Beberapa arah yang strategi boleh dioptimumkan lebih lanjut:

  1. Menggabungkan algoritma pembelajaran mesin untuk mencapai pengoptimuman parameter automatik, meningkatkan daya adaptasi.

  2. Menggabungkan lebih banyak sumber data seperti berita untuk meningkatkan keputusan perdagangan dan ketepatan isyarat.

  3. Membangunkan mekanisme saiz kedudukan dinamik berdasarkan keadaan pasaran untuk mengawal risiko dengan lebih baik.

  4. Memperluas penerapan kepada perdagangan arbitraj niaga hadapan untuk meningkatkan lebih lanjut pulangan mutlak.

Kesimpulan

Strategi ini menggabungkan pelbagai teknik termasuk price breakout, isyarat penunjuk, stop loss dan lain-lain. Ia telah menunjukkan kestabilan dan prestasi yang baik dalam backtest dan perdagangan langsung.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
usersi = input(true, defval = true, title = "Use RSI strategy")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period")
showcl = input(true, defval = true, title = "Price Channel")
fromyear = input(2018, defval = 2018, 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")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
trend = low > center ? 1 : high < center ? -1 : trend[1]
col = showcl ? blue : na
col2 = showcl ? black : na
plot(lasthigh, color = col2, linewidth = 2)
plot(lastlow, color = col2, linewidth = 2)
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Signals
body = abs(close - open)
abody = sma(body, 10)
up1 = rbars and close > center and uset
dn1 = gbars and close < center and uset
up2 = close <= lastlow and close < open and usect
dn2 = close >= lasthigh and close > open and usect
up3 = fastrsi < 25 and close > center and usersi
dn3 = fastrsi > 75 and close < center and usersi
exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2)
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Lebih lanjut