Momentum Dual Moving Average Strategi Perdagangan

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

img

Gambaran umum

Momentum Dual Moving Average Trading Strategy adalah strategi perdagangan jangka pendek yang memanfaatkan momentum harga dan indikator tren. Strategi ini menggunakan harga penutupan, harga pembukaan, saluran harga, RSI cepat dan indikator lain untuk menghasilkan sinyal perdagangan. Ini akan menetapkan posisi panjang atau pendek ketika harga pecah atau sinyal indikator muncul.

Prinsip Strategi

Strategi membuat keputusan perdagangan terutama berdasarkan indikator penilaian berikut:

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

  2. RSI cepat: Menghitung nilai RSI dari 2 candlestick terbaru. RSI di bawah 25 dianggap oversold dan RSI di atas 75 dianggap overbought.

  3. Yin Yang Line: Menghitung ukuran entitas dari 2 candlestick terbaru. Dua lilin merah menunjukkan sinyal bearish sementara dua lilin hijau menunjukkan sinyal bullish.

  4. Kondisi Stop Loss: Memaksa likuidasi ketika kerugian mencapai persentase tertentu untuk membatasi kerugian.

Dengan kombinasi sinyal dari indikator tren, momentum dan overbought/oversold, strategi jangka pendek ini dapat secara efektif mengidentifikasi pembalikan dan menghasilkan sinyal perdagangan yang tepat waktu.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Meningkatkan akurasi sinyal dengan menggabungkan beberapa indikator, yang membantu menyaring sinyal palsu.

  2. Respon yang lebih cepat terhadap titik balik karena penggunaan RSI Cepat, yang lebih sensitif daripada RSI biasa.

  3. Keandalan tinggi di berbagai produk dan kerangka waktu, berkat optimasi parameter yang ketat selama backtest.

  4. Mekanisme stop loss otomatis untuk mengontrol potensi kerugian di luar harapan.

Analisis Risiko

Beberapa risiko dari strategi ini:

  1. Pengaturan parameter saluran harga yang tidak benar dapat menyebabkan kejutan. Saluran yang terlalu sempit dapat memicu pecah palsu.

  2. Waktu memegang posisi sepihak mungkin terlalu lama selama tren yang kuat, melebihi proyeksi.

  3. Pengaturan titik stop loss yang tidak benar dapat memperluas kerugian. Parameter ini membutuhkan konfigurasi yang hati-hati - terlalu tinggi atau terlalu rendah dapat merugikan.

Kami dapat mengurangi risiko ini dengan menyesuaikan parameter saluran, mengoptimalkan waktu masuk, secara dinamis menyesuaikan titik stop loss, dll.

Arahan Optimasi

Beberapa arah strategi dapat lebih dioptimalkan:

  1. Mengintegrasikan algoritma pembelajaran mesin untuk mencapai optimasi parameter otomatis, meningkatkan kemampuan beradaptasi.

  2. Menggabungkan lebih banyak sumber data seperti berita untuk meningkatkan keputusan perdagangan dan akurasi sinyal.

  3. Mengembangkan mekanisme ukuran posisi dinamis berdasarkan kondisi pasar untuk mengendalikan risiko dengan lebih baik.

  4. Memperluas penerapan untuk perdagangan arbitrage berjangka untuk lebih meningkatkan pengembalian absolut.

Kesimpulan

Strategi ini menggabungkan berbagai teknik termasuk price breakout, sinyal indikator, stop loss dll. Ini telah menunjukkan stabilitas dan kinerja 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 banyak