양적 트레이딩 돌파 전략: 1차 기간 동안 ATR 손절매 및 EMA 경사 최적화 전략

ATR VWAP EMA SL TP
생성 날짜: 2025-02-28 09:46:26 마지막으로 수정됨: 2025-02-28 09:46:26
복사: 1 클릭수: 584
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

양적 트레이딩 돌파 전략: 1차 기간 동안 ATR 손절매 및 EMA 경사 최적화 전략 양적 트레이딩 돌파 전략: 1차 기간 동안 ATR 손절매 및 EMA 경사 최적화 전략

개요

이 전략은 일일 거래에 특화된 수량 거래 시스템으로, 핵심 아이디어는 시장의 첫 시간 동안의 가격 행동을 중심으로 펼쳐진다. 전략은 시장 개장 첫 시간 동안의 높은 낮은 점을 주요 돌파구 수준으로 식별하여, EMA (지수 이동 평균), VWAP (매출 중화 평균 가격) 및 동적 ATR (평균 실제 범위) 를 결합하여 손실 제도를 구축하여 완전한 거래 시스템을 구성한다. 이 전략은 특히 기회에 재입입하는 선택에 초점을 맞추고 있으며, 거래 신호가 트리퍼를 허용하는 것은 첫 번째 시장 시간이 끝난 후에만입니다. 이것은 초기 상점의 변동과 가짜 돌파구를 피하는 데 도움이됩니다.

전략 원칙

전략의 핵심 논리는 다음과 같은 몇 가지 핵심 부분으로 나눌 수 있습니다.

  1. 첫 시간 최고와 최저가 확인됐습니다.전략: 시장 개시 후 첫 시간 (9.15부터 60분) 에 가장 높은 가격과 가장 낮은 가격을 모니터링하고 기록하는 것. 이 두가지 가격 수준은 잠재적인 돌파구로 사용될 것입니다.

  2. 기술 지표 계산

    • 9주기 EMA: 가격 동향의 빠른 지표
    • VWAP: 시장 전체 가격 수준을 나타내는 기준
    • EMA 슬라이드: 트렌드 방향을 확인하기 위해 현재 EMA와 이전 1주기 EMA의 차이를 계산합니다.
  3. 입학 조건

    • 다중 입점: 가격이 1시간 최고치를 돌파하고, 9EMA에서 VWAP를 뚫고, EMA 마이너스가 긍정적으로 나타났습니다.
    • 공허 입점: 가격이 1시간 하락을 돌파하고, 9EMA 아래 VWAP를 통과하며, EMA 마이너스 마이너스
    • 두 가지 입시 조건 모두 첫 번째 시간 기간이 끝난 것을 요구합니다.
  4. 출전 전략

    • 스톱: ATR 기반의 동적 스톱, ATR의 1배
    • 정지: 1%의 가격 변화를 기본으로 설정한 비율 목표
  5. 자금 관리

    • 이 전략은 기본적으로 매 거래마다 계좌 자금의 10%를 사용합니다.

이 디자인 개념은 브레이크 트레이딩, 트렌드 확인 및 동적 위험 관리를 결합하여 완전하고 체계적인 거래 방법을 형성한다. 가격 브레이크와 기술 지표 확인이 동시에 발생하도록 요구함으로써, 전략은 가짜 브레이크의 위험을 효과적으로 감소시킨다.

전략적 이점

이 전략의 코드에 대한 깊은 분석은 다음과 같은 몇 가지 분명한 장점을 요약할 수 있습니다.

  1. 정확한 출입 시간첫 번째 시간 높은 낮은 수준을 핵심 수준으로, 전략은 하루의 중요한 돌파 기회를 잡을 수 있습니다. 시장의 첫 번째 시간은 종종 그날의 거래 범위를 설정합니다. 이러한 수준을 돌파하는 것은 일반적으로 강력한 동력이 있다는 것을 의미합니다.

  2. 다중 인증 메커니즘이 전략은 가격 돌파구에만 의존하지 않고, VWAP와 EMA의 교차 확인과 EMA 경사 방향의 일치도 요구합니다. 이러한 다중 필터링은 가짜 신호를 크게 감소시킵니다.

  3. 동적 위험 관리ATR을 중지 기반으로 사용하여, 전략은 시장의 변동성에 따라 자동으로 중지 거리를 조정할 수 있으며, 변동성이 큰 경우 가격에 더 많은 호흡 공간을 부여하고, 변동성이 작을 때 이익을 보호하기 위해 중지 조치를 강화합니다.

  4. 명확한 거래 규칙전략은 명확한 입출입 조건을 규정하고, 주관적인 판단을 줄여주고, 거래 규율을 유지하는데 도움을 줍니다.

  5. 시각 보조 기능: 코드는 신호 표기 및 핵심 레벨의 시각화를 포함하고, 거래자가 전략 논리를 직관적으로 이해하고 거래 기회를 실시간으로 모니터링 할 수 있도록 도와줍니다.

  6. 시장에 적응하는 방법이 전략은 오프타임에 자주 나타나는 무질서한 변동들을 피하고, 지속될 가능성이 높은 움직임에 초점을 맞추고 있다.

