Dies ist eine personalisierte Handelsstrategie, die Dynamikindikatoren und Candlestick Entity Filtering kombiniert. Es verwendet umfassend drei technische Indikatoren - Stochastic Momentum Index, schneller RSI und Candlestick Entity Filtering, um eine Dynamik-Breakthrough-basierte Strategie zu implementieren und gleichzeitig überkaufte und überverkaufte Bedingungen zu berücksichtigen.
Die Strategie verwendet folgende drei Indikatoren für die Bewertung von Handelssignalen:
Stochastic Momentum Index (SMI): Es kombiniert den Abstand zwischen Kerzen-Einheiten und die relative Position des Schlusskurses, um die Stärke oder Schwäche der Preisdynamik zu beurteilen. Es erzeugt ein Kaufsignal, wenn SMI über die Grenzlinie überschreitet, und ein Verkaufssignal, wenn es unter die Grenzlinie überschreitet.
Fast RSI (7-Tage-Linie): Beurteilt die überkauften und überverkauften Bedingungen der Preise. RSI unter 20 erzeugt ein Kaufsignal als überverkauft, während über 80 ein Verkaufssignal als überkauft erzeugt.
Candlestick Entity Filter: Berechnet die durchschnittliche Candlestick Entity Größe in den letzten 10 Tagen. Aktivieren Sie das Signal nur, wenn die heutige Candlestick Entity ein Drittel dieses Durchschnitts übersteigt, um ungültige Signale zu vermeiden.
Die Strategie beurteilt zunächst die Signale von SMI und RSI. Wenn eine der Indikatorsignalanforderungen erfüllt ist, wird dann der Candlestick Entity-Filter kombiniert, um festzustellen, ob dieses Signal gültig ist und ein Handelssignal erzeugt, wenn es gültig ist.
Die Strategie weist folgende Vorteile auf:
Die Beurteilung ist bei Kombination mehrerer Indikatoren genauer und zuverlässiger.
Das Hinzufügen eines Kerzen-Entity-Filters vermeidet ungültige Signale.
Durch die Kombination von Überkauf/Überverkauf ist es einfacher, Signale an Trendumkehrpunkten zu erfassen.
Erhöhung der Gewinnchancen durch zweiseitiges Long/Short-Handel.
Der Handel mit teilweisen Positionen vermeidet übermäßige Einmalverluste.
Die Strategie birgt auch einige Risiken:
Indikatoren können falsche Signale erzeugen, die zu Verlusten führen.
Der Teilpositionshandel kann die Trendchancen in jeder Richtung nicht voll ausnutzen.
Als Hauptindikator ist der SMI empfindlich auf Parameter-Einstellungen angewiesen.
Häufiger Handel mit einer zweiseitigen Strategie erhöht die Transaktionskosten.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Optimieren der Parameter für SMI und RSI, um die besten Parameterkombinationen zu finden.
Erhöhung der Positionsgröße und Positionsmanagementmechanismen, um höhere Renditen während Trends zu erzielen.
Hinzufügen von Stop-Loss-Strategien zur Verringerung des Einmalverlustrisikos.
Kombination mehrerer Indikatoren zur Beurteilung der Signalzuverlässigkeit und zur Verringerung falscher Signale.
Einführung effizienter Verträge zur Senkung der Transaktionskosten.
Die Strategie nutzt umfassend die SMI, schnelle RSI und Candlestick Entity Filtering Indikatoren, um eine momentumbasierte, überkaufte/überverkaufte persönliche Handelsstrategie umzusetzen. Sie hat Vorteile wie präzises Urteilen, Identifizierung gültiger Signale, Kombination von überkauften/überverkauften Bedingungen und dual-directional Trading, aber auch Risiken wie Parameterempfindlichkeit, Unfähigkeit, Trends vollständig zu kapitalisieren und häufige Operationen. Durch die kontinuierliche Optimierung von Parametern, Erhöhung der Positionsgröße und Stop-Loss-Management, Verringerung falscher Signale usw. kann die Strategie eine bessere Handelsleistung erzielen.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 6h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Stochastic Strategy v1.2", shorttitle = "Stochastic str 1.2", 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") 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()