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.
Strategi membuat keputusan perdagangan terutama berdasarkan indikator penilaian berikut:
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.
RSI cepat: Menghitung nilai RSI dari 2 candlestick terbaru. RSI di bawah 25 dianggap oversold dan RSI di atas 75 dianggap overbought.
Yin Yang Line: Menghitung ukuran entitas dari 2 candlestick terbaru. Dua lilin merah menunjukkan sinyal bearish sementara dua lilin hijau menunjukkan sinyal bullish.
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.
Keuntungan dari strategi ini meliputi:
Meningkatkan akurasi sinyal dengan menggabungkan beberapa indikator, yang membantu menyaring sinyal palsu.
Respon yang lebih cepat terhadap titik balik karena penggunaan RSI Cepat, yang lebih sensitif daripada RSI biasa.
Keandalan tinggi di berbagai produk dan kerangka waktu, berkat optimasi parameter yang ketat selama backtest.
Mekanisme stop loss otomatis untuk mengontrol potensi kerugian di luar harapan.
Beberapa risiko dari strategi ini:
Pengaturan parameter saluran harga yang tidak benar dapat menyebabkan kejutan. Saluran yang terlalu sempit dapat memicu pecah palsu.
Waktu memegang posisi sepihak mungkin terlalu lama selama tren yang kuat, melebihi proyeksi.
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.
Beberapa arah strategi dapat lebih dioptimalkan:
Mengintegrasikan algoritma pembelajaran mesin untuk mencapai optimasi parameter otomatis, meningkatkan kemampuan beradaptasi.
Menggabungkan lebih banyak sumber data seperti berita untuk meningkatkan keputusan perdagangan dan akurasi sinyal.
Mengembangkan mekanisme ukuran posisi dinamis berdasarkan kondisi pasar untuk mengendalikan risiko dengan lebih baik.
Memperluas penerapan untuk perdagangan arbitrage berjangka untuk lebih meningkatkan pengembalian absolut.
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()