Diese Strategie verwendet zwei stochastische Impulsindikatoren (SMI und RSI) für lange und kurze Signale sowie Martingale und Body-Filter für die Handelssignalwahl, um mittelfristige Trends und Kursschwankungen zu erfassen.
Die Strategie beurteilt Long und Short anhand von zwei stochastischen Indikatoren SMI und RSI. SMI wird auf der Grundlage des gleitenden Durchschnitts der Bar-Range und des Schlusskurses berechnet, gut bei der Identifizierung von Umkehrpunkten. RSI vergleicht die Bullen- und Bärenkraft, um den Überkauf- und Überverkaufstatus zu bestimmen. Die Strategie geht lang, wenn SMI unter -50 und RSI unter 20 ist; geht kurz, wenn SMI über 50 und RSI über 80 ist.
Um falsche Ausbrüche zu filtern, verwendet die Strategie auch 1/3 der 10-Perioden-Körper-SMA als Durchbruchfilterbedingung.
Darüber hinaus setzt die Strategie optional Martingale ein, bei dem es darum geht, Lots bei verlorenen Trades zu skalieren und zu versuchen, frühere Verluste wiederherzustellen.
Die Backtest-Funktionalität überprüft die Strategie durch Eingabe eines Datumsbereichs.
Die Strategie kombiniert zwei stochastische Indikatoren und Filter, die in der Lage sind, Umkehrpunkte effektiv zu identifizieren, mittelfristige Trends zu erfassen und Kursschwankungen zu verfolgen.
Die Risiken können gemildert werden, indem die SMI- und RSI-Parameter optimiert werden, um die Verfolgungs-/Tötungswahrscheinlichkeit zu senken, indem die Martingale strategisch verwendet wird, indem die Skalierungsquote und -zeiten gesteuert werden, und Filter nach Ermessen basierend auf den Marktbedingungen aktiviert werden.
Die Strategie kombiniert doppelte stochastische Indikatoren, um Umkehrpunkte zu erfassen, mit Filtern und Martingale für die Handelssignalauswahl und -verfolgung. Sie kann mittelfristige Trends effektiv identifizieren und Kursschwankungen verfolgen, geeignet für Anleger, die eine hohe Gewinnrate anstreben. Achten Sie auf Indikatorverzögerungen und Marktrisiken, verwalten Sie Risiken durch Parameteroptimierung und Stop-Loss.
/*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()