Cette stratégie est appeléeStratégie de l'indicateur de la STI pour la dynamique à double fenêtre mobileL'idée de base de cette stratégie est d'utiliser deux fenêtres coulissantes EMA pour lisser les fluctuations des prix, puis de combiner les changements de direction de la tendance pour construire un indicateur de dynamique qui reflète le pouvoir d'achat et de vente sur le marché, à savoir l'indicateur TSI, et de l'utiliser comme signal de trading pour prendre des décisions d'achat et de vente.
Cette stratégie utilise deux fenêtres coulissantes doubles moyennes mobiles exponentielles pour calculer les variations de prix.
Comptez d'abord la variation unitaire du prix:
pc = change(price)
Ensuite, utilisez deux fenêtres coulissantes pour doubler les changements de prix:
double_smoothed_pc = double_smooth(pc, long, short)
Calculer ensuite la valeur absolue de la variation de prix, qui est également doublement lissée à l'aide de deux fenêtres coulissantes:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Enfin, on utilise la variation de prix lissée divisée par la variation de prix absolue lissée pour obtenir l'indicateur de la STI qui reflète le pouvoir d'achat:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
En définissant des durées différentes de périodes de fenêtre longues et courtes, le bruit du marché à court terme peut être filtré dans une certaine mesure, de sorte que l'indicateur de la STI puisse mieux refléter le pouvoir d'achat et de vente dans les tendances à moyen et à long terme.
Il peut être optimisé en ajustant les paramètres de la période de fenêtre et en raccourcissant de manière appropriée la longueur moyenne mobile du signal.
Cette stratégie calcule l'indicateur de dynamique TSI reflétant le pouvoir d'achat et de vente basé sur le double lissage des changements de prix. Les fenêtres coulissantes doubles filtrent le bruit. Le double lissage des variations de prix rend également l'indicateur plus stable et fiable. Le ratio standardisé le rend comparable. L'indicateur combine la direction et l'ampleur des changements de prix en tant que source de signal de haute qualité. Grâce à l'ajustement des paramètres, la sensibilité de l'indicateur peut être librement contrôlée. Avec l'optimisation des paramètres et le contrôle des risques en place, c'est un choix de stratégie de trading quantitative très pratique.
/*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)