AlphaTrend-Zwischenzeitstrategie

Schriftsteller:ChaoZhang, Datum: 2023-09-28 11:05:27
Tags:

Übersicht

Diese Strategie basiert auf dem AlphaTrend-Indikator, der die Vorteile von RSI- und MFI-Indikatoren kombiniert und gute Ergebnisse sowohl auf bullish als auch auf bearish trending Märkten erzielen kann.

Strategie Logik

  1. Berechnung des ATR-Indikators zur Messung der Marktvolatilität
  2. Verwendung des RSI zur Bestimmung der Marktrichtung, wenn keine Volumendaten vorliegen; Verwendung von MFI, wenn Volumendaten vorliegen
  3. Berechnung der oberen und unteren Bands auf der Grundlage von ATR und Marktrichtung
  4. Berechnung der AlphaTrend-Kurve, die dynamische obere und untere Bands beinhaltet
  5. Erstellen Sie Kauf- und Verkaufssignale, wenn der Preis über oder unter der AlphaTrend-Kurve kreuzt

Die Strategie stützt sich hauptsächlich auf die AlphaTrend-Kurve, um die Kurstrendrichtung zu bestimmen. Sie berücksichtigt ATR, RSI/MFI und kann den Trend effektiv verfolgen.

Vorteile

  1. AlphaTrend kombiniert die Stärken von RSI und MFI und kann sich sowohl an die Bullen- als auch an die Bärenmärkte anpassen.
  2. Dynamische obere und untere Bands werden automatisch anhand der Marktvolatilität angepasst
  3. Vermeidet falsche Signale, enthält sowohl Preis- als auch Volumeninformationen
  4. Der Breakout-Ansatz zeigt deutlich, in welche Richtung sich der Trend bewegt.
  5. Einfach und leicht verständlich

Zusammenfassend lässt sich sagen, dass diese Strategie sowohl für bullische als auch für bärische Märkte geeignet ist, dass sie Marktlärm effektiv filtert, Trends genau identifiziert und eine effiziente Trendfolgestrategie darstellt.

Risiken

  1. Die AlphaTrend-Kurve kann falsche Ausbrüche aufweisen, die von anderen Indikatoren bestätigt werden müssen.
  2. Während der Marktkonsolidierung können viele falsche Signale auftreten
  3. Nichteffiziente Ergebnisse durch schlechte Parameter-Tuning
  4. Bei Spikes kann ein Stop-Loss getätigt werden, wodurch große Verluste entstehen

Um den Risiken entgegenzuwirken, kann der Stop-Loss einen einzelnen Handelsverlust kontrollieren; mit anderen Indikatoren kombiniert werden, um falsche Signale zu vermeiden; Parameter auf der Grundlage verschiedener Märkte angepasst werden.

Möglichkeiten zur Verbesserung

  1. Verschiedene Parameterkombinationen für optimierte Einstellungen testen
  2. Einbeziehung anderer Indikatoren zur Erstellung von Bestätigungsbedingungen
  3. Die Risiken werden durch dynamische oder nachläufige Stop-Loss-Kontrollen kontrolliert.
  4. Handel in verschiedenen Zeitrahmen (5m, 15m usw.) basierend auf den Marktbedingungen
  5. Verfeinern Sie das Eintrittszeitsystem für einen präziseren Eintritt

Weitere Optimierungen können durch Tests auf verschiedenen Märkten und Parametern durchgeführt werden, damit die Strategie an mehr Marktbedingungen angepasst werden kann.

Schlussfolgerung

Insgesamt ist diese AlphaTrend-Strategie ein einfaches und effizientes Trendfolgensystem. Sie enthält sowohl Preis- als auch Volumeninformationen, um sich an bullische und bärische Märkte anzupassen. Der Breakout-Mechanismus liefert klare Einstiegssignale. Mit einer angemessenen Risikokontrolle kann es gute Ergebnisse erzielen. Weitere Tests und Verbesserungen können dazu beitragen, die Rentabilität über mehr Marktbedingungen hinweg zu stabilisieren.


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-26 00:00:00
period: 30m
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
// pv additions, simplification and strategy conversion @ treigen
//@version=5
strategy('AlphaTrend For ProfitView', overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000)
coeff = input.float(1.5, 'Multiplier', step=0.1)
AP = input(15, 'Common Period')
ATR = ta.sma(ta.tr, AP)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)

i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting')
i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting')
timeCond = true

pv_ex = input.string('', title='Exchange', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_sym = input.string('', title='Symbol', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_acc = input.string("", title="Account", group='PV Settings')
pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings')
pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings')
pv_alert_test = input.bool(false, title="Test Alerts", tooltip="Will immediately execute the alerts, so you may see what it sends. The first line on these test alerts will be excluded from any real alert triggers" ,group='PV Settings')

upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(close, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT


k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])

var exsym = ""
if barstate.isfirst
    exsym := pv_ex == "" ? "" : "ex=" + pv_ex + ","
    exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym + ","


if barstate.isconfirmed and timeCond 
    if strategy.position_size <= 0 and buySignalk
        strategy.entry("Buy", strategy.long)
        alert(pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)
    if strategy.position_size >= 0 and sellSignalk
        strategy.entry("Sell", strategy.short)
        alert(pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)


//  Only used for testing/debugging alert messages
if pv_alert_test
    alert("<![Alert Test]!>\n" + pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)
    alert("<![Alert Test]!>\n" + pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)


Mehr