STC MA ATR Integrierte Trendhandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-10-17 14:34:10
Tags:

img

Übersicht

Diese Strategie kombiniert die technischen Indikatoren STC, Moving Average MA und Average True Range ATR, um Trends zu beurteilen und einen relativ stabilen Trend-Tracking-Handel umzusetzen.

Strategieprinzip

  1. Der STC-Indikator beurteilt die Trendumkehrung. Er nutzt die schnelle Linie minus die langsame Linie und verarbeitet dann eine sekundäre Glättung, um konsistente Trendsignale zu bilden. Das Kaufsignal kommt, wenn der Indikator über die 0-Achse und das Verkaufssignal unter die 0-Achse kreuzt.

  2. Der Moving Average MA beurteilt die Trendrichtung. Wenn der Aktienkurs über den MA überschreitet, signalisiert er einen Aufwärtstrend und gibt ein Long-Positions-Holding-Signal. Wenn der Preis unter den MA überschreitet, signalisiert er einen Abwärtstrend und gibt ein Short-Positions-Holding-Signal.

  3. Der ATR-Indikator setzt Stop-Loss und Take-Profit fest. ATR kann Stopp-Loss und Take-Profit-Punkte dynamisch anhand der Marktvolatilität anpassen. Und ATR fungiert als Signal für die Handelsrichtung selbst, steigt im Aufwärtstrend und fällt im Abwärtstrend.

  4. Die Strategie nimmt STC-Signale als Hauptzeitpunkt für den Einstieg, verwendet MA als Hilfstrendbeurteilung und ATR für Stop-Loss und Take-Profit. Wenn STC ein Kaufsignal gibt, wenn MA auch einen Aufwärtstrend zeigt und ATR steigt, eröffnet es eine Long-Position; wenn STC ein Verkaufssignal gibt, wenn MA einen Abwärtstrend zeigt und ATR fällt, eröffnet es eine Short-Position.

Analyse der Vorteile

  1. Die Strategie kombiniert mehrere Indikatoren, um Trends und Umkehrpunkte zu beurteilen und die Genauigkeit der Handelssignale zu verbessern.

  2. STC kann Umkehrsignale erfassen und vermeiden, in Trends gefangen zu werden. MA filtert unsichere Umkehrsignale, um sicherzustellen, dass der Haupttrend befolgt wird.

  3. ATR setzt dynamische Stop-Loss- und Take-Profits anhand der Marktvolatilität und vermeidet so große Verluste.

  4. Die Kombination mehrerer Indikatoren bildet eine starke Trendverfolgungsfähigkeit.

Risikoanalyse

  1. Der STC hat eine Zeitverzögerung, die den optimalen Zeitpunkt für die Preisumkehr verfehlen kann.

  2. Bei starken Kursschwankungen neigt der MA dazu, zu verzögern, was zu falschen Signalen führen kann.

  3. Der ATR-Multiplikator sollte während großer Trends gelockert oder vorübergehend deaktiviert werden.

  4. Mehr Indikatoren bedeuten mehr Chancen, einen Stop-Loss zu erzielen.

Optimierungsrichtlinien

  1. Die STC-Parameter anpassen, um schnellere Kombinationen für die Umkehrung zu finden.

  2. Optimierung des MA-Periodenparameters für eine bessere Trendverfolgung.

  3. Prüfwirkung verschiedener ATR-Multiplikatoren.

  4. Versuchen Sie, STC durch andere Indikatoren zu ersetzen, um eine bessere Übereinstimmung zu erhalten.

  5. Einführung von Algorithmen für maschinelles Lernen zur automatischen Optimierung von mehreren Parametern.

  6. Betrachten Sie große Zyklustrends und unterscheiden Sie die verschiedenen Phasen.

Zusammenfassung

Die STC MA ATR-Strategie kombiniert 3 Indikatoren, um Trendumkehrpunkte für einen stabilen Trendverfolgungshandel zu erfassen. Indikatorkombinationen filtern falsche Signale und kontrollieren Risiken mit Stop-Loss/Take-Profit. Sie hat starke Robustheit und Stabilität. Weitere Verbesserungen können durch Parameteroptimierung und Algorithmuseinführung erzielt werden. Insgesamt ist es eine zuverlässige und moderate Strategiewahl.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 4h
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/
// © Romedius

//@version=5
strategy("My Strategy", overlay=true, margin_long=100, margin_short=100)

// STC
EEEEEE=input(12,"Length",group="STC")
BBBB=input(26,"FastLength",group="STC")
BBBBB=input(50,"SlowLength",group="STC")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA
    
AAAAA(EEEEEE, BBBB, BBBBB) => 
    //AAA=input(0.5)
    var AAA = 0.5
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close,BBBB,BBBBB)     
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC    
    CCCCC := (CCCC > 0 ? ((BBBBBB - CCC) / CCCC) * 100 : nz(CCCCC[1])) 
    DDD := (na(DDD[1]) ? CCCCC : DDD[1] + (AAA * (CCCCC - DDD[1]))) 
    DDDD = ta.lowest(DDD, EEEEEE) 
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD     
    DDDDDD := (DDDDD > 0 ? ((DDD - DDDD) / DDDDD) * 100 : nz(DDDDDD[1])) 
    EEEEE := (na(EEEEE[1]) ? DDDDDD : EEEEE[1] + (AAA * (DDDDDD - EEEEE[1])))
    EEEEE

mAAAAA = AAAAA(EEEEEE,BBBB,BBBBB)
stc = mAAAAA > mAAAAA[1] ? true : false
stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0
stc_long = stc_sig == 1
stc_short = stc_sig == -1
// STC end

// ATR stops
nATRPeriod = input(5,group="ATR Stops")
nATRMultip = input(3.5,group="ATR Stops")

xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

pos = 0
pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)

atr_sig = pos == -1 ? false : true
// ATR stops end

// ma
ma_len = input(200, title="MA Length", group="Moving Average")
ma = ta.sma(close, 200)
ma_sig = close < ma ? false : true
// ma end

// strategy entries
tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy")
sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy")
early_stop = input(true, title="Close position when ATR changes color")

atr_stop = if close < xATRTrailingStop
    close - (close - xATRTrailingStop) * sl_mult
else
    close + (xATRTrailingStop - close) * sl_mult

longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true
shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop)
else if atr_sig == false and early_stop
    strategy.close("Long")

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop)
else if atr_sig == true and early_stop
    strategy.close("Short")
    
// plot stuff
atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(atr_stop, title="ATR Stop", color=atr_color)

ma_color = ma_sig ? color.green : color.red
plot(ma, title="Moving Average", color=ma_color)

stc_color = stc_long ? color.green : color.red
plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny)
plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny)
// plot stuff end

Mehr