
Эта стратегия основана на скрытых отклонениях от средней линии EMA и RSI и открывает позиции с множественным замыканием, определяя их как начало восходящего тренда путем идентификации скрытых отклонений от средней линии EMA. В то же время, золотой крест в сочетании с средней линией EMA и ценой закрытия линии K, находящейся выше средней линии EMA, обеспечивает повышение.
Стратегия EMA средней линии: использование средней линии EMA 50 циклов и 250 циклов для определения тенденции в золотом кроссе. При пересечении 50 EMA цены рассматриваются как многоголовый сигнал.
Скрытая отклонение от RSI: скрытый отклонение от RSI с более низкими низкими точками, а с более высокими низкими точками цены, предвещающий начало обратного хода. С помощью ограниченного количества отклонений можно отфильтровать ложные сигналы.
Стратегия закрытия K-линии: открытие позиции при закрытии K-линии с ценой более 50 EMA.
В результате анализа вышеперечисленных трёх стратегий можно заключить, что в настоящее время тренд начинает подниматься и открывает позиции.
Используйте среднюю линию EMA для определения направления тренда в сочетании с обратным сигналом от RSI, чтобы открыть позицию в начале тренда.
Двойной механизм подтверждения, использующий комбинацию заключений цены закрытия EMA, RSI и K-линии, эффективно отфильтровывает ложные сигналы.
Следить за средне-длинными тенденциями, подходящими для оценки начала новой восходящей тенденции после корректировки.
При появлении мертвой форки в средней EMA необходимо своевременно свернуть позицию.
RSI скрывает отклонение от сигналов, что требует определенного опыта, неправильная параметровая настройка может пропустить сигнал или ошибочно оценить.
Параметры для торговых сортов требуют оптимизации.
Динамическая корректировка параметров средней линии EMA для оптимизации точности определения тенденций.
Настройка параметров RSI для оптимизации точности определения скрытых отклонений.
Присоединиться к механизму остановки убытков, чтобы контролировать риск с помощью остановки ATR или процентной остановки.
Разработать стратегию торговли на пустом рынке, позволяющую открывать позиции на пустом рынке в условиях нисходящего тренда.
Эта стратегия использует EMA средний путь для определения большого тренда, в сочетании с RSI увеличивает точность определения, после окончания свертывания для определения нового восходящего тренда, относится к более консервативной стратегии отслеживания тренда. Благодаря оптимизации параметров и добавлению средств остановки, можно получить лучший эффект. По сравнению с простой стратегией движущихся средних, более высокая точность определения восходящего тренда, более высокая вероятность победы, относится к практической стратегии.
/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="EMA RSI ATR Hidden Div Strat", shorttitle="Hidden Div Strat", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type = strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=5000, currency=currency.USD)
// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true
// Bar's time happened on/after start date?
afterStartDate = time >= start and time<=finish?true:false
//EMA'S
emasrc = close
len1 = input(50, minval=1, title="EMA1")
ema1 = ema(emasrc, len1)
col1 = color.white
len2 = input(250, minval=1, title="EMA2")
ema2 = ema(emasrc, len2)
col2 = color.yellow
//Plots
plot(ema1, title="EMA1", linewidth=1, color=col1)
plot(ema2, title="EMA2", linewidth=1, color=col2)
//Stoch
periodK = input(4, title="K", minval=1)
periodD = input(4, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
//Hidden Divergence Indikator
len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=1)
lbL = input(title="Pivot Lookback Left", defval=19)
rangeUpper = input(title="Max of Lookback Range", defval=20)
rangeLower = input(title="Min of Lookback Range", defval=4)
hiddenBullColor = color.new(color.green, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)
plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
bars = barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = priceHL and oscLL and plFound
//buy Conditions
buyhiddenbull = hiddenBullCond[1] or hiddenBullCond[2] or hiddenBullCond[3] or hiddenBullCond[4] or hiddenBullCond[5] or hiddenBullCond[6] or hiddenBullCond[7] or hiddenBullCond[8] or hiddenBullCond[9] or hiddenBullCond[10]
emacondition = ema1 > ema2
upcondition = close[1] > ema1[1] and ema2[1] and close[2] > ema1[2] and ema2[2] and close[3] > ema1[3] and ema2[3]
crossup = k[0] >= d[0] and k[1] <= d[1]
longcondition = emacondition and upcondition and crossup and buyhiddenbull
if (afterStartDate)
strategy.entry("Long", strategy.long, when = longcondition)
//TakeProfit, StopLoss lowest low
profitfactor = input(title="Profitfactor", type=input.float, step=0.1, defval=1.6)
loLen = input(title="Lowest Low Lookback", type=input.integer,
defval=38, minval=2)
stop_level = lowest(low, loLen)[1]
bought = strategy.position_size[1] < strategy.position_size
barsbought = barssince(bought)
if strategy.position_size>0
profit_level = strategy.position_avg_price + ((strategy.position_avg_price - stop_level[barsbought])*profitfactor)
strategy.exit(id="TP/ SL", stop=stop_level[barsbought], limit=profit_level)