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.
Die Strategie verwendet hauptsächlich zwei Arten von Indikatoren:
JMA-Indikator: Ein glatter gleitender Durchschnitt mit Leistungsmultiplikatoren, mit geringerer Verzögerung und schnellerem Erfassen von Kursänderungen.
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.
Anpassungsfähige JMA-Parameter an unterschiedliche Zeiträume.
RSI filtert falsche Ausbrüche.
Die Kombination von zwei Anzeigen reduziert die falschen Signale.
Eingebaute Stop-Loss-Kontrollen für Verluste.
Anpassungsfähige Gewinnquote für die Gewinnorientierung.
Eine Kombination von zwei Anzeigen kann zu wenig Signale erzeugen.
JMA hat noch Verzögerungen, kann Wendepunkte verpassen, kann mit führenden Indikatoren optimieren.
Eine falsche Stop-Loss-Platzierung kann für größere Verluste führen.
Eine übermäßige Abhängigkeit von Indikatoren kann falsche Signale erzeugen, Volumen oder Volatilitätsfilter hinzufügen.
JMA-Parameter testen, um optimale Einstellungen zu finden.
Versuchen Sie verschiedene RSI-Parameter für eine bessere Leistung.
Hinzufügen eines Hinterhaltungsmechanismus für adaptive Haltungen.
Optimieren Sie die Größe der Einstiegspositionen, um Gewinntrades zu erzielen.
Suchen Sie nach zusätzlichen Filtern wie KD, MACD.
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)