Zwei-Richtungs-Trend-Tracking-Strategie basierend auf dem Range-Breakout

Schriftsteller:ChaoZhang, Datum: 2024-02-01 14:22:26
Tags:

img

Übersicht

Diese Strategie berechnet den letzten höchsten Preis (lastbull) und den letzten niedrigsten Preis (lastbear). Sie vergleicht dann den aktuellen Preis mit lastbull und lastbear, um festzustellen, ob der Preis einen bestimmten Bereich erreicht hat und erzeugt somit Handelssignale.

Strategie Logik

Die Strategie berechnet zunächst den letzten höchsten Preis lastbull und den letzten niedrigsten Preis lastbear. anschließend berechnet sie die prozentuale Änderung ddl des aktuellen Preisnahen im Verhältnis zu lastbull und die prozentuale Änderung dds im Verhältnis zu lastbear.

Wenn ddl niedriger ist als die konfigurierte lange Signalschwellenlänge, wird ein langes Signal erzeugt. Wenn dds höher ist als die konfigurierte kurze Signalschwellenlänge, wird ein kurzes Signal generiert.

Nach Empfang des langen Signals eröffnet er eine lange Position, wenn der Needlong-Parameter wahr ist. Nach Empfang des Short-Signals eröffnet er eine Short-Position, wenn der Needshort-Parameter wahr ist. Die Positionsgröße wird aus dem Kontokapital berechnet.

Sie schließt eine Long-Position, wenn der Preis nach dem Eröffnen Long steigt, und schließt eine Short-Position, wenn der Preis nach dem Eröffnen Short fällt.

Analyse der Vorteile

Diese Strategie kombiniert Trend- und Range-Analyse. Sie kann Trends erfassen und Handelssignale aus Range-Breakouts generieren. Im Vergleich zu einfachen Trend-Tracking-Strategien kann sie nach dem Range-Breakout schnell eine neue Trendrichtung erfassen.

Die Parameter sind für verschiedene Produkte sehr konfigurierbar. Der Handelszeitbereich kann so konfiguriert werden, dass signifikante Ereignisse vermieden werden.

Risikoanalyse

Es gibt keinen Stop-Loss-Mechanismus in dieser Strategie, um den Verlust pro Handel zu begrenzen.

Der Standverlust kann hinzugefügt werden, um den Verlust pro Handel zu begrenzen. Der Positionsgrößenalgorithmus kann anhand von Produkten angepasst werden, um die Positionsgröße zu stabilisieren.

Optimierungsrichtlinien

  1. Hinzufügen eines beweglichen Stop-Loss zum Kontrollrisiko pro Handel
  2. Verbesserung des Positionsgrößenalgorithmus, z. B. Verwendung von ATR zur Stabilisierung der Positionsgröße
  3. Filterung für Eingangssignale hinzufügen, z. B. nur eingeben, wenn goldene Kreuz passiert
  4. Handel mit mehreren Produkten mit einer Korrelation zu einem geringeren Systemrisiko

Zusammenfassung

Diese Strategie kombiniert Trendanalyse und Range Breakout, um Handelssignale zu generieren, die neue Trends erfassen und von den Range-Binded-Charakteristiken profitieren können.


/*backtest
start: 2023-01-25 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's DDL Strategy", shorttitle = "DDL str", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, title = "Long")
needshort = input(true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
signalshort = input(3.0, title = "Short, %")
signallong = input(-3.0, title = "Long, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Levels
bull = close > close[1] ? 1 : 0
bear = close < close[1] ? 1 : 0
lastbull = 0.0
lastbull := bull ? close : lastbull[1]
lastbear = 0.0
lastbear := bear ? close : lastbear[1]

//Signals
ddl = ((close / lastbull) - 1) * 100
up = ddl < signallong
dds = ((close / lastbear) - 1) * 100
dn = dds > signalshort

//Lines
plot(dds, style = plot.style_area, color = color.red, transp = 0)
plot(ddl, style = plot.style_area, color = color.lime, transp = 0)
plot(0, color = color.black, linewidth = 2, transp = 0)

//Background
col = (up and needlong) or (dn and needshort) ? color.yellow : na
bgcolor(col, transp = 20)

//Orders
lot = 0.0
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if up
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if dn
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if strategy.position_size > 0 and close > open
    strategy.entry("Close", strategy.short, 0)
if strategy.position_size < 0 and close < open
    strategy.entry("Close", strategy.long, 0)

Mehr