전략적 위험

이 전략은 합리적으로 설계되었지만 몇 가지 잠재적인 위험과 한계가 있습니다.

  1. 단일 시간대에 지나치게 의존하는 것전략의 과도한 의존은 첫 시간 동안 형성된 높고 낮은 시점으로, 만약 이 시기가 비상대적인 경우 (예: 비정상적으로 낮은 변동이나 임시 뉴스 영향을 받는 경우) 후속 거래 신호의 질이 떨어질 수 있다.

  2. 고정 차단 비율의 한계1퍼센트의 고정된 정지 목표는 다른 시장 환경과 다른 변동성 자산에 적응하지 못할 수 있다. 강한 추세일에는, 이것은 더 큰 잠재적인 수익을 놓치고 조기 수익을 끝낼 수 있다.

  3. EMA와 VWAP 지연 위험: 지연 지표로서, EMA와 VWAP의 교차 신호는 가격이 이미 눈에 띄게 돌파된 후에 나타날 수 있으며, 입시 가격이 바람직하지 않습니다.

  4. 전체적인 시장 상황을 고려하지 않고전략은 광범위한 시장 환경 평가를 포함하지 않습니다. (전체 시장 추세, 변동성 환경 또는 연관성 분석과 같은) 특정 시장 조건에서 좋지 않은 성과를 낼 수 있습니다.

  5. 일일 전략 실행의 도전: 일일 전략으로, 높은 실행 효율과 낮은 슬라이드 포인트를 요구합니다. 실제 거래에서 도전을 받을 수 있습니다.

이러한 위험을 줄이기 위해 다음과 같은 것이 권장됩니다.

  • 다른 기술 또는 기본 필터링 조건과 결합
  • 자산 특성에 따라 ATR 배수 및 정지 목표를 조정
  • 시간 필터링을 추가하여 효율성이 낮은 시간에 거래하는 것을 고려하십시오.
  • 정기적으로 재검토하고 시장 변화에 따라 변수를 조정합니다.

전략 최적화 방향

전략적 논리와 잠재적인 위험에 대한 분석을 바탕으로 다음과 같은 몇 가지 최적화 방향을 고려할 수 있습니다.

  1. 적응 변수 조정

    • ATR 배수를 역사 변동성에 따라 자동으로 조정합니다.
    • 자산 특성이나 시장 상태의 동성에 따라 정지 목표를 설정합니다.
    • 다양한 시장 환경에 적응하기 위해 적응 EMA 주기를 고려하십시오.
  2. 시장 환경 필터링

    • 지수 방향과 같은 전체 시장 추세에 대한 평가
    • 변동성 필터를 추가하여 매우 높거나 매우 낮은 변동성 동안 정책 행동을 조정합니다.
    • 시간 필터를 고려하고 특정 부실 거래 시기를 피하십시오.
  3. 첫 시간 논리를 최적화합니다.

    • 테스트의 첫 번째 시간 정의는 30분, 45분, 90분입니다.
    • 첫 번째 시간 가격 구조를 고려하고 단순한 고하를 고려하지 마십시오.
    • 추가 필터링 조건으로 이전 거래일 종료와 당일 개시의 관계를 탐색합니다.
  4. 출전 메커니즘 개선

    • 이윤을 보호하고 추세가 지속될 수 있도록 스톱 로스를 추적하는 것을 구현합니다.
    • 기술 지표에 기반한 동적 출전을 테스트한다 (예: EMA 역교차)
    • 일부 수익을 창출하는 전략을 고려하고 특정 목표가 달성되면 일부 포지션을 청산하십시오.
  5. 위험 관리 강화

    • 매일 변동에 대한 예상에 따라 포지션 규모를 조정합니다.
    • 일일 손실 제한을 달성하여 전반적인 위험을 제어합니다.
    • 과거 거래 결과에 기반한 적응적 위험 관리를 고려하는 것

이러한 최적화 방향은 전략의 핵심 논리를 유지하면서, 더 넓은 시장 조건에서 유효하게 유지될 수 있도록 그것의 적응성과 안정성을 높이는 것을 목표로 합니다.

요약하다

첫 시간 ATR 정지 및 EMA 슬라이드 최적화 전략은 첫 시간 하위 고위 돌파구, 기술 지표 확인 및 동적 위험 관리를 결합하여 거래자에게 체계화된 거래 방법을 제공하는 잘 구성된 일일 양적 거래 시스템입니다. 이 전략의 가장 큰 장점은 여러 확인 메커니즘과 명확한 거래 규칙에 있습니다. 이것은 가짜 신호를 줄이고 거래 규율을 유지하는 데 도움이됩니다.

