EMA 지표 최적화와 결합된 일중 가격 범위 돌파에 기반한 모멘텀 거래 전략

EMA SL RR SAST EMAs
생성 날짜: 2025-02-21 13:20:45 마지막으로 수정됨: 2025-02-21 13:20:45
복사: 1 클릭수: 351
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

EMA 지표 최적화와 결합된 일중 가격 범위 돌파에 기반한 모멘텀 거래 전략 EMA 지표 최적화와 결합된 일중 가격 범위 돌파에 기반한 모멘텀 거래 전략

개요

이 전략은 전날의 가격 간격 돌파와 지수 이동 평균 (EMA) 을 결합한 일일 거래 전략이다. 전략은 가격 돌파 전날의 최고점 또는 최저점 시점을 식별하여 빠르고 느린 EMA의 확인 신호와 결합하여 거래한다. 이 전략은 단기 가격 움직임을 포착하는 데 초점을 맞추고 있으며, 고정된 중지 손실 수와 리스크 수익률을 설정하여 위험을 관리한다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 요소에 기초합니다.

  1. request.security 함수를 사용하여 이전 거래일의 최고점과 최저점을 핵심 가격 범위로 가져옵니다.
  2. 9주기 및 21주기 지수 이동 평균을 계산하여 트렌드 확인 지표로 사용한다.
  3. 가격 돌파가 하루 전의 최고점이고 빠른 EMA가 느린 EMA 위에 있을 때, 더 많은 신호를 트리거한다.
  4. 가격 돌파가 하루 전의 하위점이고 빠른 EMA가 느린 EMA 아래에 있을 때, 마이너스 신호를 트리거한다.
  5. 매 거래의 위험을 관리하기 위해 고정된 스톱로스 포인트 (Stop Loss Points) 를 설정합니다. (Stop Loss Points) 는 30점이며, 리스크/이익 비율은 2.0점입니다.
  6. 선택적인 거래 시간 필터 기능, 특정 시간대 (SAST 시간대) 에서 거래를 지원한다.

전략적 이점

  1. 구조가 명확하고 논리가 간단하다: 전략은 이해하기 쉽고 실행하기 쉬운 가격 돌파 논리를 사용합니다.
  2. 리스크 관리: 고정된 스톱포인트와 리스크 수익률의 설정을 통해 엄격한 리스크 통제를 실현한다.
  3. 유연한 시간 관리: 선택 가능한 거래 시간 필터 기능으로 가장 활발한 시장 시간에 거래를 할 수 있습니다.
  4. 다중 확인 메커니즘: 가격 돌파구와 EMA의 트렌드 확인을 결합하여 가짜 신호의 위험을 줄인다.
  5. 높은 수준의 자동화: 전략은 인간의 개입을 줄여 완전히 자동화 할 수 있습니다.

전략적 위험

  1. 가짜 돌파 위험: 가격이 돌파 후에 빠르게 회수되어 손실을 막는 데로 이어질 수 있다.
  2. 슬라이드 포인트 위험: 높은 변동 기간 동안 실제 거래 가격은 신호 가격과 현저한 편차가 있을 수 있다.
  3. 고정 스톱 리스크: 고정 점수의 스톱은 모든 시장 조건에 적합하지 않을 수 있습니다.
  4. 시장의 변동 위험: 낮은 변동성 동안 과도한 거래 신호가 발생할 수 있습니다.

전략 최적화 방향

  1. 동적 중지 손해 최적화: 시장의 변동에 따라 동적으로 중지 손해 점수를 조정하는 것을 고려할 수 있습니다.
  2. 거래 시간 최적화: 역사 데이터 분석을 통해 거래 시간 창 설정을 최적화한다.
  3. 신호 필터링 강화: 추가 필터링 조건으로 거래량 또는 변동률 지표를 추가한다.
  4. EMAs 변수 최적화: 역검사를 통해 최적의 EMAs 주기 설정을 결정한다.
  5. 포지션 관리 최적화: 변동율에 기반한 동적 포지션 관리 메커니즘을 도입한다.

요약하다

이 전략은 가격 돌파구와 EMA의 트렌드 확인을 결합하는 방식으로 신뢰할 수 있는 일일 거래 시스템을 구현한다. 전략의 핵심 장점은 명확한 논리 구조와 완벽한 위험 관리 장치에 있다. 전략은 제안된 최적화 방향을 통해 안정성과 수익성을 더욱 향상시킬 수 있다. 실물 거래에서는 가짜 돌파구와 슬라이드 포인트 위험에 특히 주의를 기울이고 실제 시장 조건에 따라 파라미터를 조정해야 한다.

전략 소스 코드
/*backtest
start: 2025-02-16 17:00:00
end: 2025-02-18 14:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("GER40 Momentum Breakout Scalping", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=1)

//———— Input Parameters —————
stopLossPoints = input.int(30, title="Stop Loss (Pips)", minval=1)  // Updated to 30 pips
riskReward    = input.float(2.0, title="Risk Reward Ratio", step=0.1)
useTimeFilter = input.bool(false, title="Use Time Filter? (Sessions in SAST)")
// Define sessions (SAST) if needed
session1 = "0900-1030"
session2 = "1030-1200"
session3 = "1530-1730"

//———— Time Filter Function —————
inSession = true
if useTimeFilter
    // TradingView's session function uses the chart's timezone.
    // Adjust the session times if your chart timezone is not SAST.
    inSession = time(timeframe.period, session1) or time(timeframe.period, session2) or time(timeframe.period, session3)

//———— Get Previous Day's High/Low —————
// Fetch the previous day's high/low using the daily timeframe. [1] refers to the previous completed day.
prevHigh = request.security(syminfo.tickerid, "D", high[1])
prevLow  = request.security(syminfo.tickerid, "D", low[1])

//———— Calculate EMAs on the 1-minute chart —————
emaFast = ta.ema(close, 9)
emaSlow = ta.ema(close, 21)

//———— Define Breakout Conditions —————
longCondition  = close > prevHigh and emaFast > emaSlow
shortCondition = close < prevLow  and emaFast < emaSlow

//———— Entry & Exit Rules —————
if inSession
    // Long breakout: Price breaks above previous day's high
    if (longCondition)
        strategy.entry("Long", strategy.long)
        strategy.exit("Exit Long", "Long", 
          stop = strategy.position_avg_price - stopLossPoints * syminfo.mintick, 
          limit = strategy.position_avg_price + stopLossPoints * riskReward * syminfo.mintick)
    
    // Short breakout: Price breaks below previous day's low
    if (shortCondition)
        strategy.entry("Short", strategy.short)
        strategy.exit("Exit Short", "Short", 
          stop = strategy.position_avg_price + stopLossPoints * syminfo.mintick, 
          limit = strategy.position_avg_price - stopLossPoints * riskReward * syminfo.mintick)

//———— Plot Indicators & Levels —————
plot(emaFast, color=color.blue, title="EMA 9")
plot(emaSlow, color=color.red, title="EMA 21")
plot(prevHigh, color=color.green, style=plot.style_linebr, title="Prev Day High")
plot(prevLow, color=color.maroon, style=plot.style_linebr, title="Prev Day Low")