Die Strategie ermöglicht die automatische Eröffnung von mehreren offenen Positionen durch die Integration von drei wichtigen technischen Indikatoren, einem Moving Average, einem relativ starken Indikator (RSI) und einem Moving Average Clustered Indicator (MACD). Der Name der Strategie enthält mehrere Indicatoren, um die Vielfalt der Indikatoren, die in der Strategie verwendet werden, hervorzuheben.
Die Strategie beurteilt die Richtung des Trends hauptsächlich durch den Vergleich der Größenverhältnisse zwischen zwei Moving Averages und vermeidet Verpasste Reversalchancen in Kombination mit dem RSI. Konkret verwendet die Strategie die EMA oder SMA, um die schnelle und die langsame Linie zu berechnen. Durchschreiten der langsamen Linie auf der schnellen Linie ist ein Kaufsignal und unter der schnellen Linie ist ein Verkaufssignal.
Außerdem integriert die Strategie MACD-Indikatoren für die Handelsentscheidung. Wenn die MACD-Differenz über die 0-Achse fährt, ist dies ein Kaufsignal, wenn die Differenz unter der 0-Achse fährt, ist dies ein Verkaufsignal. So kann der MACD-Indikator verwendet werden, um zu bestimmen, ob ein Trend umgekehrt ist, um ein falsches Signal am Trendwendepunkt zu vermeiden.
Der größte Vorteil dieser Strategie liegt in der Integration von mehreren Indikatoren Filtersignale, kann effektiv die Herstellung von Falschsignalen zu reduzieren, Signalqualität zu verbessern.
Die schnelle und langsame Linie kombiniert mit dem RSI-Indikator verhindert, dass ein False-Breakout durch den Einsatz eines einzigen Moving Averages entsteht.
Die Integration der MACD-Indikatoren ermöglicht es, frühzeitig zu erkennen, ob ein Trend umgekehrt ist, um falsche Signale an den Wendepunkten zu vermeiden.
Es ist möglich, EMA oder SMA zu wählen, wobei die geeigneteren Parameter für verschiedene Markteigenschaften verwendet werden können.
Die Wahl des Fondsmanagementprogramms ermöglicht die Kontrolle des Umfangs der einzelnen Bestellungen und die effektive Risikokontrolle.
Der Stop-Loss-Stopp unterstützt das Sperren von Gewinnen und verhindert die Ausweitung von Verlusten.
Die Risiken der Strategie sind vor allem:
Unzureichende Optimierung von Parametern kann zu einer schlechten Strategie führen. Es wird Zeit benötigt, um verschiedene Kombinationen von Parametern zu testen.
Die Wahrscheinlichkeit, dass ein Indikator ein falsches Signal aussendet, bleibt bestehen. Wenn drei Indikatoren gleichzeitig ein falsches Signal aussenden, führt dies zu einem größeren Verlust.
Die Wirkung einer einzigen Sorte ist nicht stabil und muss auf andere Sorten ausgedehnt werden.
Datenicht zureichen, Strategie effekt wird in der Zukunft abnehmen。
Die Strategie kann vor allem in folgenden Bereichen optimiert werden:
Verschiedene Kombinationen von Indikatoren werden getestet, um die optimale Parameter zu finden.
Erhöhen Sie den beweglichen Stopp in der Stop-Mechanik. Wenn der Preis eine bestimmte Strecke zurücklegt, können Sie einen Trail Stop verwenden, um den Gewinn zu sperren.
Erhöhung der Beurteilung von Trends auf der großen Ebene und Vermeidung von Gegenhandel. Zum Beispiel integrierte ADX-Indikatoren.
Fügen Sie Moneymanagement Module hinzu für besseres Risikomanagement.
Fügen Sie Filter für fundamentale Faktoren wie Nachrichten hinzu.
Die Strategie integriert mehrere technische Indikatoren wie Moving Averages, RSI und MACD, um die Suche und Filterung von mehreren Leerköpfen zu ermöglichen. Ihr Vorteil besteht darin, dass Sie die falschen Signale effektiv filtern und die Signalqualität verbessern können. Die Hauptfehler sind die Parameterwahl und die Wahrscheinlichkeit, dass die Indikatoren falsche Signale senden. Die zukünftigen Optimierungsrichtungen umfassen Parameteroptimierung, Stop-Loss-Optimierung, Trendfilterung usw.
/*backtest
start: 2023-11-04 00:00:00
end: 2023-12-04 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © fikira
//@version=4
strategy("Strategy Tester EMA-SMA-RSI-MACD", shorttitle="Strat-test", overlay=true, max_bars_back=5000,
default_qty_type= strategy.percent_of_equity, calc_on_order_fills=false, calc_on_every_tick=false,
pyramiding=0, default_qty_value=100, initial_capital=100)
Tiny = "Tiny"
Small = "Small"
Normal = "Normal"
Large = "Large"
cl = "close" , op = "open" , hi = "high" , lo = "low"
c4 = "ohlc4" , c3 = "hlc3" , hl = "hl2"
co = "(E)MA 1 > (E)MA 2"
cu = "(E)MA 3 < (E)MA 4"
co_HTF = "(E)MA 1 (HTF) > (E)MA 2 (HTF)"
cu_HTF = "(E)MA 3 (HTF) < (E)MA 4 (HTF)"
L_S = "Long & Short" , _L_ = "Long Only" , _S_ = "Short Only"
cla = "Close above (E)MA 1"
clu = "Close under (E)MA 3"
cla_HTF = "Close above (E)MA 1 (HTF)"
clu_HTF = "Close under (E)MA 3 (HTF)"
rsi = "RSI strategy"
none = "NONE"
mch = "macd > signal" , mcl = "macd < signal"
mch0 = "macd > 0" , mcl0 = "macd < 0"
sgh0 = "signal > 0" , sgl0 = "signal < 0"
mch_HTF = "macd (HTF) > signal (HTF)" , mcl_HTF = "macd (HTF) < signal (HTF)"
mch0HTF = "macd (HTF) > 0" , mcl0HTF = "macd (HTF) < 0"
sgh0HTF = "signal (HTF) > 0" , sgl0HTF = "signal (HTF) < 0"
EMA = "EMA" , SMA = "SMA"
s = input(cl, "Source" , options=[cl, op, hi, lo, c4, c3, hl])
src =
s == cl ? close :
s == op ? open :
s == hi ? high :
s == lo ? low :
s == c4 ? ohlc4 :
s == c3 ? hlc3 :
s == hl ? hl2 :
close
__1_ = input(false, ">=< >=< [STRATEGIES] >=< >=<")
Type = input(_L_, "Type Strategy", options=[L_S, _L_, _S_])
_1a_ = input(false, ">=< >=< [BUY/LONG] >=< >=<")
ENT = input(co, "Pick your poison:", options=[co, cla, rsi, mch, mch0, sgh0])
EH = input(0, " if RSI >")
EL = input(100, " if RSI <")
EH_HTF = input(0, " if RSI (HTF) >")
EL_HTF = input(100, " if RSI (HTF) <")
EX = input(none, " Extra argument", options=[none, mch, mch0, sgh0])
EX2 = input(none, " Second argument", options=[none, mch_HTF, mch0HTF, sgh0HTF, co_HTF, cla_HTF])
_1b_ = input(false, ">=< [(E)MA settings (Buy/Long)] >=<")
ma1 = input(SMA, " (E)MA 1", options=[EMA, SMA])
len1 = input(50, " Length" )
ma2 = input(SMA, " (E)MA 2", options=[EMA, SMA])
len2 = input(100, " Length" )
ma1HTF = input(SMA, " (E)MA 1 - HTF", options=[EMA, SMA])
len1HTF = input(50, " Length" )
ma2HTF = input(SMA, " (E)MA 2 - HTF", options=[EMA, SMA])
len2HTF = input(100, " Length" )
_2a_ = input(false, ">=< >=< [SELL/SHORT] >=< >=<")
CLO = input(cu, "Pick your poison:", options=[cu, clu, rsi, mcl, mcl0, sgl0])
CH = input(0, " if RSI >")
CL = input(100, " if RSI <")
CH_HTF = input(0, " if RSI (HTF) >")
CL_HTF = input(100, " if RSI (HTF) <")
CX = input(none, " Extra argument", options=[none, mcl, mcl0, sgl0])
CX2 = input(none, " Second argument", options=[none, mcl_HTF, mcl0HTF, sgl0HTF, cu_HTF, clu_HTF])
_2b_ = input(false, ">=< [(E)MA settings (Sell/Short)] >=<")
ma3 = input(SMA, " (E)MA 3", options=[EMA, SMA])
len3 = input(50, " Length" )
ma4 = input(SMA, " (E)MA 4", options=[EMA, SMA])
len4 = input(100, " Length" )
ma3HTF = input(SMA, " (E)MA 3 - HTF", options=[EMA, SMA])
len3HTF = input(50, " Length" )
ma4HTF = input(SMA, " (E)MA 4 - HTF", options=[EMA, SMA])
len4HTF = input(100, " Length" )
__3_ = input(false, ">=< >=< [RSI] >=< >=< >=<")
ler = input(20 , " RSI Length")
__4_ = input(false, ">=< >=< [MACD] >=< >=< >=<")
fst = input(12, " Fast Length")
slw = input(26, " Slow Length")
sgn = input(9 , " Signal Smoothing")
sma_source = input(false, "Simple MA(Oscillator)")
sma_signal = input(false, "Simple MA(Signal Line)")
__5_ = input(false, ">=< >=< [HTF settings] >=< >=<")
MA_HTF = input("D", " (E)MA HTF", type = input.resolution)
RSI_HTF = input("D", " RSI HTF" , type = input.resolution)
MACD_HTF= input("D", " MACD HTF" , type = input.resolution)
__6_ = input(false, ">=< >=< [SL/TP] >=< >=< >=<")
sl = input(false, "Stop Loss?")
SL = input(10.0, title=" Stop Loss %" ) / 100
tp = input(false, "Take Profit?")
TP = input(20.0, title=" Take Profit %") / 100
SL_ = strategy.position_avg_price * (1 - SL)
TP_ = strategy.position_avg_price * (1 + TP)
// Limitation in time
// (= inspired from a script of "Che_Trader")
xox = input(false, ">=< >=< [TIME] >=< >=< >=<")
ystr1 = input(2010, " Since Year" )
ystp1 = input(2099, " Till Year" )
mstr1 = input(1 , " Since Month")
mstp1 = input(12 , " Till Month" )
dstr1 = input(1 , " Since Day" )
dstp1 = input(31 , " Till Day" )
_Str1 = timestamp(ystr1, mstr1, dstr1, 1, 1)
Stp1_ = timestamp(ystp1, mstp1, dstp1, 23, 59)
TIME = time >= _Str1 and time <= Stp1_ ? true : false
////////////////////////////////////////////////////////////////////////////////////////////
_1 =
ma1 == SMA ? sma(src, len1) :
ma1 == EMA ? ema(src, len1) :
na
_2 =
ma2 == SMA ? sma(src, len2) :
ma2 == EMA ? ema(src, len2) :
na
_3 =
ma3 == SMA ? sma(src, len3) :
ma3 == EMA ? ema(src, len3) :
na
_4 =
ma4 == SMA ? sma(src, len4) :
ma4 == EMA ? ema(src, len4) :
na
_1b =
ma1HTF == SMA ? sma(src, len1HTF) :
ma1HTF == EMA ? ema(src, len1HTF) :
na
_2b =
ma2HTF == SMA ? sma(src, len2HTF) :
ma2HTF == EMA ? ema(src, len2HTF) :
na
_3b =
ma3HTF == SMA ? sma(src, len3HTF) :
ma3HTF == EMA ? ema(src, len3HTF) :
na
_4b =
ma4HTF == SMA ? sma(src, len4HTF) :
ma4HTF == EMA ? ema(src, len4HTF) :
na
_1_HTF = security(syminfo.tickerid, MA_HTF, _1b)
_2_HTF = security(syminfo.tickerid, MA_HTF, _2b)
_3_HTF = security(syminfo.tickerid, MA_HTF, _3b)
_4_HTF = security(syminfo.tickerid, MA_HTF, _4b)
cl_HTF = security(syminfo.tickerid, MA_HTF, close)
////////////////////////////////////////////////////////////////////////////////////////////
plot(ENT == co or ENT == cla ? _1 : na , title="(E)MA 1", color=color.lime )
plot(ENT == co ? _2 : na , title="(E)MA 2", color=color.red )
plot(CLO == cu or CLO == clu ? _3 : na , title="(E)MA 3", color= _3 == _1 ? color.lime : color.yellow)
plot(CLO == cu ? _4 : na , title="(E)MA 4", color= _4 == _2 ? color.red : color.blue )
plot(EX2 == co_HTF or EX2 == cla_HTF ? _1_HTF : na, title="(E)MA 1 HTF", color=color.lime, linewidth=2, transp=50)
plot(EX2 == co_HTF ? _2_HTF : na, title="(E)MA 2 HTF", color=color.red , linewidth=2, transp=50)
plot(CX2 == cu_HTF or CX2 == clu_HTF ? _3_HTF : na, title="(E)MA 3 HTF", color= _3_HTF == _1_HTF ? color.lime : color.yellow, linewidth=2, transp=50)
plot(CX2 == cu_HTF ? _4_HTF : na, title="(E)MA 4 HTF", color= _4_HTF == _2_HTF ? color.red : color.blue , linewidth=2, transp=50)
////////////////////////////////////////////////////////////////////////////////////////////
// RSI
rsi_ = rsi(src, ler)
rsi_HTF = security(syminfo.tickerid, RSI_HTF, rsi_)
////////////////////////////////////////////////////////////////////////////////////////////
// MACD
fast_ma = sma_source ? sma(src, fst) : ema(src, fst)
slow_ma = sma_source ? sma(src, slw) : ema(src, slw)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, sgn) : ema(macd, sgn)
hist = macd - signal
macd_HTF = security(syminfo.tickerid, MACD_HTF, macd )
signal_HTF = security(syminfo.tickerid, MACD_HTF, signal)
////////////////////////////////////////////////////////////////////////////////////////////
extra =
EX == none ? true :
EX == mch ? macd > signal :
EX == mch0 ? macd > 0 :
EX == sgh0 ? signal > 0 :
false
cxtra =
CX == none ? true :
CX == mcl ? macd <= signal :
CX == mcl0 ? macd <= 0 :
CX == sgl0 ? signal <= 0 :
false
EXTRA =
EX2 == none ? true :
EX2 == mch_HTF ? macd_HTF > signal_HTF :
EX2 == mch0HTF ? macd_HTF > 0 :
EX2 == sgh0HTF ? signal_HTF > 0 :
EX2 == co_HTF ? _1_HTF > _2_HTF :
EX2 == cla_HTF ? cl_HTF > _1_HTF :
false
CXTRA =
CX2 == none ? true :
CX2 == mcl_HTF ? macd_HTF <= signal_HTF :
CX2 == mcl0HTF ? macd_HTF <= 0 :
CX2 == sgl0HTF ? signal_HTF <= 0 :
CX2 == cu_HTF ? _3_HTF <= _4_HTF :
CX2 == clu_HTF ? cl_HTF <= _3_HTF :
false
RSI = rsi_ > EH and rsi_ <= EL and rsi_HTF > EH_HTF and rsi_HTF <= EL_HTF
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BUY =
ENT == co and TIME and extra and EXTRA and RSI ? _1 > _2 :
ENT == cla and TIME and extra and EXTRA and RSI ? src > _1 :
ENT == rsi and TIME and extra and EXTRA ? RSI :
ENT == mch and TIME and extra and EXTRA and RSI ? macd > signal :
ENT == mch0 and TIME and extra and EXTRA and RSI ? macd > 0 :
ENT == sgh0 and TIME and extra and EXTRA and RSI ? signal > 0 :
na
SELL =
CLO == cu and TIME and cxtra and CXTRA and RSI ? _3 <= _4 :
CLO == clu and TIME and cxtra and CXTRA and RSI ? src <= _3 :
CLO == rsi and TIME and cxtra and CXTRA ? RSI :
CLO == mcl and TIME and cxtra and CXTRA and RSI ? macd <= signal :
CLO == mcl0 and TIME and cxtra and CXTRA and RSI ? macd <= 0 :
CLO == sgl0 and TIME and cxtra and CXTRA and RSI ? signal <= 0 :
na
if BUY
if (Type == _S_)
strategy.close("[S]")
else
strategy.entry("[B]", strategy.long)
if SELL
if (Type == _L_)
strategy.close("[B]")
else
strategy.entry("[S]", strategy.short)
strategy.exit("[SL/TP]", "[B]", stop= sl ? SL_ : na, limit= tp ? TP_ : na)