Двойная стратегия прорыва EMA "Золотой крест"

Автор:Чао Чжан, Дата: 2023-12-20 16:34:58
Тэги:

img

Обзор

Эта стратегия представляет собой следующую стратегию тренда, основанную на операциях с золотым крестом и смертельным крестом 5-минутных и 34-минутных экспоненциальных скользящих средних (EMA) линий. Она длится, когда быстрая EMA пересекает медленную EMA снизу, и становится короткой, когда быстрая EMA пересекает медленную EMA сверху. Она также устанавливает стоп-прибыль и стоп-затрату для контроля рисков.

Принцип стратегии

  1. Быстрая EMA5 и медленная EMA34 формируют торговые сигналы.
  2. Когда EMA5 пересекает EMA34, это золотой крест, который указывает на то, что краткосрочный тренд лучше среднесрочного, поэтому держите длинную позицию.
  3. Когда EMA5 пересекается ниже EMA34, это означает, что краткосрочная тенденция хуже среднесрочной, поэтому держите короткую позицию.
  4. Установите стоп-прибыль и стоп-потеря, чтобы зафиксировать прибыль и контролировать риски.

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

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

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

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

Руководство по оптимизации

  1. Оптимизируйте параметры EMA, чтобы найти лучшую комбинацию параметров.
  2. Оптимизируйте точки остановки прибыли и остановки убытков, чтобы получить большую прибыль.
  3. Добавьте другие индикаторы, такие как MACD, KDJ, чтобы отфильтровать сигналы и улучшить точность.

Резюме

Эта стратегия генерирует торговые сигналы от золотых крестов и смертельных крестов двойных линий EMA и устанавливает стоп-прибыль и стоп-пропасть для контроля рисков. Это простая и эффективная среднесрочная тенденция, следующая за стратегией. Дальнейшее повышение стабильной прибыльности может быть достигнуто путем оптимизации параметров стоп-прибыли / потери и внедрения других индикаторов для фильтрации сигналов.


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', 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?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=22.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=5)
ma_length01 = input(title='DEMA length:',  defval=34)
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 ? low <= buy_entry_price - sl: 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 ? high >= sel_entry_price + sl : 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)

Больше