Двойная EMA Золотой крест Смерть Крест Трендовая стратегия


Дата создания: 2023-12-29 15:46:15 Последнее изменение: 2023-12-29 15:46:15
Копировать: 1 Количество просмотров: 701
1
Подписаться
1621
Подписчики

Двойная EMA Золотой крест Смерть Крест Трендовая стратегия

Обзор

Эта стратегия использует двойные EMA, чтобы определить направление текущего тренда, и в сочетании с RSI, чтобы избежать упущенных возможностей для покупки или продажи, является типичной стратегией отслеживания тренда.

Стратегический принцип

  1. Расчет средней линии EMA на 10-й и 20-й периоды, названные соответственно ma00 и ma01
  2. Когда ma00 наносит ma01 генерирует сигнал покупки
  3. Когда ma00 попадает под ma01 создается сигнал продажи
  4. В то же время, когда цена поднимается на ma00, если ma00 выше, чем ma01, это также создает сигнал покупки.
  5. Аналогичным образом, когда цена снижается до ma00, если ma00 находится ниже ma01, это также создает сигнал продажи.
  6. Такой двойной взгляд позволяет избежать пропуска некоторых торговых точек.
  7. Настройка стоп-лосс и стоп-стоп цены для контроля риска

Анализ преимуществ

  1. Использование двойного мнения EMA может эффективно отфильтровать поддельные прорывы
  2. Двойное условное суждение, чтобы избежать пропусков
  3. Настройка стоп-стоп для управления рисками

Анализ рисков

  1. Двойная средняя линия EMA относится к категории стратегий отслеживания трендов, часто торгуется в условиях шока и может быть легко потеряна
  2. Недостаточное определение точки переворота может привести к убыткам.
  3. Неправильная установка точки остановки может увеличить убытки

Направление оптимизации

  1. Можно соответствующим образом оптимизировать циклы EMA, чтобы найти оптимальную комбинацию параметров
  2. Показатели могут быть добавлены для повышения стабильности стратегии.
  3. Можно установить динамические стоп-стопы, которые в реальном времени корректируются в зависимости от рыночных колебаний.
Исходный код стратегии
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='[STRATEGY][RS]MicuRobert EMA cross V1', shorttitle='S', overlay=true, pyramiding=0, initial_capital=100000)
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
trade_session = input(title='Trade Session:',  defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?color.gray:na)
trade_size = input(title='Trade Size:', type=float, defval=1)
tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10)
sl = input(title='Stop loss in pips:', type=float, defval=11.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=10)
ma_length01 = input(title='DEMA length:',  defval=20)
price = input(title='Price source:', defval=open)

//  ||--- NO LAG EMA, Credit LazyBear:  ---||
f_LB_zlema(_src, _length)=>
    _ema1=ema(_src, _length)
    _ema2=ema(_ema1, _length)
    _d=_ema1-_ema2
    _zlema=_ema1+_d
//  ||-------------------------------------||

ma00 = f_LB_zlema(price, ma_length00)
ma01 = f_LB_zlema(price, ma_length01)
plot(title='M0', series=ma00, color=black)
plot(title='M1', series=ma01, color=black)

isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0
isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0

buy_entry_price = isnewbuy ? price : buy_entry_price[1]
sel_entry_price = isnewsel ? price : sel_entry_price[1]
plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua)
plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua)
buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1]
sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1]
plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal)
plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal)
buy_ts = buy_appex - sl
sel_ts = sel_appex + sl
plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red)
plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red)

buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true)
buy_entry = buy_cond1 or buy_cond0
buy_close = (not USE_TRAILINGSTOP ? false : low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or 
sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true)
sel_entry = sel_cond1 or sel_cond0
sel_close = (not USE_TRAILINGSTOP ? false : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or 

strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry)
strategy.close('buy', when=buy_close)
strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry)
strategy.close('sell', when=sel_close)

//What i add .!
pos = iff(ma01 < ma00 , 1,
	    iff(ma01 > ma00 , -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue)
plot(ma00, color=red, title="MA")
plot(ma01, color=blue, title="EMA")