
Esta estrategia se llamaEstrategia para el índice TSI de las ventanas de doble deslizamientoLa idea central de la estrategia es utilizar el doble de la ventana de deslizamiento EMA para suavizar los cambios de precio, y luego combinar los cambios de dirección de la tendencia, para construir un indicador de la dinámica que refleja la fuerza de compra y venta en el mercado, es decir, el indicador TSI, y utilizarlo como una señal de negociación para tomar decisiones de compra y venta.
Esta estrategia utiliza una doble ventana de deslizamiento de la media móvil binaria para calcular el movimiento de los precios. La ventana exterior es más larga y la ventana interior es más corta.
En primer lugar, se calcula el cambio en la unidad de precio:
pc = change(price)
Luego, se utiliza una doble ventana deslizante para el doble deslizamiento de los cambios de precio:
double_smoothed_pc = double_smooth(pc, long, short)
Calcule de nuevo el valor absoluto de la variación del precio, también usando una doble ventana deslizante para el doble suavizado:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Finalmente, el cambio de precio después de la suavización dividido por el valor absoluto del cambio de precio después de la suavización, se obtiene el indicador TSI que refleja la fuerza de compra y venta:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
Mediante la configuración de períodos de ventana más largos y más cortos, se puede filtrar el ruido del mercado a corto plazo hasta cierto punto, lo que hace que el TSI refleje mejor la fuerza de compra y venta en las tendencias a medio y largo plazo. Se produce una señal de compra cuando se cruza su media móvil en el TSI y una señal de venta cuando se cruza su media móvil debajo del TSI.
Se puede optimizar ajustando los parámetros de período de la ventana, reduciendo la longitud de la media de la señal de manera adecuada; cuando el mercado se tambalea, se puede suspender temporalmente el comercio para controlar el riesgo.
Esta estrategia se basa en el cálculo de doble suavizado del índice de movimiento TSI que refleja la fuerza de compra y venta, el ruido de filtro de doble ventana deslizante, los cambios en el cambio de precio también son doblemente suavizados, el indicador es más estable y confiable; adopta un índice estandarizado, tiene comparabilidad; el indicador integra la dirección y la intensidad del cambio de precio, como una señal de alta calidad; la sensibilidad del indicador se puede controlar libremente mediante el ajuste de parámetros. En caso de optimización de parámetros y control del riesgo, es una opción de estrategia de negociación 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)