Trendverfolgungsstrategie auf der Grundlage von Kanalüberschreitungen

Schriftsteller:ChaoZhang, Datum: 2023-11-23 14:04:59
Tags:

img

Übersicht

Diese Strategie ist eine Trendverfolgungsstrategie, die auf der Grundlage der Kanal-Breakout-Theorie entwickelt wurde. Sie konstruiert einen Kanal mit dem höchsten Preis und dem niedrigsten Preis über einen bestimmten Zeitraum und erzeugt Handelssignale, wenn der Preis aus dem Kanal bricht. Diese Strategie eignet sich für Trendmärkte und kann die Trendrichtung des Preises für die Trendverfolgung erfassen.

Strategie Logik

Die Strategie berechnet zunächst den höchsten Preis und den niedrigsten Preis über einen längeren Zeitraum, um das obere Band und das untere Band des Kanals zu konstruieren. Wenn der Schlusskurs durch das obere Band bricht, wird eine Long-Position eröffnet. Wenn der Schlusskurs durch das untere Band bricht, wird eine Short-Position eröffnet. Die Position wird geschlossen, wenn der Preis wieder in den Kanal fällt.

Die Strategie zeigt auch einen EMA-Indikator mit einer Länge *2 auf, um die Trendrichtung zu bestimmen.

Analyse der Vorteile

  • Die Strategie kann Preisentwicklungen erfassen und eignet sich für Trendmärkte mit hohem Gewinnpotenzial.
  • Die Verwendung von Kanalbreaches zur Erzeugung von Signalen kann falsche Breakouts reduzieren und die Signalqualität verbessern.
  • Kombination mit der EMA, um einen gegen den Trend gerichteten Handel zu vermeiden und die Verfolgung des Haupttrends sicherzustellen.

Risikoanalyse

  • Breakout-Strategien führen in der Regel zu häufigen Trades während der Preiskonsolidierung, was möglicherweise zu hohen Handelskosten führt.
  • Die Strategie kann bei Trendumkehrungen nicht sofort aus den Positionen aussteigen, was zu großen Verlusten führen kann.
  • Die Strategie ist an die Parameter-Einstellungen angepaßt und verschiedene Parameter können zu völlig unterschiedlichen Ergebnissen führen.

Optimierungsrichtlinien

  • Einbeziehen Sie andere Indikatoren wie MACD, RSI, um falsche Ausbrüche zu vermeiden.
  • Verwenden Sie maschinelle Lernalgorithmen, um automatisch Parameter zu optimieren und die Robustheit zu verbessern.
  • Setzen Sie Stop-Loss, um den maximalen Abzug zu kontrollieren.

Zusammenfassung

Zusammenfassend ist dies eine einfache Trend-Tracking-Strategie, die auf Kanal-Breakouts basiert, um Trends zu erfassen. Sie hat eine starke Trend-Tracking-Fähigkeit und kann in Trending-Märkten gute Renditen erzielen.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


initial_capital = 1000,
default_qty_value = 90,
default_qty_type = strategy.percent_of_equity,
pyramiding = 0,
commission_value = 0.002,
commission_type = strategy.commission.percent,
calc_on_every_tick = true
length_val = 2
max_bars_back = 1440
risk_max_drawdown = 9


strategy("Channel Break",max_bars_back=max_bars_back,initial_capital = initial_capital,default_qty_value = default_qty_value,default_qty_type = default_qty_type,pyramiding = pyramiding,commission_value = commission_value,commission_type = commission_type,calc_on_every_tick = calc_on_every_tick)
// strategy.risk.max_drawdown(risk_max_drawdown, strategy.percent_of_equity) 

length = input(title="Length",  minval=1, maxval=1000, defval=length_val)

upBound = highest(high, length)
downBound = lowest(low, length)

//plot (upBound)
//plot (downBound)
//plot (close, color=red)
//plot (ema(close,length * 2), color=green)
//
if (not na(close[length]) and time>timestamp(2018, 02, 24, 0, 00) )
    strategy.entry("Buy", strategy.long, stop=upBound + syminfo.mintick, comment="Buy")
    strategy.entry("Short", strategy.short, stop=downBound - syminfo.mintick, comment="Short")
    
position = strategy.position_size
    
    
//plot(position , title="equity", color=red,style=cross,linewidth=4)
plot(variance(position,2)>0?1:0,style=circles,linewidth=4)

message = ""

if (position > 0) 
    message = "BTCUSD L: " + tostring(strategy.position_size)
    na(position)
    
if (position < 0) 
    message = "BTCUSD S: " + tostring(strategy.position_size)
    na(position)

alertcondition(variance(strategy.position_size,2) > 0, "test", message )

Mehr