그러나, 전략에는 또한 한 시간대에 과도하게 의존하고 고정된 정지 목표의 적응성 문제와 같은 몇 가지 제한이 있습니다. 제안된 최적화 조치를 시행함으로써, 예를 들어 적응성 파라미터 조정, 시장 환경 필터링을 증가시키고 출구 메커니즘을 개선함으로써, 거래자는 전략의 안정성과 적응성을 더욱 향상시킬 수 있습니다.

전반적으로, 이것은 기초가 단단하고 명확한 거래 전략이며, 특히 일일 거래에 관심이있는 양적 거래자에게 적합합니다. 적절한 매개 변수 조정과 최적화와 함께 거래 포트폴리오에서 효과적인 도구가 될 잠재력이 있습니다.

전략 소스 코드
/*backtest
start: 2024-02-29 00:00:00
end: 2025-02-26 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("FnO Intraday Strategy with ATR SL, EMA Slope & Signals", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// INPUTS
atrPeriod      = input.int(14, "ATR Period")
atrMultiplier  = input.float(1.0, "ATR Stop Loss Multiplier", step=0.1)
targetPercent  = input.float(1.0, "Profit Target (%)", step=0.1) * 0.01

// Define session start and first candle period (for Indian market, session starts at 09:15)
sessionStartHour   = input.int(9, "Session Start Hour", minval=0, maxval=23)
sessionStartMinute = input.int(15, "Session Start Minute", minval=0, maxval=59)
firstCandleMins    = 60  // First candle duration in minutes

// Compute today's session start and first candle end timestamps
currYear  = year(time)
currMonth = month(time)
currDay   = dayofmonth(time)
sessionStartTS = timestamp(currYear, currMonth, currDay, sessionStartHour, sessionStartMinute)
sessionEndTS   = sessionStartTS + firstCandleMins * 60 * 1000  // PineScript time is in ms

// INITIALIZE first-hour high/low (reset at the start of each day)
var float firstHourHigh = na
var float firstHourLow  = na
if (ta.change(time("D")))
    firstHourHigh := na, firstHourLow := na

// Update first-hour high/low while within the first candle period
if (time >= sessionStartTS and time <= sessionEndTS)
    firstHourHigh := na(firstHourHigh) ? high : math.max(firstHourHigh, high)
    firstHourLow  := na(firstHourLow)  ? low  : math.min(firstHourLow, low)

// Plot the first-hour high and low once the first candle period is over
plot(time > sessionEndTS ? firstHourHigh : na, title="First Hour High", color=color.green, style=plot.style_linebr)
plot(time > sessionEndTS ? firstHourLow  : na, title="First Hour Low",  color=color.red,   style=plot.style_linebr)

// Calculate indicators: 9 EMA, VWAP, and EMA slope
ema9    = ta.ema(close, 9)
vwapVal = ta.vwap(hlc3)  // Using typical price for VWAP calculation
emaSlope = ema9 - ema9[1]

// Define "first hour complete" flag so entries only occur after the first candle period
firstHourComplete = time > sessionEndTS

// ENTRY CONDITIONS
// Long: Price breaks above first-hour high, and 9 EMA crosses above VWAP with a positive slope.
longBreakout       = ta.crossover(close, firstHourHigh)
longEMAConfirmation = ta.crossover(ema9, vwapVal) and (emaSlope > 0)
longCondition      = firstHourComplete and longBreakout and longEMAConfirmation

// Short: Price breaks below first-hour low, and 9 EMA crosses below VWAP with a negative slope.
shortBreakout       = ta.crossunder(close, firstHourLow)
shortEMAConfirmation = ta.crossunder(ema9, vwapVal) and (emaSlope < 0)
shortCondition      = firstHourComplete and shortBreakout and shortEMAConfirmation

// Generate entries
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Add buy and sell signals on the chart
plotshape(longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Calculate ATR for dynamic stop loss
atrValue = ta.atr(atrPeriod)

// Set exits using ATR-based stop loss and fixed profit target (1% gain)
if (strategy.position_size > 0)
    longStop   = strategy.position_avg_price - atrValue * atrMultiplier
    longTarget = strategy.position_avg_price * (1 + targetPercent)
    strategy.exit("Long Exit", from_entry="Long", stop=longStop, limit=longTarget)
if (strategy.position_size < 0)
    shortStop   = strategy.position_avg_price + atrValue * atrMultiplier
    shortTarget = strategy.position_avg_price * (1 - targetPercent)
    strategy.exit("Short Exit", from_entry="Short", stop=shortStop, limit=shortTarget)

// Plot EMA and VWAP for visual confirmation
plot(ema9, title="9 EMA", color=color.blue)
plot(vwapVal, title="VWAP", color=color.orange)