리소스 로딩... 로딩...

이동평균과 바 외 패턴에 기반한 이중 트렌드 확인 거래 전략

저자:차오장, 날짜: 2025-01-17 14:39:19
태그:EMA

 Dual Trend Confirmation Trading Strategy Based on Moving Averages and Outside Bar Pattern

전반적인 설명

이 전략은 트렌드 추후 시스템으로, 이동 평균을 외부 바 패턴 인식과 결합한다. 5기기 및 9기기 지수 이동 평균 (EMA) 을 주요 트렌드 지표로 사용하고, 신호 확인을 위해 외부 바 패턴과 함께 한다. 이 전략에는 외부 바 높이에 기반한 동적 스톱-로스 및 영업 취득 설정, 그리고 스톱-로스 히트에 의해 유발되는 포지션 역전 메커니즘이 포함된다.

전략 원칙

핵심 논리는 다음과 같은 핵심 요소에 기반합니다. 1. 기본 트렌드 방향을 결정하기 위해 5주기 및 9주기 EMA 크로스오버를 사용 2. 외부 바 패턴을 통해 시장 변동성을 확인 (현재 바은 이전 바보다 높고 낮은 바은 이전 바보다 낮습니다) 3. EMA 크로스오버 신호가 외부 바 패턴과 일치 할 때 거래를 입력 4. 외부 바 높이를 사용하여 동적으로 스톱 로스 및 영업 수익 수준을 설정합니다. 스톱 로스 높이의 50%에서 영업 수익 및 100%에서 영업 손실 5. 잠재적인 트렌드 반전을 포착하기 위해 스톱 로스가 트리거 될 때 자동으로 리버스 포지션을 실행

전략적 장점

  1. 이중 확인 메커니즘은 단일 지표에서 잘못된 신호를 피함으로써 거래 정확성을 향상시킵니다.
  2. 동적 스톱 로스 및 영업 취득 설정은 시장 변동에 더 잘 적응하여 다른 시장 조건에 따라 합리적인 위험 관리를 유지합니다.
  3. 포지션 역전 메커니즘은 시장 트렌드 변화에 빠르게 적응하여 자본 효율성을 향상시킵니다.
  4. 전략은 명확한 출입 및 출입 규칙을 가지고 있으며, 실행 및 백테스트를 쉽게 수행 할 수 있습니다.

전략 위험

  1. 낮은 변동성 시장에서 바 외 패턴은 덜 자주 발생할 수 있으며 거래 빈도에 영향을 줄 수 있습니다.
  2. 스톱 로스 포지션은 급변하는 시장에서 너무 넓어 거래당 위험을 증가시킬 수 있습니다.
  3. 포지션 반전 메커니즘은 다양한 시장에서 연속 손실을 초래할 수 있습니다.
  4. 고정 EMA 매개 변수는 다른 시장 조건에서 일관성 없는 성능을 보일 수 있습니다.

최적화 방향

  1. 보다 유연한 위험 관리를 위해 스톱 로스 및 영업률을 동적으로 조정하기 위한 변동성 지표를 도입
  2. 약 트렌드 환경에서 거래를 피하기 위해 트렌드 강도 필터를 추가하는 것을 고려하십시오.
  3. 시장 변동성 지표를 통합함으로써 포지션 반전 촉발 조건을 최적화합니다.
  4. 연구 EMA 매개 변수 최적화

요약

이 전략 시스템은 고전적인 기술 분석과 현대적인 양적 거래 개념을 결합한 전략 시스템이다. 이동 평균과 외부 바 패턴의 조합은 신속한 트렌드 추적과 신뢰할 수 있는 신호 생성 모두를 보장한다. 동적인 스톱 로스/테이크 노프프 및 포지션 역전 메커니즘의 설계는 위험 관리에 대한 강력한 초점을 보여 전략이 실질적으로 실행 가능하도록 한다. 최적화 할 여지가 있지만 전반적인 프레임워크는 이미 라이브 트레이딩의 기본 조건을 충족시킨다.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy(title="Outside Bar EMA Crossover Strategy with EMA Shift", shorttitle="Outside Bar EMA Cross", overlay=true)

// Input for EMA lengths
lenEMA1 = input.int(5, title="EMA 5 Length")
lenEMA2 = input.int(9, title="EMA 9 Length")

// Input for EMA 9 shift
emaShift = input.int(1, title="EMA 9 Shift", minval=0)

// Calculate EMAs
ema1 = ta.ema(close, lenEMA1)
ema2 = ta.ema(close, lenEMA2)

// Apply shift to EMA 9
ema2Shifted = na(ema2[emaShift]) ? na : ema2[emaShift]  // Dịch chuyển EMA 9 bằng cách sử dụng offset

// Plot EMAs
plot(ema1, title="EMA 5", color=color.blue, linewidth=2)
plot(ema2Shifted, title="EMA 9 Shifted", color=color.red, linewidth=2)

// Outside Bar condition
outsideBar() => high > high[1] and low < low[1]

// Cross above EMA 5 and EMA 9 (shifted)
crossAboveEMA = close > ema1 and close > ema2Shifted

// Cross below EMA 5 and EMA 9 (shifted)
crossBelowEMA = close < ema1 and close < ema2Shifted

// Outside Bar cross above EMA 5 and EMA 9 (shifted)
outsideBarCrossAbove = outsideBar() and crossAboveEMA

// Outside Bar cross below EMA 5 and EMA 9 (shifted)
outsideBarCrossBelow = outsideBar() and crossBelowEMA

// Plot shapes for visual signals
plotshape(series=outsideBarCrossAbove, title="Outside Bar Cross Above", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", textcolor=color.white)
plotshape(series=outsideBarCrossBelow, title="Outside Bar Cross Below", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", textcolor=color.white)

// Calculate Outside Bar height
outsideBarHeight = high - low  // Chiều cao của nến Outside Bar

// Calculate TP and SL levels
tpRatio = 0.5  // TP = 50% chiều cao nến Outside Bar
slRatio = 1.0  // SL = 100% chiều cao nến Outside Bar

tpLevelLong = close + outsideBarHeight * tpRatio  // TP cho lệnh mua
slLevelLong = close - outsideBarHeight * slRatio  // SL cho lệnh mua

tpLevelShort = close - outsideBarHeight * tpRatio  // TP cho lệnh bán
slLevelShort = close + outsideBarHeight * slRatio  // SL cho lệnh bán

// Strategy logic
if (outsideBarCrossAbove)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Buy", stop=slLevelLong, limit=tpLevelLong)  // Thêm TP và SL

if (outsideBarCrossBelow)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Sell", stop=slLevelShort, limit=tpLevelShort)  // Thêm TP và SL

// Logic: Nếu lệnh Buy bị Stop Loss => Vào lệnh Sell
if (strategy.position_size > 0 and close <= slLevelLong)
    strategy.close("Buy")
    strategy.entry("Sell After Buy SL", strategy.short)

// Logic: Nếu lệnh Sell bị Stop Loss => Vào lệnh Buy
if (strategy.position_size < 0 and close >= slLevelShort)
    strategy.close("Sell")
    strategy.entry("Buy After Sell SL", strategy.long)

// Cảnh báo khi label Buy xuất hiện
alertcondition(condition=outsideBarCrossAbove, title="Label Buy Xuất Hiện", message="Label Buy xuất hiện tại giá: {{close}}")

// Cảnh báo khi label Sell xuất hiện
alertcondition(condition=outsideBarCrossBelow, title="Label Sell Xuất Hiện", message="Label Sell xuất hiện tại giá: {{close}}")

관련

더 많은