Strategi ini disebutStrategi Indikator TSI Jendela Bergerak Ganda MomentumIde inti dari strategi ini adalah menggunakan jendela geser EMA ganda untuk meringankan fluktuasi harga, dan kemudian menggabungkan perubahan arah tren untuk membangun indikator momentum yang mencerminkan daya beli dan jual di pasar, yaitu indikator TSI, dan menggunakannya sebagai sinyal perdagangan untuk membuat keputusan beli dan jual.
Strategi ini menggunakan jendela geser ganda dengan rata-rata bergerak eksponensial ganda untuk menghitung perubahan harga. Periode jendela luar lebih lama dan periode jendela dalam lebih pendek.
Pertama, hitung perubahan harga satuan:
pc = change(price)
Kemudian gunakan jendela geser ganda untuk meluruskan dua kali perubahan harga:
double_smoothed_pc = double_smooth(pc, long, short)
Kemudian hitung nilai absolut dari perubahan harga, yang juga dihaluskan dua kali menggunakan jendela geser ganda:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Akhirnya, gunakan perubahan harga rata dibagi dengan perubahan harga absolut rata untuk mendapatkan indikator TSI yang mencerminkan daya beli dan penjualan:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
Dengan menetapkan panjang yang berbeda dari periode jendela panjang dan pendek, kebisingan pasar dalam jangka pendek dapat disaring sampai batas tertentu, sehingga indikator TSI dapat lebih mencerminkan daya beli dan penjualan dalam tren jangka menengah dan jangka panjang.
Ini dapat dioptimalkan dengan menyesuaikan parameter periode jendela dan memperpendek panjang rata-rata bergerak sinyal dengan tepat.
Strategi ini menghitung indikator momentum TSI yang mencerminkan daya beli dan jual berdasarkan perataan ganda perubahan harga. Jendela geser ganda menyaring kebisingan. Perataan ganda variasi perubahan harga juga membuat indikator lebih stabil dan dapat diandalkan. Rasio standar membuatnya dapat dibandingkan. Indikator ini menggabungkan arah dan magnitudo perubahan harga sebagai sumber sinyal berkualitas tinggi. Melalui penyesuaian parameter, sensitivitas indikator dapat dikendalikan secara bebas. Dengan optimasi parameter dan kontrol risiko, ini adalah pilihan strategi perdagangan kuantitatif yang sangat praktis.
/*backtest start: 2023-01-01 00:00:00 end: 2024-01-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("True Strength Indicator BTCUSD 2H", shorttitle="TSI BTCUSD 2H",initial_capital=1000, commission_value=0.2, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity) //BASED ON True Strength Indicator MTF resCustom = input(title="Timeframe", defval="120" ) long = input(title="Long Length", defval=25) short = input(title="Short Length", defval=13) signal = input(title="Signal Length", defval=13) length = input(title="Период", defval=300) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" price = request.security(syminfo.tickerid,resCustom,close) double_smooth(src, long, short) => fist_smooth = ema(src, long) ema(fist_smooth, short) pc = change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) tsi2=ema(tsi_value, signal) plot(tsi_value, color=lime,linewidth=2) plot(tsi2, color=red,linewidth=2) hline(30, title="Zero") hline(50, title="Zero",linewidth=2) hline(70, title="Zero") buy = crossover(tsi_value, tsi2) sell = crossunder(tsi_value, tsi2) if(buy) strategy.entry("BUY", strategy.long, when = window()) if(sell) strategy.entry("SELL", strategy.short, when = window()) //greentsi =tsi_value //redtsi = tsi2 //bgcolor( greentsi>redtsi and rsiserie > 50 ? lime : na, transp=90) //bgcolor( greentsi<redtsi and rsiserie < 50 ? red : na, transp=90) //yellow1= redtsi > greentsi and rsiserie > 50 //yellow2 = redtsi < greentsi and rsiserie < 50 //bgcolor( yellow1 ? yellow : na, transp=80) //bgcolor( yellow2 ? yellow : na, transp=50) //bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70) //bgcolor( yellow2 and yellow2[2] ? yellow : na, transp=70) //bgcolor( rsiserie > 70 ? lime : na, transp=60) //bgcolor( rsiserie < 30 ? red : na, transp=60)