Strategi ini menggunakan indikator momentum stokastik ganda (SMI dan RSI) untuk sinyal panjang dan pendek, bersama dengan martingale dan filter tubuh untuk pemilihan sinyal perdagangan, yang bertujuan untuk menangkap tren jangka menengah dan fluktuasi harga.
Strategi ini menilai panjang dan pendek menggunakan dua indikator stokastik SMI dan RSI. SMI dihitung berdasarkan rata-rata bergerak dari kisaran bar dan harga dekat, baik untuk mengidentifikasi titik pembalikan. RSI membandingkan kekuatan bull dan bear untuk menentukan status overbought dan oversold. Strategi pergi panjang ketika SMI di bawah -50 dan RSI di bawah 20; pergi pendek ketika SMI di atas 50 dan RSI di atas 80.
Untuk menyaring breakout palsu, strategi juga menggunakan 1/3 dari SMA tubuh 10-periode sebagai kondisi filter terobosan.
Selain itu, strategi ini mengadopsi martingale opsional, yang adalah untuk meningkatkan banyak pada kehilangan perdagangan, mencoba untuk memulihkan kerugian sebelumnya.
Fungsi backtest backtest strategi dengan memasukkan rentang tanggal.
Strategi ini menggabungkan indikator dan filter stokastik ganda, mampu secara efektif mengidentifikasi titik pembalikan, menangkap tren jangka menengah, dan melacak fluktuasi harga.
Risiko dapat dikurangi dengan mengoptimalkan parameter SMI dan RSI untuk menurunkan probabilitas mengejar/membunuh, menggunakan martingale secara strategis dengan mengontrol rasio skala dan waktu, dan memungkinkan filter berdasarkan kondisi pasar.
Strategi ini menggabungkan indikator stokastik ganda untuk menangkap titik pembalikan, dengan filter dan martingale untuk seleksi dan pengejaran sinyal perdagangan. Ini dapat secara efektif mengidentifikasi tren jangka menengah dan melacak fluktuasi harga, cocok untuk investor yang mengejar tingkat kemenangan yang tinggi. Perhatikan risiko pasar indikator yang tertinggal dan berkisar, mengelola risiko dengan optimasi parameter dan stop loss.
/*backtest start: 2022-09-30 00:00:00 end: 2023-10-06 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", 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") //Backtesting Input Range 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()