JMA-Kreuzung des RSI-Handels

Schriftsteller:ChaoZhang, Datum: 2023-09-18 21:42:50
Tags:

Übersicht

Diese Strategie erzeugt Handelssignale durch Kreuzung von Jurik Moving Average (JMA) und RSI Indikator. Es geht lang, wenn JMA über RSI kreuzt und geht kurz, wenn es darunter kreuzt. Die Strategie versucht, falsche Signale zu filtern, indem zwei Indikatoren kombiniert werden, und Handel, wenn der Trend deutlicher ist.

Grundsätze

Die Strategie verwendet hauptsächlich zwei Arten von Indikatoren:

  1. JMA-Indikator: Ein glatter gleitender Durchschnitt mit Leistungsmultiplikatoren, mit geringerer Verzögerung und schnellerem Erfassen von Kursänderungen.

  2. RSI-Indikator: Ein allgemeiner Strength-Indikator, der die Kauf-/Verkaufsdynamik widerspiegelt.

Wenn der JMA über den RSI steigt, zeigt er einen stärkeren kurzfristigen Aufwärtstrend gegenüber dem langfristigen Trend an und erzeugt ein Kaufsignal.

Nach dem Signal geht die Strategie in die entsprechende Richtung in den Handel.

Vorteile

  1. Anpassungsfähige JMA-Parameter an unterschiedliche Zeiträume.

  2. RSI filtert falsche Ausbrüche.

  3. Die Kombination von zwei Anzeigen reduziert die falschen Signale.

  4. Eingebaute Stop-Loss-Kontrollen für Verluste.

  5. Anpassungsfähige Gewinnquote für die Gewinnorientierung.

Risiken und Minderungsmaßnahmen

  1. Eine Kombination von zwei Anzeigen kann zu wenig Signale erzeugen.

  2. JMA hat noch Verzögerungen, kann Wendepunkte verpassen, kann mit führenden Indikatoren optimieren.

  3. Eine falsche Stop-Loss-Platzierung kann für größere Verluste führen.

  4. Eine übermäßige Abhängigkeit von Indikatoren kann falsche Signale erzeugen, Volumen oder Volatilitätsfilter hinzufügen.

Möglichkeiten zur Verbesserung

  1. JMA-Parameter testen, um optimale Einstellungen zu finden.

  2. Versuchen Sie verschiedene RSI-Parameter für eine bessere Leistung.

  3. Hinzufügen eines Hinterhaltungsmechanismus für adaptive Haltungen.

  4. Optimieren Sie die Größe der Einstiegspositionen, um Gewinntrades zu erzielen.

  5. Suchen Sie nach zusätzlichen Filtern wie KD, MACD.

Zusammenfassung

Die Strategie ermöglicht das Trendverfolgen mit JMA und RSI-Kreuzungen und begrenzt das Risiko über Stopps. Falsche Signale bleiben jedoch wahrscheinlich und erfordern eine weitere Optimierung von Parametern und Filtern. Stop-Loss benötigt auch eine Backtest-Validierung. Es bietet einen grundlegenden Rahmen für ein duales Indikator-Kreuzungssystem mit Raum für Verbesserungen.


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

//@version=4
// Stratégie marche le mieux sur du 2 jours
strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000)

// Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(06, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true

// Strategy Tester End Time
eYear = input(2019, title = "End Year")
eMonth = input(12, title = "End Month", minval = 01, maxval = 12)
eDay = input(01, title = "End Day", minval = 01, maxval = 31)
eHour = input(00, title = "End Hour", minval = 00, maxval = 23)
eMinute = input(00, title = "End Minute", minval = 00, maxval = 59)
endTime = true

// === RSI ===
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=color.purple)
band1 = hline(70)
band0 = hline(30)

// === JMA ===
_length = input(7, title="Length")
_phase = input(50, title="Phase")
_power = input(2, title="Power")
highlightMovements = input(true, title="Highlight Movements ?")

// srcJMA = input(rsi, title="Source")
srcJMA = rsi

phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
alpha = pow(beta, _power)
jma = 0.0
e0 = 0.0
e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1])
e1 = 0.0
e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1])
e2 = 0.0
e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
jma := e2 + nz(jma[1])
// === End of JMA def ===

jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f
plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0)

// === Inputs ===
// risk management
useStop = input(true, title = "Use Initial Stop Loss?")

goLong() => crossover(rsi, jma)
killLong() => crossunder(rsi, jma)

// ======= DEBUGGGGGGGG ============
long_price = 0.0
short_price = 0.0

if(startTime and endTime)
    if(goLong())
        long_price := close
    strategy.entry("Buy", strategy.long, when = goLong())
    strategy.close("Buy", when = killLong() and close > long_price)

// Shorting if using
goShort() => killLong()
killShort() => goLong()

if(startTime and endTime)
    if(goShort())
        short_price := close
    strategy.entry("Sell", strategy.short, when = goShort() and close < short_price)
    strategy.close("Sell", when = killShort())
// =========================

if (useStop)
    strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08)
    strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)



Mehr