Strategie auf Basis von Trendvertrauen

Schriftsteller:ChaoZhang, Datum: 23.11.2023
Tags:

img

Übersicht

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 Vertrauenheit einer bestimmten Anzahl von vergangenen Schlusskursen. Die Strategie geht davon aus, dass, sobald das Vertrauen ein bestimmtes Niveau überschreitet, der laufende lineare Trend wahrscheinlich weitergehen wird.

Strategieprinzip

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 long entry-Schwelle überschreitet, gehen Sie lang; wenn es auf die long exit-Schwelle sinkt, schließen Sie lang.

Auf diese Weise kann es Signale von Wild-Preisbewegungen, die nicht einem klaren linearen Trend folgen, filtern.

Analyse der Vorteile

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.

Risikoanalyse

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.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Hinzufügen einer Stop-Loss-/Take-Profit-Logik, um Gewinne zu erzielen und Risiken zu kontrollieren

  2. Hinzufügen eines adaptiv optimierten Moduls für dynamische Parameteranpassung

  3. Hinzufügen von maschinellen Lernmodellen, um Trendumkehrpunkte zu bestimmen und die Gewinnrate weiter zu verbessern

  4. Versuche Anpassungsfähigkeit an verschiedenen Produkten und Zeitrahmen zur Verbesserung der Verallgemeinerung

Schlussfolgerung

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)


Mehr