Diese Strategie integriert die Indikatoren Relative Strength Index (TSI), Commodity Channel Index (CCI) und Hull Moving Average (Hull MA), um eine Trend-Tracking-Handelsstrategie zu bilden.
Die Strategie verwendet hauptsächlich die TSI und die CCI-Indikatoren zur Beurteilung der Trendrichtung und der Überkauf-/Überverkaufssituationen des Marktes sowie die Hull MA zur Bestimmung der Zwischenentwicklung der Preise, wobei die drei als Grundbedingungen für die Eröffnung von Positionen kombiniert werden.
Insbesondere wenn die schnelle Linie der TSI über die langsame Linie geht, geht der CCI-Indikator über +20 && n1 und geht lang; wenn die schnelle Linie der TSI unter die langsame Linie geht, geht der CCI-Indikator unter -20 && n1 und fällt, geht er kurz. Hull MA wird verwendet, um den Zwischentrend zu filtern, wobei der Preis nur lang geht, wenn er unter Hull MA liegt, und kurz geht, wenn er über Hull MA liegt.
Durch die Bestätigung mit Indikatoren über verschiedene Zyklen hinweg können falsche Ausbrüche effektiv gefiltert werden, um mittelfristige und langfristige Trends zu verfolgen.
Dies ist eine relativ stabile und effiziente Trendverfolgungsstrategie mit folgenden Hauptvorteilen:
Die Verwendung von TSI zur Beurteilung der langfristigen Trendrichtung ist zuverlässiger und vermeidet Störungen durch kurzfristigen Marktlärm.
Der Hinzufügen des CCI-Indikators kann Überkauf-/Überverkaufsphänomene bestätigen und einige falsche Signale herausfiltern.
Das Urteil der Hull MA
Die Integration von Indikatoren mit verschiedenen Parametern kann die Zuverlässigkeit der Signale verbessern und die Interferenzwahrscheinlichkeit verringern.
Flexible Parameter-Einstellungen der Strategie können für verschiedene Marktzyklen optimiert werden.
Obwohl die Strategie relativ stabil ist, sind einige Risiken zu beachten:
Der Markt kann gewaltsame Umkehrungen erleben, die nicht schnell gegen Verluste gestoppt werden können und relativ große Verluste verursachen;
Die TSI Diff und die CCI-Anzeige können beide falsche Signale und Verzögerungen aufweisen, wobei einige Eingangspunkte fehlen.
Eine unsachgemäße Einstellung der Parameter kann auch zu einer übermäßig hohen Handelsfrequenz oder zu einer Abnahme der Signalqualität führen.
Gegenmaßnahmen:
Einfache Verluste werden entsprechend angepasst;
Bestätigen Sie mit anderen Indikatoren, um die Signalgenauigkeit zu verbessern;
Anpassung der Parameter an den Markt, um die Strategie zu stabilisieren.
Die Strategie kann auch in folgenden Aspekten optimiert werden:
Versuchen Sie verschiedene Kombinationen von Parameterindikatoren, um die beste Übereinstimmung zu finden;
Einführung von Algorithmen für maschinelles Lernen zur Erreichung einer adaptiven Optimierung von Parametern;
Erhöhung des Kapitalmanagementmoduls für stabilere Gewinne;
Fügen Sie mehr Filter ein, um die Gewinnrate der Strategie zu erhöhen.
Diese werden die Schwerpunkte für zukünftige Optimierungen sein.
Diese Strategie nutzt umfassend die TSI-, CCI- und Hull-MA-Indikatoren, um eine relativ stabile und effiziente Trendverfolgungsstrategie zu bilden. Sie nutzt erfolgreich die Vorteile von Mehrzyklus-Indikatoren, um die Signalkwalitat zu verbessern. Der nächste Schritt besteht darin, die Stabilität und Rentabilität der Strategie durch Parameteroptimierung, Filterverbesserung und andere Mittel weiter zu verbessern.
/*backtest start: 2022-11-21 00:00:00 end: 2023-11-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="TSI CCI Hull", shorttitle="TSICCIHULL", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills= false, calc_on_every_tick=true, pyramiding=0) long = input(title="Long Length", type=input.integer, defval=50) short = input(title="Short Length", type=input.integer, defval=50) signal = input(title="Signal Length", type=input.integer, defval=25) price=input(title="Source",type=input.source,defval=open) Period=input(25, minval=1) lineupper = input(title="Upper Line", type=input.integer, defval=100) linelower = input(title="Lower Line", type=input.integer, defval=-100) p=price length= Period 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) keh = tsi_value*5 > linelower ? color.red : color.lime teh = ema(tsi_value*5, signal*5) > lineupper ? color.red : color.lime meh = ema(tsi_value*5, signal*5) > tsi_value*5 ? color.red : color.lime i1=plot(tsi_value*5, title="TSI Value", color=color.black, linewidth=1,transp=100) i2=plot(ema(tsi_value*5, signal*5), title="TSI Signal", color=color.black, linewidth=1,transp=100) fill(i1,i2,color=meh,transp=85) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.black, linewidth=10) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.white, linewidth=8,transp=0) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=meh, linewidth=5) n2ma = 2 * wma(p, round(length / 2)) nma = wma(p, length) diff = n2ma - nma sqn = round(sqrt(length)) n1 = wma(diff, sqn) cci = (p - n1) / (0.015 * dev(p, length)) c = cci > 0 ? color.lime : color.red c1 = cci > 20 ? color.lime : color.silver c2 = cci < -20 ? color.red : color.silver cc=plot(cci, color=c, title="CCI Line", linewidth=2) cc2=plot(cci[1], color=color.gray, linewidth=1,transp=100) fill(cc,cc2,color=c,transp=85) plot(cross(20, cci) ? 20 : na, style=plot.style_cross,title="CCI cross UP", color=c1, linewidth=2,transp=100,offset=-2) plot(cross(-20, cci) ? -20 : na, style=plot.style_cross,title="CCI cross down", color=c2, linewidth=2,transp=100,offset=-2) TSI1=ema(tsi_value*5, signal*5) TSI2=ema(tsi_value*5, signal*5)[2] hullma_smoothed = wma(2*wma(n1, Period/2)-wma(n1, Period), round(sqrt(Period))) //plot(hullma_smoothed*200) longCondition = TSI1>TSI2 and hullma_smoothed<price and cci>0 if (longCondition and cci>cci[1] and cci > 0 and n1>n1[1]) strategy.entry("Buy Here", strategy.long) shortCondition = TSI1<TSI2 and hullma_smoothed>price and cci<0 if (shortCondition and cci<cci[1] and cci < 0 and n1<n1[1]) strategy.entry("Sell Here", strategy.short)