
Die Strategie nennt sich Trend-Tracking-Stopp-Strategie, die auf dem RSI-Indikator basiert. Die Strategie verwendet den RSI-Indikator, um Überkauf-Überverkauf zu ermitteln, in Kombination mit dem schnellen und langsamen MA-Indikator, um die Richtung des Trends zu ermitteln und die Einstiegsbedingungen festzulegen.
Die Strategie entscheidet über die Eintrittszeit hauptsächlich durch den RSI- und den MA-Indikator. Die RSI-Indikatorparameter sind auf 2 Zyklen eingestellt, um Überkauf-Überverkauf zu beurteilen. Der schnelle MA ist auf 50 Zyklen und 200 Zyklen eingestellt, um die Trendrichtung zu bestimmen.
Mehrköpfigen Einstieg: Schnell-MA überschreitet langsam-MA, und der Preis ist höher als der langsam-MA, während der RSI unterhalb der Überverkaufszone (default 10%) ist.
Eintritt mit leerem Kopf: Fast-MA unterhalb von Slow-MA, und der Preis ist niedriger als der Slow-MA, während der RSI oberhalb der Überkaufzone (default 90%) leer ist.
Zusätzlich gibt es einen optionalen Volatilitätsfilter, der den Schrägstand des MA berechnet und nur dann eröffnet, wenn der Schrägstand den festgelegten Schwellenwert überschreitet. Der Zweck ist es, Positionen zu vermeiden, wenn die Kursschwankungen keine eindeutige Richtung haben.
Die Strategie verwendet die Prozentsatz-Stop-Tracking-Methode bei der Ausgabe. Die Stop-Loss-Prozentsätze werden nach der Eingabe berechnet, kombiniert mit jeder Sprung-Differenz, um einen Stop-Loss zu erzielen.
Diese Strategie hat folgende Vorteile:
Die Strategie birgt Risiken, die sich in folgenden Punkten widerspiegeln:
Für die oben genannten Risiken können Optimierungen in folgenden Bereichen vorgenommen werden:
Die Strategie kann optimiert werden durch:
Diese Strategie ist insgesamt eine eher stabile Trend-Tracking-Strategie. Sie kombiniert RSI und MA-Doppel-Indikator-Urteil, während eine gewisse Stabilität zu gewährleisten, kann auch deutlich Trend-Umkehr-Chancen zu erfassen. Gleichzeitig Einstellung der Fluktuationsrate Filter zu vermeiden, teilweise Risiken, Prozent Stop-Loss-Methode kann auch die Einzelschaden effektiv zu steuern. Die Strategie kann als eine allgemeine Strategie für mehrere Sorten verwendet werden, kann auch für bestimmte Sorten Parameter-Anpassung und Modell-Optimierung, so dass eine bessere Strategie Wirkung.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//
//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)
var bool ConditionEntryL = false
var bool ConditionEntryS = false
//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date = timestamp("01 Dec 2024 07:30 +0000")
def_rsi_length = 2
def_overbought_value = 90
def_oversold_value = 10
def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice = "EMA"
def_tick = 0.5
def_filter = true
def_trailing_stop = 1
//***********
// Change the optional parameters
//***********
start_time = input(title="Start date", defval=def_start_date, type=input.time)
end_time = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src = input(title="Source", defval=close, type=input.source)
rsi_length = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)
//***********
// RSI
//***********
// Calculate RSI
up = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))
//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white, title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")
//***********
// Strategy
//***********
if true
// Determine the entry conditions (only market entry and market exit conditions)
// Long position
ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
// Short position
ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
// Calculate the trailing stop
ts_calc = close * (1/tick) * ts_rate * 0.01
// Submit the entry orders and the exit orders
// Long position
if ConditionEntryL
strategy.entry("RSI Long", strategy.long)
// Exit from a long position
strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)
// Short position
if ConditionEntryS
strategy.entry("RSI Short", strategy.short)
// Exit from a short position
strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)
// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")