이중 EMA 골든 크로스 돌파구 전략

저자:차오장, 날짜: 2023-12-20 16:34:58
태그:

img

전반적인 설명

이 전략은 5분 및 34분 기하급수적 이동 평균 (EMA) 라인의 황금 십자 및 죽음의 십자 연산을 기반으로 한 트렌드 다음 전략입니다. 빠른 EMA가 아래에서 느린 EMA를 넘을 때 길게 이동하고 빠른 EMA가 위에서 느린 EMA를 넘을 때 짧게 이동합니다. 또한 위험을 제어하기 위해 스톱 수익과 스톱 손실을 설정합니다.

전략 원칙

  1. 빠른 EMA5와 느린 EMA34는 거래 신호를 형성합니다. 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)

더 많은