
이 전략은 일일 거래에 특화된 수량 거래 시스템으로, 핵심 아이디어는 시장의 첫 시간 동안의 가격 행동을 중심으로 펼쳐진다. 전략은 시장 개장 첫 시간 동안의 높은 낮은 점을 주요 돌파구 수준으로 식별하여, EMA (지수 이동 평균), VWAP (매출 중화 평균 가격) 및 동적 ATR (평균 실제 범위) 를 결합하여 손실 제도를 구축하여 완전한 거래 시스템을 구성한다. 이 전략은 특히 기회에 재입입하는 선택에 초점을 맞추고 있으며, 거래 신호가 트리퍼를 허용하는 것은 첫 번째 시장 시간이 끝난 후에만입니다. 이것은 초기 상점의 변동과 가짜 돌파구를 피하는 데 도움이됩니다.
전략의 핵심 논리는 다음과 같은 몇 가지 핵심 부분으로 나눌 수 있습니다.
첫 시간 최고와 최저가 확인됐습니다.전략: 시장 개시 후 첫 시간 (9.15부터 60분) 에 가장 높은 가격과 가장 낮은 가격을 모니터링하고 기록하는 것. 이 두가지 가격 수준은 잠재적인 돌파구로 사용될 것입니다.
기술 지표 계산:
입학 조건:
출전 전략:
자금 관리:
이 디자인 개념은 브레이크 트레이딩, 트렌드 확인 및 동적 위험 관리를 결합하여 완전하고 체계적인 거래 방법을 형성한다. 가격 브레이크와 기술 지표 확인이 동시에 발생하도록 요구함으로써, 전략은 가짜 브레이크의 위험을 효과적으로 감소시킨다.
이 전략의 코드에 대한 깊은 분석은 다음과 같은 몇 가지 분명한 장점을 요약할 수 있습니다.
정확한 출입 시간첫 번째 시간 높은 낮은 수준을 핵심 수준으로, 전략은 하루의 중요한 돌파 기회를 잡을 수 있습니다. 시장의 첫 번째 시간은 종종 그날의 거래 범위를 설정합니다. 이러한 수준을 돌파하는 것은 일반적으로 강력한 동력이 있다는 것을 의미합니다.
다중 인증 메커니즘이 전략은 가격 돌파구에만 의존하지 않고, VWAP와 EMA의 교차 확인과 EMA 경사 방향의 일치도 요구합니다. 이러한 다중 필터링은 가짜 신호를 크게 감소시킵니다.
동적 위험 관리ATR을 중지 기반으로 사용하여, 전략은 시장의 변동성에 따라 자동으로 중지 거리를 조정할 수 있으며, 변동성이 큰 경우 가격에 더 많은 호흡 공간을 부여하고, 변동성이 작을 때 이익을 보호하기 위해 중지 조치를 강화합니다.
명확한 거래 규칙전략은 명확한 입출입 조건을 규정하고, 주관적인 판단을 줄여주고, 거래 규율을 유지하는데 도움을 줍니다.
시각 보조 기능: 코드는 신호 표기 및 핵심 레벨의 시각화를 포함하고, 거래자가 전략 논리를 직관적으로 이해하고 거래 기회를 실시간으로 모니터링 할 수 있도록 도와줍니다.
시장에 적응하는 방법이 전략은 오프타임에 자주 나타나는 무질서한 변동들을 피하고, 지속될 가능성이 높은 움직임에 초점을 맞추고 있다.
이 전략은 합리적으로 설계되었지만 몇 가지 잠재적인 위험과 한계가 있습니다.
단일 시간대에 지나치게 의존하는 것전략의 과도한 의존은 첫 시간 동안 형성된 높고 낮은 시점으로, 만약 이 시기가 비상대적인 경우 (예: 비정상적으로 낮은 변동이나 임시 뉴스 영향을 받는 경우) 후속 거래 신호의 질이 떨어질 수 있다.
고정 차단 비율의 한계1퍼센트의 고정된 정지 목표는 다른 시장 환경과 다른 변동성 자산에 적응하지 못할 수 있다. 강한 추세일에는, 이것은 더 큰 잠재적인 수익을 놓치고 조기 수익을 끝낼 수 있다.
EMA와 VWAP 지연 위험: 지연 지표로서, EMA와 VWAP의 교차 신호는 가격이 이미 눈에 띄게 돌파된 후에 나타날 수 있으며, 입시 가격이 바람직하지 않습니다.
전체적인 시장 상황을 고려하지 않고전략은 광범위한 시장 환경 평가를 포함하지 않습니다. (전체 시장 추세, 변동성 환경 또는 연관성 분석과 같은) 특정 시장 조건에서 좋지 않은 성과를 낼 수 있습니다.
일일 전략 실행의 도전: 일일 전략으로, 높은 실행 효율과 낮은 슬라이드 포인트를 요구합니다. 실제 거래에서 도전을 받을 수 있습니다.
이러한 위험을 줄이기 위해 다음과 같은 것이 권장됩니다.
전략적 논리와 잠재적인 위험에 대한 분석을 바탕으로 다음과 같은 몇 가지 최적화 방향을 고려할 수 있습니다.
적응 변수 조정:
시장 환경 필터링:
첫 시간 논리를 최적화합니다.:
출전 메커니즘 개선:
위험 관리 강화:
이러한 최적화 방향은 전략의 핵심 논리를 유지하면서, 더 넓은 시장 조건에서 유효하게 유지될 수 있도록 그것의 적응성과 안정성을 높이는 것을 목표로 합니다.
첫 시간 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)