Strategi ini dinamakanStrategi Indikator STI Jendela Bergerak Berganda MomentumIdea teras strategi ini adalah untuk menggunakan jendela gelongsor EMA berganda untuk merata turun naik harga, dan kemudian menggabungkan perubahan arah trend untuk membina penunjuk momentum yang mencerminkan daya beli dan jual di pasaran, iaitu penunjuk TSI, dan menggunakannya sebagai isyarat perdagangan untuk membuat keputusan beli dan jual.
Strategi ini menggunakan dua tingkap bergeser rata-rata bergerak eksponensial ganda untuk mengira perubahan harga. Tempoh tingkap luar lebih lama dan tempoh tingkap dalaman lebih pendek. Dengan pelinciran berganda, sebahagian daripada rawak dalam data harga dikeluarkan.
Mula-mula mengira perubahan unit dalam harga:
pc = change(price)
Kemudian gunakan tingkap bergeser berganda untuk menggandakan perubahan harga:
double_smoothed_pc = double_smooth(pc, long, short)
Kemudian mengira nilai mutlak perubahan harga, yang juga dihaluskan dua kali menggunakan tingkap bergeser berganda:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Akhirnya, gunakan perubahan harga yang dihaluskan dibahagikan dengan perubahan harga mutlak yang dihaluskan untuk mendapatkan penunjuk TSI yang mencerminkan kuasa beli dan jual:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
Dengan menetapkan panjang yang berbeza untuk tempoh tetingkap yang panjang dan pendek, kebisingan pasaran dalam jangka pendek boleh disaring sehingga tahap tertentu, supaya penunjuk TSI dapat mencerminkan lebih baik daya beli dan jual dalam trend jangka sederhana dan panjang. Apabila penunjuk TSI melintasi di atas purata bergerak, isyarat beli dihasilkan; Apabila penunjuk TSI jatuh di bawah purata bergerak, isyarat jual dihasilkan.
Ia boleh dioptimumkan dengan menyesuaikan parameter tempoh tetingkap dan dengan tepat memendekkan panjang purata bergerak isyarat.
Strategi ini mengira penunjuk momentum TSI yang mencerminkan kuasa beli dan jual berdasarkan kelancaran perubahan harga dua kali. Tingkap bergeser berganda menapis bunyi bising. Kelancaran perubahan harga dua kali juga menjadikan penunjuk lebih stabil dan boleh dipercayai. Nisbah standard menjadikannya dapat dibandingkan. Penunjuk menggabungkan arah dan magnitud perubahan harga sebagai sumber isyarat berkualiti tinggi. Melalui penyesuaian parameter, kepekaan penunjuk boleh dikawal secara bebas. Dengan pengoptimuman parameter dan kawalan risiko, ia adalah pilihan strategi perdagangan kuantitatif yang sangat praktikal.
/*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)