Esta estrategia se llamaEstrategia de indicadores de la ETI de ventana móvil doble de impulsoLa idea central de esta estrategia consiste en utilizar dos ventanas móviles de la EMA para suavizar las fluctuaciones de precios y, a continuación, combinar los cambios direccionales de la tendencia para construir un indicador de impulso que refleje el poder de compra y venta en el mercado, a saber, el indicador TSI, y utilizarlo como señal de negociación para tomar decisiones de compra y venta.
Esta estrategia utiliza dos ventanas móviles exponenciales para calcular los cambios de precios. El período de ventana exterior es más largo y el período de ventana interior es más corto.
Primero calcule el cambio unitario en el precio:
pc = change(price)
Luego use dos ventanas correderas para suavizar el doble de los cambios de precios:
double_smoothed_pc = double_smooth(pc, long, short)
Luego, calcule el valor absoluto de la variación de precios, que también se suaviza dos veces mediante dos ventanas deslizantes:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Por último, utilizar la variación de precios suavizada dividida por la variación de precios absolutos suavizados para obtener el indicador de la ETI que refleja el poder de compra y venta:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
Mediante el establecimiento de períodos de ventanas largos y cortos de duración diferente, el ruido del mercado a corto plazo puede filtrarse hasta cierto punto, de modo que el indicador de la ETI pueda reflejar mejor el poder de compra y venta en las tendencias a medio y largo plazo.
Se puede optimizar ajustando los parámetros del período de ventana y acortando adecuadamente la longitud media móvil de la señal.
Esta estrategia calcula el indicador de impulso TSI que refleja el poder de compra y venta basado en la doble suavización de los cambios de precios. Las ventanas de doble deslizamiento filtran el ruido. La doble suavización de las variaciones de los precios también hace que el indicador sea más estable y confiable. La relación estandarizada lo hace comparable. El indicador combina la dirección y la magnitud de los cambios de precios como una fuente de señal de alta calidad. A través del ajuste de parámetros, la sensibilidad del indicador se puede controlar libremente. Con la optimización de parámetros y el control de riesgos, es una opción de estrategia comercial cuantitativa muy práctica.
/*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)