Diese Strategie wird alsMomentum-Doppelbewegungsfenster-TSI-IndikatorstrategieDie Kernidee dieser Strategie besteht darin, doppelte EMA-Schiebefenster zu verwenden, um Preisschwankungen zu verringern, und dann die Richtungsänderungen des Trends zu kombinieren, um einen Dynamikindikator zu konstruieren, der die Kauf- und Verkaufskraft auf dem Markt widerspiegelt, nämlich den TSI-Indikator, und ihn als Handelssignal für Kauf- und Verkaufsentscheidungen zu verwenden.
Diese Strategie verwendet zwei gleitende Fenster doppelte exponentielle gleitende Durchschnitte, um Preisänderungen zu berechnen. Die äußere Fensterperiode ist länger und die innere Fensterperiode kürzer. Durch doppelte Glättung wird ein Teil der Zufälligkeit in den Preisdaten entfernt.
Berechnen Sie zuerst die Preisänderung pro Einheit:
pc = change(price)
Verwenden Sie dann zwei gleitende Fenster, um die Preisänderungen doppelt zu glätten:
double_smoothed_pc = double_smooth(pc, long, short)
Dann berechnet man den absoluten Wert der Preisänderung, die ebenfalls mit Hilfe von zwei gleitenden Fenstern doppelt glättet wird:
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
Schließlich wird die glatte Preisänderung geteilt durch die glatte absolute Preisänderung verwendet, um den TSI-Indikator zu erhalten, der die Kauf- und Verkaufskraft widerspiegelt:
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
Durch die Festlegung unterschiedlicher Längen von langen und kurzen Fensterperioden kann kurzfristig das Marktlärm bis zu einem gewissen Grad ausgefiltert werden, so dass der TSI-Indikator die Kauf- und Verkaufskraft in mittelfristigen und langfristigen Trends besser widerspiegeln kann.
Der Markt kann optimiert werden, indem die Fensterperiodenparameter angepasst und die gleitende Durchschnittslänge des Signals angemessen verkürzt wird.
Diese Strategie berechnet den TSI-Impulsindikator, der die Kauf- und Verkaufskraft auf der Grundlage der doppelten Glättung von Preisänderungen widerspiegelt. Die doppelten gleitenden Fenster filtern Lärm aus. Die doppelte Glättung von Preisänderungsvariationen macht den Indikator auch stabiler und zuverlässiger. Das standardisierte Verhältnis macht ihn vergleichbar. Der Indikator kombiniert die Richtung und Größe der Preisänderungen als hochwertige Signalquelle. Durch die Anpassung von Parametern kann die Indikatorempfindlichkeit frei kontrolliert werden. Mit Parameteroptimierung und Risikokontrolle ist es eine sehr praktische quantitative Handelsstrategiewahl.
/*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)