Ini adalah strategi dagangan peribadi yang menggabungkan penunjuk momentum dan penapisan entiti candlestick. Ia secara komprehensif menggunakan tiga penunjuk teknikal - Indeks Momentum Stochastic, RSI pantas dan penapisan entiti candlestick untuk melaksanakan strategi berdasarkan kejayaan momentum sambil juga mempertimbangkan keadaan overbought dan oversold.
Strategi ini menggunakan tiga penunjuk berikut untuk penilaian isyarat perdagangan:
Indeks Momentum Stochastic (SMI): Ia menggabungkan jarak antara entiti lilin dan kedudukan relatif harga penutupan untuk menilai kekuatan atau kelemahan momentum harga.
RSI pantas (garis 7 hari): Ia menilai keadaan harga yang terlalu banyak dibeli dan terlalu banyak dijual. RSI di bawah 20 menghasilkan isyarat beli sebagai oversold sementara di atas 80 menghasilkan isyarat jual sebagai overbought.
Penapis Entiti Candlestick: Mengira saiz entiti candlestick purata selama 10 hari yang lalu. Hanya mengaktifkan isyarat apabila entiti candlestick hari ini melebihi satu pertiga daripada purata itu untuk mengelakkan isyarat yang tidak sah.
Strategi ini pertama menilai isyarat dari SMI dan RSI. Jika mana-mana keperluan isyarat penunjuk dipenuhi, maka gabungkan penapis entiti lilin untuk menentukan sama ada isyarat itu sah dan menjana isyarat perdagangan jika sah.
Strategi ini mempunyai kelebihan berikut:
Penghakiman lebih tepat dan boleh dipercayai dengan gabungan beberapa penunjuk.
Penambahan penapis entiti candlestick mengelakkan isyarat yang tidak sah.
Dengan menggabungkan keadaan overbought / oversold, lebih mudah untuk menangkap isyarat pada titik pembalikan trend.
Peningkatan peluang keuntungan dengan perdagangan panjang / pendek dua arah.
Perdagangan kedudukan separa mengelakkan kerugian satu kali yang berlebihan.
Strategi ini juga mempunyai beberapa risiko:
Indikator boleh menghasilkan isyarat palsu yang membawa kepada kerugian. pengoptimuman parameter boleh mengurangkan isyarat palsu.
Perdagangan kedudukan separa tidak dapat memanfaatkan sepenuhnya peluang trend dalam setiap arah. pulangan yang lebih tinggi boleh dicapai dengan memperkuat saiz kedudukan perdagangan.
Sebagai penunjuk utama, SMI sensitif terhadap tetapan parameter. konfigurasi yang tidak betul boleh kehilangan peluang perdagangan atau meningkatkan isyarat palsu.
Perdagangan yang kerap dengan strategi dua arah meningkatkan kos transaksi.
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Mengoptimumkan parameter untuk SMI dan RSI untuk mencari kombinasi parameter terbaik.
Meningkatkan ukuran kedudukan dan mekanisme pengurusan kedudukan untuk mencapai pulangan yang lebih tinggi semasa trend.
Tambah strategi stop loss untuk mengurangkan risiko kerugian satu kali.
Gabungkan lebih banyak penunjuk untuk menilai kebolehpercayaan isyarat dan mengurangkan isyarat palsu.
Mengambil kontrak yang cekap untuk mengurangkan kos transaksi.
Strategi ini secara komprehensif menggunakan SMI, RSI pantas dan penapis entiti lilin untuk melaksanakan strategi perdagangan peribadi berdasarkan momentum, overbought / oversold-aware. Ia mempunyai kelebihan seperti penilaian yang tepat, pengenalan isyarat yang sah, gabungan keadaan overbought / oversold dan perdagangan dua arah, tetapi juga risiko seperti sensitiviti parameter, ketidakupayaan untuk memanfaatkan sepenuhnya trend, dan operasi yang kerap. Dengan terus mengoptimumkan parameter, meningkatkan ukuran kedudukan dan pengurusan kerugian berhenti, mengurangkan isyarat palsu dan lain-lain, strategi ini dapat mencapai prestasi perdagangan yang lebih baik.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 6h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Stochastic Strategy v1.2", shorttitle = "Stochastic str 1.2", overlay = false, 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") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") usesmi = input(true, defval = true, title = "Use SMI Strategy") usersi = input(true, defval = true, title = "Use RSI Strategy") usebod = input(true, defval = true, title = "Use Body-Filter") a = input(5, "SMI Percent K Length") b = input(3, "SMI Percent D Length") limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit") fromyear = input(2017, defval = 2017, 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") //Fast RSI fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Stochastic Momentum Index ll = lowest (low, a) hh = highest (high, a) diff = hh - ll rdiff = close - (hh+ll)/2 avgrel = ema(ema(rdiff,b),b) avgdiff = ema(ema(diff,b),b) SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0 SMIsignal = ema(SMI,b) //Lines plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index") plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line") plot(limit, color = black, title = "Over Bought") plot(-1 * limit, color = black, title = "Over Sold") plot(0, color = blue, title = "Zero Line") //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 3 or usebod == false //Signals up1 = SMI < -1 * limit and close < open and body and usesmi dn1 = SMI > limit and close > open and body and usesmi up2 = fastrsi < 20 and close < open and body and usersi dn2 = fastrsi > 80 and close > open and body and usersi exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 or up2 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 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()