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.
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 1⁄3 der 10-Zyklus-Körper-Gleichlinie als Durchbruch-Filterbedingungen. Wenn die Entität 1⁄3 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.
Die Strategie kombiniert doppelte Zufallsindikatoren und Filter, um Wendepunkte zu identifizieren, Short-Line-Trends zu erfassen und Preisbewegungen zu verfolgen.
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.
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.
/*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()