이중 EMA를 포용하는 브레이크아웃 전략

저자:차오장, 날짜: 2023-12-07 15:50:13
태그:

img

전반적인 설명

이 전략은 기하급수적인 이동 평균 (EMA) 의 방향을 판단하여 긴 / 짧은 방향을 결정합니다. 상승 추세 포식 패턴과 거래 부피가 확대되었을 때 길게 이동합니다. EMA의 방향이 역전되거나 하락 추세 포식 패턴이 발생하면 포지션을 닫습니다.

전략 논리

  1. 다른 매개 변수와 함께 두 개의 EMA를 사용하여 시장 트렌드를 결정합니다. 짧은 EMA가 긴 EMA보다 높으면 황소 시장이고 그렇지 않으면 곰 시장입니다.

  2. 시장이 상승세에 있을 때, 상승세 포식 패턴이 나타나고 거래량이 이전 바보다 1.2배나 커지면, 긴 신호가 발사됩니다. 이 패턴은 거리의 강력한 추진력을 보여줍니다.

  3. 시장 트렌드가 역전되는 경우, 즉 짧은 EMA가 긴 EMA 아래로 넘어가면 황소들의 추진력이 약화되고 기존 포지션이 닫아야 합니다. 또한 하향적 포식 패턴이 나타나면 하향적인 동력으로 진입하고 있음을 나타냅니다. 따라서 포지션은 스톱 로스로 적극적으로 닫아야 합니다.

이점 분석

  1. 시장 구조를 결정하기 위해 이중 EMA를 사용하면 황소 / 곰 상태를 정확하게 판단 할 수 있습니다.

  2. 포용 패턴은 한쪽의 운동량이 갑자기 증가하여 주요 추세를 파악할 수 있습니다. 확대 된 볼륨 필터와 결합하면 가짜 파업에 의해 오해를 피할 수 있습니다.

  3. 스톱 로스 메커니즘을 가지고 있습니다. 스톱 로스 가격을 설정하지 않고 손실을 중지하기 위해 시장 구조 반전을 사용하여 불필요한 미끄러짐을 줄일 수 있습니다.

위험 분석

  1. 이중 EMA는 또한 시장 구조를 잘못 판단하여 추세를 놓치고 또는 잘못 길게 갈 수 있습니다. EMA 기간은 조정 될 수 있습니다.

  2. 포용 패턴은 시장의 다양성으로 인해 오해 될 수 있습니다. 가짜 거래를 피하기 위해 더 많은 필터를 추가 할 수 있습니다.

  3. 스톱 로스 가격이 없는 경우 더 큰 손실이 발생할 수 있습니다. 브레이크 이브 같은 다른 스톱 로스 방법은 테스트 할 수 있습니다.

최적화 방향

  1. MACD, A/D와 같은 더 많은 지표로 롱/쇼트를 결정할 수 있습니다.

  2. 필요에 따라 중간 고정 스톱 로스 가격을 추가합니다.

  3. 기호 거래 특성에 따라 EMA 기간을 최적화합니다.

결론

이 전략의 논리는 명확하고 이해하기 쉽습니다. EMA를 사용하여 구조를 결정하고 브레이크아웃을 포착하기 위해 포식 패턴을 사용합니다. 이 전략의 장점은 간단한 판단 논리와 명확한 거래 신호입니다. 그러나 함락 될 위험이 있습니다. 추가 최적화는 더 나은 수익을 얻을 수 있습니다.


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

// @version=5
// # ========================================================================= #
// #                   |   STRATEGY  |
// # ========================================================================= #
strategy(
  title                           = "fpemehd Strategy001",
  shorttitle                      = "f_001",
  overlay                         =  true,
  default_qty_type                =  strategy.percent_of_equity, 
  default_qty_value               =  100, 
  initial_capital                 =  10000000, 
  currency                        =  currency.USD, 
  slippage                        =  0, 
  commission_type                 =  strategy.commission.cash_per_order, 
  commission_value                =  0.01, 
  process_orders_on_close         =  true)
// # ========================================================================= #
// #                   |   STRATEGY  |
// # ========================================================================= #


// Inputs
I_start_date = input (defval = timestamp("20 Jan 1990 00:00 +0900"))
I_finish_date = input(defval = timestamp("20 Dec 2030 00:00 +0900"))

I_short_ema = input.int(defval = 15 , title = "Short EMA", minval = 1 , maxval = 300 , step = 1)
I_long_ema = input.int(defval = 30 , title = "Long EMA", minval = 1 , maxval = 300 , step = 1)

I_body = input.float(defval = 1 , title = "Size of Body", minval = 1 , maxval = 5 , step = 0.1)

time_cond = true

// Calculate Engulfing Candles
C_uptrend = false
C_downtrend = false
C_ema_short = ta.ema(source = close, length = I_short_ema) 
C_ema_long = ta.ema(source = close, length = I_long_ema) 
C_uptrend := close > C_ema_short and C_ema_short > C_ema_long
C_downtrend := close < C_ema_short and C_ema_short < C_ema_long

C_pre_body = math.abs(open[1]-close[1])
C_pre_body_ratio = (math.abs(open[1]-close[1])) / (math.abs(high[1]-low[1])) * 100

C_now_body = math.abs(open-close)
C_now_body_ratio = (math.abs(open-close)) / (math.abs(high-low)) * 100

C_bullish_engulfing = (open[1] > close[1] and open <= close) and (low < low[1] and high > high[1])
C_bearish_engulfing = (open[1] < close[1] and open >= close) and (low < low[1] and high > high[1])
C_avoid_doge = (C_pre_body_ratio > I_body and C_now_body_ratio > I_body) ? true : false
C_volume_filter = volume > volume[1] * 1.2

// Signals
long_signal = C_uptrend and C_bullish_engulfing and C_avoid_doge and C_volume_filter
close_signal = C_downtrend or C_bearish_engulfing 


if long_signal and time_cond
    strategy.entry(id = "Long", direction = strategy.long)

if close_signal and time_cond
    strategy.close(id = "Long")



더 많은