ADX-, RSI- und SMA-Multiindikator-Kombinationshandelsstrategie


Erstellungsdatum: 2023-09-14 16:19:46 zuletzt geändert: 2023-09-14 16:19:46
Kopie: 3 Klicks: 1004
1
konzentrieren Sie sich auf
1617
Anhänger

Strategieprinzip

Die Strategie verwendet mehrere technische Indikatoren zur Identifizierung von Trendrichtungen und Überkauf-Überverkauf-Bereichen, um Handelssignale zu erzeugen.

Die wichtigsten Kennzahlen sind:

  1. Durchschnittliche Richtungsindex ((ADX): Beurteilung der Trendstärke

  2. Relativ schwacher RSI: Überkauf und Überverkauf

  3. Schmalen Mittelwert (SMA): Beurteilung von kurzfristigen Trends

  4. Der Extreme SAR-Indikator: Beurteilung von langfristigen Trends

  5. Ein Durchbruch: Eintritt durch den Trend

Die spezifische Transaktionslogik:

  1. Die ADX hält den Trend für vorhanden und stark genug.

  2. SAR: Lang- und kurzfristige Trends in einheitlicher Richtung

  3. Der RSI identifiziert überkaufte und überverkaufte Bereiche

  4. Eintritt, wenn der Preis die SMA-Mittellinie durchbricht

  5. Eintritt bei Preisbruch

Mehrere Indikatoren, die sich gegenseitig verifizieren, erhöhen die Genauigkeit der Beurteilung, verschiedene Strategien kombinieren sich zu einem systematischen Handelssystem.

Strategische Vorteile

  • Mehrindikator-Kombination zur Verbesserung der Signalqualität

  • Verschiedene Kombinationen von Strategien, systematische Aufnahme

  • Der ADX erkennt Trends, der RSI beurteilt Überkäufe

  • SAR-Trends, SMA und ein Durchbruch der Kanäle

Strategisches Risiko

  • Mehrparameter-Einstellungen, Optimierung durch Wiederholungstests

  • Kombinationsbedingungen mit geringer Häufigkeit

  • Schwierigkeiten bei Konfliktsignalisierung

Zusammenfassen

Die Strategie nutzt die Vorzüge verschiedener Indikatoren, um ein stabiles Handelssystem zu schaffen. Die Parameter müssen jedoch optimiert werden, um sicherzustellen, dass die Handelsfrequenz angemessen ist.

Strategiequellcode
/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// strategy("Combined Strategy", overlay=true, default_qty_value=100, initial_capital=1000, margin_long=0.1)

adxlen = input(7, title="ADX Smoothing")
dilen = input(7, title="DI Length")
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truerange = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
    minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)

// The same on Pine Script™
pine_supertrend(factor, atrPeriod) =>
    src = hl2
    atr = ta.atr(atrPeriod)
    upperBand = src + factor * atr
    lowerBand = src - factor * atr
    prevLowerBand = nz(lowerBand[1])
    prevUpperBand = nz(upperBand[1])

    lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
    upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
    int direction = na
    float superTrend = na
    prevSuperTrend = superTrend[1]
    if na(atr[1]) and ta.rsi(close, 21) < 66 and ta.rsi(close,3) > 80 and ta.rsi(close, 28) > 49 and sig > 20
        direction := 1
    else if prevSuperTrend == prevUpperBand
        direction := close > upperBand ? -1 : 1
    else
        direction := close < lowerBand ? 1 : -1
    superTrend := direction == -1 ? lowerBand : upperBand
    [superTrend, direction]

[pineSupertrend, pineDirection] = pine_supertrend(3, 10)
upTrend = pineDirection < 0
downTrend = pineDirection > 0

// Define the 20-period SMA
sma20 = ta.sma(close, 20)

a = ta.rsi(close,14)
OB = input(70)
OS = input(30)
os = a > OB
ob = a < OS

if upTrend and close > pineSupertrend and close > sma20 and os
    strategy.entry("Buy", strategy.long)

if ta.crossunder(close, sma20) or ob
    strategy.close_all()

//define when to breakout of channel 
//("ChannelBreakOutStrategy", overlay=true)
length = input.int(title="Length", minval=1, maxval=1000, defval=5)
upBound = ta.highest(high, length)
downBound = ta.lowest(low, length)
if (not na(close[length]))
	strategy.entry("ChBrkLE", strategy.long, stop=upBound + syminfo.mintick, comment="ChBrkLE")
strategy.entry("ChBrkSE", strategy.short, stop=downBound - syminfo.mintick, comment="ChBrkSE")