Screening-Strategie für den Double Stochastic Momentum Indicator


Erstellungsdatum: 2023-10-07 16:45:25 zuletzt geändert: 2023-10-07 16:45:25
Kopie: 0 Klicks: 736
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie verwendet zwei Zufallsdynamik-Indikatoren (SMI und RSI) für die Überschaubarkeit, unterstützt durch Martingale- und Körperfilter für die Filterung von Handelssignalen, um Short-Line-Trends zu erfassen und Preisbewegungen zu verfolgen.

Strategieprinzip

Die Strategie nutzt die doppelte Zufallskritik SMI und RSI, um Overshooting zu beurteilen. SMI wird durch die Berechnung des Moving Averages der K-Linie-Einheitspreisdifferenz und des Schlusskurses berechnet und kann die Wendepunkte effektiv identifizieren. RSI wird durch den Vergleich der Overshootingskritik überbucht und überverkauft. Die Strategie überkauft, wenn der SMI unter 50 und der RSI unter 20 liegt.

Die Strategie verwendet auch 13 der 10-Zyklus-Körper-Gleichlinie als Durchbruch-Filterbedingungen. Wenn die Entität 13 der Mittellinie durchbricht, gilt der Durchbruch als gültig.

Darüber hinaus verwendet die Strategie die optional Martingale-Strategie, bei der Verluste prozentual erhöht werden, um die vorherigen Verluste zurückzugewinnen.

Die Backtest-Funktion misst die Effektivität der Strategie durch Eingabe der Start-End-Zeit.

Analyse der Stärken

Die Strategie kombiniert doppelte Zufallsindikatoren und Filter, um Wendepunkte zu identifizieren, Short-Line-Trends zu erfassen und Preisbewegungen zu verfolgen.

  • SMI ist in der Lage, Wendepunkte zu erkennen, um Überkauf und Überverkauf zu bestimmen
  • RSI-Überschneidungen zur Vermeidung von Verlusten
  • Körperfilter entfernen falsche Durchbrüche und verbessern die Signalgenauigkeit
  • Optionale Strategie zur Verfolgung von Martingale, um einen Teil der Verluste zurückzugewinnen

Risikoanalyse

  • SMI und RSI als Rückstandsindikatoren, Signalverzögerung mit einem Risiko für Auf- und Abstieg
  • Die Gefahr eines beschleunigten Verlustes von Martingale
  • Bei starken Marktschwankungen filtern die Filter einige der gültigen Signale aus.

Durch die Optimierung der SMI- und RSI-Parameter kann die Wahrscheinlichkeit von Auf- und Abwärtsfolgen verringert werden. Die Verwendung einer Martin-Engel-Strategie, die Kontrolle über die Gewinne und die Häufigkeit der Gewinne. Die Wahl, ob der Filter eingeschaltet wird oder nicht, wird nach den Marktbedingungen ausgewählt.

Optimierungsrichtung

  • Optimieren Sie die Kombination aus SMI- und RSI-Parametern, um die besten Beurteilungen zu erhalten
  • Anpassung der Filterparameter zur Verringerung der Wahrscheinlichkeit eines Filtervalid-Signals
  • Optimierung der Anzahl und des Anteils von Martingale-Aktien
  • Vermeidung von Umkehroperationen in Kombination mit Trendindikatoren
  • Erhöhung der Stop-Loss-Strategie und Kontrolle von Einzelschäden

Zusammenfassen

Die Strategie kombiniert die Verwendung von doppelten Zufallsindikatoren, um Wendepunkte zu erfassen, die Filter und Martingale zur Auswahl und Verfolgung von Handelssignalen unterstützen. Sie ermöglicht die effektive Identifizierung von kurzfristigen Trends und die Verfolgung von Kursschwankungen. Sie ist für Investoren geeignet, die nach hoher Gewinnquote streben.

Strategiequellcode
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")

//Backtesting Input Range
fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)

//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()