Esta estratégia é denominadaEstratégia do indicador da ETI "Ponto de Impulso"A ideia central desta estratégia consiste em utilizar duas janelas deslizantes da EMA para suavizar as flutuações de preços e, em seguida, combinar as alterações direcionais da tendência para construir um indicador de dinâmica que reflita o poder de compra e venda no mercado, nomeadamente o indicador TSI, e utilizá-lo como sinal de negociação para tomar decisões de compra e venda.
Esta estratégia usa duas janelas deslizantes, duas médias móveis exponenciais para calcular as mudanças de preço. O período da janela externa é mais longo e o período da janela interna é mais curto.
Primeiro, calcule a variação unitária do preço:
pc = change(price)
Em seguida, use duas janelas deslizantes para dobrar as mudanças de preço:
double_smoothed_pc = double_smooth(pc, long, short)
Calcule então o valor absoluto da variação de preço, que também é duplamente suavizado utilizando duas janelas deslizantes:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Por último, utilizar a variação de preço suavizada dividida pela variação de preço absoluto suavizada para obter o indicador da ETI que reflete o poder de compra e de venda:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
Ao fixar períodos de janela longos e curtos de duração diferente, o ruído do mercado no curto prazo pode ser filtrado até certo ponto, de modo que o indicador da ETI possa refletir melhor o poder de compra e de venda nas tendências de médio e longo prazo.
Quando o mercado flutua, a negociação pode ser temporariamente interrompida para controlar os riscos.
Esta estratégia calcula o indicador de impulso TSI que reflete o poder de compra e venda com base na dupla suavização das mudanças de preço. As janelas de deslizamento dupla filtram o ruído. A dupla suavização das variações de preço também torna o indicador mais estável e confiável. A relação padronizada o torna comparável. O indicador combina a direção e a magnitude das mudanças de preço como uma fonte de sinal de alta qualidade. Através do ajuste de parâmetros, a sensibilidade do indicador pode ser livremente controlada. Com otimização de parâmetros e controle de risco, é uma escolha de estratégia de negociação quantitativa muito prática.
/*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)