
Стратегия реализует автоматическое открытие открытых позиций путем интеграции трех основных технических индикаторов: движущейся средней, относительно сильного индикатора (RSI) и движущегося среднего сплошного индикатора (MACD). В названии стратегии содержится множественный индикатор, в основном для того, чтобы подчеркнуть множество индикаторов, используемых в стратегии.
Эта стратегия использует EMA или SMA для вычисления быстрых и медленных линий. Быстрые и медленные линии являются сигналом покупки, а медленные линии - сигналом продажи. Для фильтрации ложного прорыва стратегия также устанавливает многопространственную логику RSI, которая выдает торговый сигнал только тогда, когда RSI также соответствует условиям.
Помимо этого, стратегия также интегрирует MACD-индикатор для принятия торговых решений. Когда MACD-индикатор пересекает 0-угол, это сигнал покупки, а когда он пересекает 0-угол, это сигнал продажи. Таким образом, MACD-индикатор может использоваться для определения того, происходит ли переход в тренде, чтобы избежать ошибочного сигнала в точке перехода в тренде.
Наибольшее преимущество этой стратегии заключается в том, что интеграция различных показателей фильтрации сигналов, может эффективно снизить производство ложных сигналов, повысить качество сигнала. В частности, преимущества следующие:
Быстрая и медленная линия в сочетании с показателем RSI позволяет избежать ложных прорывов, вызванных одним использованием движущихся средних.
Интеграция показателей MACD позволяет заранее определить, будет ли тенденция переворачиваться, чтобы избежать ошибочного сигнала в точке переворота.
Допускается выбор показателя EMA или SMA, можно выбрать более подходящие параметры показателя в зависимости от различных рыночных особенностей.
Разрешается выбор программы управления капиталом, которая позволяет контролировать размер отдельных заказов и эффективно контролировать риски.
Стоп-стоп поддерживает блокировку прибыли и предотвращает увеличение убытков.
Основные риски, связанные с этой стратегией:
Неправильная оптимизация параметров может привести к неэффективности стратегии. Необходимо потратить время на тестирование различных комбинаций параметров.
Вероятность того, что индикатор выдаст ошибочный сигнал, все еще существует. Когда три индикатора выдадут ошибочный сигнал одновременно, это приведет к большим потерям.
Эффективность одной разновидности не стабильна и требует расширения на другие разновидности.
Datenicht zureichen, Strategie effekt wird in der Zukunft abnehmen。
Эта стратегия может быть оптимизирована в следующих аспектах:
Тестирование различных комбинаций показателей для поиска оптимальных параметров.
Увеличение движущейся остановки в механизме сдерживания потерь. После того, как цена будет двигаться на определенное расстояние, можно использовать остановку сдерживания, чтобы закрепить прибыль.
Добавление показателей для оценки тенденций на большом уровне, чтобы избежать обратной торговли. Например, интегрированный индикатор ADX.
Fügen Sie Moneymanagement Module hinzu für besseres Risikomanagement.
Fügen Sie Filter für fundamentale Faktoren wie Nachrichten hinzu.
Эта стратегия позволяет найти и фильтровать многочисленные технические показатели, такие как движущиеся средние, RSI и MACD. Ее преимущество заключается в том, что она может эффективно отфильтровывать ложные сигналы и улучшать качество сигнала. Основные недостатки заключаются в выборе параметров и вероятности неправильного сигнала индикатора.
/*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)