Die Hauptidee dieser Strategie besteht darin, eine möglichst präzise Trendfolgestrategie umzusetzen. Sie beurteilt die Kontinuitätsmöglichkeit des aktuellen linearen Trends durch Berechnung der
Die Strategie berechnet die lineare Anpassung der letzten N Schlusskurse mittels gewöhnlicher linearer Regression und ermittelt die Steigung k und die Standardabweichung σ der Abweichung von den Schlusskursen.
Wenn das Trendvertrauen die
Auf diese Weise kann es Signale von Wild-Preisbewegungen, die nicht einem klaren linearen Trend folgen, filtern.
Die Strategie kombiniert in der Statistik Trendfolging und lineare Regressionsmethoden, die es vermeiden können, kurzfristigen Preisschwankungen zu folgen und nur langfristigen Trends folgen, wodurch eine geringere Handelsfrequenz und eine höhere Gewinnrate erzielt werden.
Die Strategie verfügt über einen großen Parameter-Tuning-Raum und kann durch Anpassung der Parameter an verschiedene Produkte und Zeitrahmen angepasst werden, wodurch eine gute Verallgemeinerbarkeit erreicht wird.
Die Strategie birgt die Gefahr, dass sie gefangen wird. Sie wird bei einer signifikanten Trendumkehr große Verluste verursachen. Darüber hinaus können unsachgemäße Parameter-Einstellungen auch zu einem Übertrading oder dem Verpassen guter Handelsmöglichkeiten führen.
Der Stopp-Loss kann so eingestellt werden, dass das Abwärtsrisiko kontrolliert wird. Gleichzeitig muss die Wahl der Parameter sorgfältig geprüft werden, um eine Überanpassung zu vermeiden.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Hinzufügen einer Stop-Loss-/Take-Profit-Logik, um Gewinne zu erzielen und Risiken zu kontrollieren
Hinzufügen eines adaptiv optimierten Moduls für dynamische Parameteranpassung
Hinzufügen von maschinellen Lernmodellen, um Trendumkehrpunkte zu bestimmen und die Gewinnrate weiter zu verbessern
Versuche Anpassungsfähigkeit an verschiedenen Produkten und Zeitrahmen zur Verbesserung der Verallgemeinerung
Im Allgemeinen handelt es sich um eine langfristige Trend-Folge-Strategie mit Risikokontrolle. Sie kombiniert Trend-Folge- und lineare Regressionsmethoden, um Lärm-Handelssignale auszufiltern. Durch Parameter-Tuning kann sie sich gut an verschiedene Produkte und Zeitrahmen anpassen und ist eine effektive Strategie, die eine eingehende Forschung und Verbesserung wert ist.
/*backtest start: 2022-11-15 00:00:00 end: 2023-11-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © carefulCamel61097 // ################################################################################################ // "This is a trend following strategy that performed very well on the past 5 years" // "Intended to be used on BTC-USDT, 4hr timeframe" // "A factor 2 Leverage can be added by changing Order Size to 200% of equity" // "Higher leverage is not recommended due to big drawdowns" // "Also seems to work on 1D timeframe, although ideal parameters may be different" // "Also seems to work on ETH-USDT and some other altcoins, although ideal parameters are different" // ################################################################################################ //@version=5 strategy("Trend Following based on Trend Confidence", overlay=false ) // Inputs source = input(close) since = input(timestamp('2000-01-01'), title='Start trading interval') till = input(timestamp('2030-01-01'), title='End trading interval') length = input(30, title='Length') longs_on = input.bool(true, title='Longs') shorts_on = input.bool(true, title='Shorts') // Parameters for best performance 2018 - 2022 // long_entry = input.float(0.26, step=0.01, title='Long entry threshold') // long_exit = input.float(-0.10, step=0.01, title='Long exit threshold') // short_entry = input.float(-0.24, step=0.01, title='Short entry threshold') // short_exit = input.float(-0.04, step=0.01, title='Short exit threshold') long_entry = input.float(0.25, step=0.01, title='Long entry threshold') long_exit = input.float(-0.10, step=0.01, title='Long exit threshold') short_entry = input.float(-0.25, step=0.01, title='Short entry threshold') short_exit = input.float(-0.05, step=0.01, title='Short exit threshold') stop_loss = input.float(10, step=1, title='Stop loss (percentage)') / 100 // Trend Confidence linreg = ta.linreg(source, length, 0) linreg_p = ta.linreg(source, length, 0+1) x = bar_index slope = linreg - linreg_p intercept = linreg - x*slope deviationSum = 0.0 for i = 0 to length-1 deviationSum := deviationSum + math.pow(source[i]-(slope*(x-i)+intercept), 2) deviation = math.sqrt(deviationSum/(length)) slope_perc = slope / source[0] deviation_perc = deviation / source[0] trend_confidence = slope_perc / deviation_perc // Strategy in_interval = true sl_long = strategy.position_avg_price * (1 - stop_loss) sl_short = strategy.position_avg_price * (1 + stop_loss) if in_interval and longs_on and ta.crossover(trend_confidence, long_entry) strategy.entry("TC Long Entry", strategy.long) strategy.exit("TC Long Exit", stop=sl_long) if in_interval and longs_on and ta.crossunder(trend_confidence, long_exit) strategy.close("TC Long Entry") if in_interval and shorts_on and ta.crossunder(trend_confidence, short_entry) strategy.entry("TC Short Entry", strategy.short) strategy.exit("TC Short Exit", stop=sl_short) if in_interval and shorts_on and ta.crossover(trend_confidence, short_exit) strategy.close("TC Short Entry") // Plots plot(trend_confidence, "Trend Confidence", color.rgb(255, 255, 255)) plot(long_entry, "", color.rgb(0, 255, 0), linewidth=1) plot(long_exit, "", color.rgb(255, 0, 0), linewidth=1) plot(short_entry, "", color=bar_index % 10 == 0 ? color.rgb(0, 255, 0) : #00000000, linewidth=1) plot(short_exit, "", color=bar_index % 10 == 0 ? color.rgb(255, 0, 0) : #00000000, linewidth=1)