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.
Strategi membuat keputusan dagangan terutamanya berdasarkan penunjuk penilaian berikut:
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.
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.
Yin Yang Line: Hitung saiz entiti 2 candlestick terkini. Dua lilin merah menunjukkan isyarat penurunan manakala dua lilin hijau menunjukkan isyarat kenaikan.
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.
Kelebihan strategi ini termasuk:
Penambahbaikan ketepatan isyarat dengan menggabungkan beberapa penunjuk, yang membantu menapis isyarat palsu.
Tanggapan yang lebih cepat terhadap titik perubahan kerana penggunaan RSI Cepat, yang lebih sensitif daripada RSI biasa.
Kebolehpercayaan yang tinggi merentasi produk dan jangka masa yang berbeza, berkat pengoptimuman parameter yang ketat semasa backtest.
Mekanisme stop loss automatik untuk mengawal potensi kerugian melebihi jangkaan.
Beberapa risiko strategi ini:
Tetapan parameter saluran harga yang tidak betul boleh menyebabkan kejutan. Saluran yang terlalu sempit boleh mencetuskan pecah palsu.
Masa memegang kedudukan satu sisi mungkin terlalu lama semasa trend yang kuat, melebihi unjuran.
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.
Beberapa arah yang strategi boleh dioptimumkan lebih lanjut:
Menggabungkan algoritma pembelajaran mesin untuk mencapai pengoptimuman parameter automatik, meningkatkan daya adaptasi.
Menggabungkan lebih banyak sumber data seperti berita untuk meningkatkan keputusan perdagangan dan ketepatan isyarat.
Membangunkan mekanisme saiz kedudukan dinamik berdasarkan keadaan pasaran untuk mengawal risiko dengan lebih baik.
Memperluas penerapan kepada perdagangan arbitraj niaga hadapan untuk meningkatkan lebih lanjut pulangan mutlak.
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()