
Die Hauptidee der Strategie ist es, eine möglichst genaue Trendverfolgung zu erreichen. Sie beurteilt die Wahrscheinlichkeit, dass die aktuelle lineare Tendenz fortbesteht, indem sie die Vertrauenshöhe für eine bestimmte Anzahl von Abschlusskursen in der Vergangenheit berechnet. Die Strategie geht davon aus, dass es wahrscheinlicher ist, dass die auftretenden linearen Trends fortbestehen, sobald die Vertrauenshöhe über ein bestimmtes Niveau hinausgeht.
Die Strategie berechnet die lineare Übereinstimmung der letzten N Schließungspreise durch die Methode der gewöhnlichen linearen Regression und erhält die Schräglage k für die lineare Übereinstimmung und die Abweichungs-Standarddifferenz gegenüber dem Schließungspreisσ。 und definiert dann die Trendunsicherheit als k/σ。
Wenn der Trend vertrauenswert ist, mehr als der Zins zu tun, mehr als die Einstiegsmethode, mehr zu tun; wenn der Rückgang zu Zins zu tun, mehr als die Ausgleichsmethode, ausgeglichen. Gleichermaßen, wenn der Trend vertrauenswert ist, weniger als der Zins zu machen, die Einstiegsmethode, ausgeglichen; wenn der Zins über die Ausgleichsmethode, ausgeglichen.
Auf diese Weise kann es die Signale von wilden Preisbewegungen filtern, die keinen klaren linearen Trend verfolgen.
Die Strategie kombiniert die Methoden der Trendverfolgung und der linearen Regression in der Statistik, um kurzfristige Preisschwankungen zu vermeiden und nur langfristigen Trends zu folgen, wodurch eine niedrigere Handelsfrequenz und eine höhere Gewinnquote erzielt wird.
Die Strategie hat viel Spielraum für Parameter und kann durch die Anpassung der Parameter an die verschiedenen Sorten und Zeiträume eine gute Generalisierung erzielen.
Es besteht die Gefahr, dass die Strategie eingeschränkt wird. Die Strategie führt zu einem größeren Verlust, wenn der Preis eine deutliche Trendwende aufweist. Darüber hinaus kann die falsche Einstellung der Parameter zu übertriebenen oder verpassten Handelsmöglichkeiten führen.
Es ist möglich, Stop-Losses einzurichten, um das Verlustrisiko zu kontrollieren. Gleichzeitig muss die Auswahl der Parameter sorgfältig bewertet werden, um eine Überoptimierung zu vermeiden.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Erhöhung der Stop-Loss-Logik, um Gewinne zu sichern und Risiken zu kontrollieren
Hinzufügen von Parametern, die sich an die Optimierungsmodule anpassen, so dass sie dynamisch angepasst werden können
Erhöhung der Wahrscheinlichkeit, dass eine Strategie erfolgreich ist, durch die Einführung von Machine-Learning-Modellen, die Trendwendepunkte ermitteln
Versuchen, sich mit verschiedenen Sorten und Zeitabschnitten anzupassen, um die Fähigkeit zur Verallgemeinerung zu verbessern
Insgesamt ist die Strategie eine quantitative Strategie, die auf langfristigen Trends basiert und Risiken kontrolliert. Sie kombiniert Trendverfolgung und lineare Regressionsmethoden, die Geräuschhandelssignale filtern können. Durch die Parameter-Anpassung kann sie sich gut an verschiedene Sorten und Perioden anpassen und ist eine effektive Strategie, die es wert ist, untersucht und verbessert zu werden.
/*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)