Эта стратегия называетсяСтратегия индикатора ТСИ "Двойные подвижные окна" импульсаОсновная идея этой стратегии состоит в том, чтобы использовать двойные скользящие окна EMA для сглаживания колебаний цен, а затем объединить направленные изменения тенденции для построения индикатора импульса, отражающего покупательную и продажу на рынке, а именно индикатор TSI, и использовать его в качестве торгового сигнала для принятия решений о покупке и продаже.
Эта стратегия использует двойные скользящие экспоненциальные скользящие средние для расчета изменений цен.
Сначала вычислим единичное изменение цены:
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)
Установление разной длины длинных и коротких периодов окна может в некоторой степени отфильтровать шум рынка в краткосрочной перспективе, так что индикатор ТСО может лучше отражать покупательную и продажу в среднесрочных и долгосрочных тенденциях.
Он может быть оптимизирован путем корректировки параметров периода окна и соответствующего сокращения длины скользящей средней длины сигнала.
Эта стратегия рассчитывает индикатор импульса TSI, отражающий покупательную и продажующую способность на основе двойного сглаживания изменений цен. Двойные скользящие окна фильтруют шум. Двойное сглаживание колебаний цен также делает индикатор более стабильным и надежным. Стандартизированное соотношение делает его сопоставимым. Индикатор сочетает направление и величину изменений цен в качестве высококачественного источника сигнала. Благодаря коррекции параметров чувствительность индикатора может быть свободно контролирована. С оптимизацией параметров и контролем рисков это очень практичный выбор количественной торговой стратегии.
/*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)