
오전 시점 고저를 돌파하는 동적 추적 전략은 주식 시장 개시 시점을 대상으로 한 단기 거래 전략이다. 이 전략은 주로 오전 8:30 시점의 가격 고저를 기반으로 핵심 지지 및 저항 수준을 설정하고, 가격이 이러한 수준을 돌파 할 때 거래한다. 이 전략은 오전 시점의 가격 영역을 중요한 참조로 사용하여, 동적 추적 중지 장치를 결합하여, 일내의 변동을 포착 할 수 있으며, 위험을 효과적으로 제어 할 수 있다.
이 전략의 핵심 원칙은 시장 개시 전 8:30 AM 시간대에 형성된 가격 범위를 핵심 기준점으로 이용하는 것이다. 전략의 세부적인 작업 과정은 다음과 같다:
전략은 몇 가지 중요한 변수를 사용하여 거래 상태를 추적합니다. 높은 점 ((high830) 및 낮은 점 ((low830) 각각 8:30 AM 도표의 최고와 최저 가격을 기록합니다. tradeTakenToday 변수는 하루에 한 번만 거래가 실행되도록합니다. firstBreakoutHappened 첫 번째 돌파구가 발생했는지 확인합니다. 거래 조건은 동시에 충족해야합니다.
전략의 출구 조건은: 가격이 동적 추적 스톱 손실 라인을 만지고, 미리 설정된 스톱 레벨을 달성하거나 고정 스톱 손실 라인을 만집니다. 동적 추적 스톱 손실 라인은 가격이 유리한 방향으로 이동함에 따라 적절하게 조정되어 수익의 일부를 잠금합니다.
코드의 심층적인 분석을 통해, 이 전략은 다음과 같은 몇 가지 중요한 장점을 가지고 있습니다:
명확한 거래 규칙: 전략은 명확한 가격 수준 ((8:30 AM 고저) 에 기반하여 입시 신호를 설정하고 거래 조건은 명확하고 이해하기 쉽고 실행됩니다.
개선된 위험 관리이 전략은 다중 위험 제어 메커니즘을 결합하여, 동적으로 트래킹한 스톱, 고정된 스톱, 그리고 스톱을 설정하여, 각 거래의 위험을 효과적으로 제어합니다.
과도한 거래를 피하십시오.: 하루에 한 번만 거래하는 것을 제한함으로써, 거래 비용의 증가와 감정의 변동이 발생하지 않습니다.
시간 필터: 특정 거래 시간 창을 설정하여 ((8:40 AM ~ 3:00 PM), 시장의 큰 변동이있는 개시 및 종료 시간을 피합니다.
이윤을 지키는 역동성: 손실을 추적하는 메커니즘은 가격의 유리한 방향으로 이동함에 따라 손실 위치를 조정할 수 있습니다. 이는 이미 유리한 경로를 보호하고 잠재적인 큰 추세를 조기간에 종료하지 않습니다.
자동화 실행전략은 완전히 자동화되어 있으며, 인간의 감정적 간섭을 피하고, 사전 설정된 규칙에 따라 엄격하게 거래를 수행할 수 있습니다.
매우 적응력이 좋다: 파라미터 설정을 통해 (예: 스톱포인트 수, 스톱포인트 수 추적) 전략은 다양한 시장 환경과 개인의 위험 선호도에 따라 조정할 수 있다.
이 전략은 합리적으로 설계되었지만, 다음과 같은 잠재적인 위험들이 있습니다.
가짜 침입 위험: 가격은 8:30 AM 고저를 돌파한 후 급격하게 물러날 수 있으며, 잘못된 신호와 불필요한 손실을 초래합니다. 해결책은 가격의 돌파 이후 일정 시간 또는 폭을 유지하도록 요구하는 확인 메커니즘을 추가하는 것입니다.
불안정함: 시장의 변동성이 적다면, 가격이 8:30 AM의 범위를 효과적으로 돌파하지 못할 수 있으며, 거래 기회가 줄어들 것입니다. 낮은 변동성 환경에서 전략 매개 변수를 조정하거나 전략을 일시 중단하는 것이 고려 될 수 있습니다.
단일 시점에 지나치게 의존하는 것이 전략은 8:30 AM 시점의 가격에 크게 의존하고 있으며, 이 시점의 불규칙한 변동이 발생하면 불합리한 거래 범위를 설정할 수 있습니다. 여러 시점의 평균을 사용하거나 다른 기술 지표와 결합하는 것을 고려할 수 있습니다.
매개변수 민감도: 트래킹 스톱 로즈와 스톱 스톱 설정은 전략 성능에 큰 영향을 미치며, 다른 시장 환경에는 다른 파라미터 설정이 필요할 수 있습니다.
재무 관리 부족: 현재 전략에는 구체적인 포지션 관리 규칙이 포함되어 있지 않아 위험 통제가 부족할 수 있습니다.
시장 공백 위험: 시장에서 큰 격차가 발생하면 고정된 스톱로드는 효과적으로 실행되지 않을 수 있으며, 예상 이상의 손실을 초래할 수 있습니다. 고정된 점수 스톱로드에 대한 비율 스톱로드를 사용하는 것이 고려 될 수 있습니다.
코드 분석을 바탕으로, 이 전략에는 다음과 같은 몇 가지 최적화 방향이 있습니다.
수량 확인: 현재 전략은 가격 돌파구를 판단하는 것 만으로 거래량 요소를 고려하지 않습니다. 거래량 확인을 추가하면 돌파구 신호의 신뢰성을 높이고, 낮은 거래량의 가짜 돌파구를 필터링합니다. 최적화 방법은 입구 조건에서 거래량을 증가시키는 것입니다.
시장 환경 필터를 도입합니다.: 다른 시장 환경 ((트렌드, 조립) 하에서 전략의 성과가 큰 차이가 있을 수 있다. 트렌드 지표 (예: ADX, 이동 평균 등) 또는 변동률 지표 (예: ATR) 를 추가하여 적절한 시장 환경 하에서 거래 할 수 있다.
스톱 손실 및 스톱 패러미터를 최적화: 현재 고정 점수 설정으로 스톱 로즈와 스톱 스톱을 사용하며, 시장의 변동성 (ATR 배수와 같은) 에 기반한 동적 조정으로 변경하여 전략을 다른 시장 환경에 더 잘 적응시킬 수 있습니다.
다중 시간 프레임 분석: 더 높은 시간 프레임의 시장 방향과 현재의 시간 프레임의 신호를 결합하면 거래 성공률을 높일 수 있습니다. 예를 들어, 일사선 트렌드 방향과 돌파 방향이 일치하는 경우에만 거래를 수행하십시오.
역전 신호 필터를 추가합니다.: 시장의 다른 지표 (RSI, MACD 등과 같은 과매매 지표) 의 역전 신호를 고려하고 극단적인 조건에서 거래를 피하십시오.
동적 제동 장치 도입: 스톱 손실을 추적하는 것 외에도, 스톱 목표를 동적으로 조정하는 것도 고려할 수 있습니다. 예를 들어, 지원 저항치 또는 변동률 배수를 기반으로 여러 스톱 목표를 설정합니다.
거래 시간 창을 최적화합니다.: 역사적 데이터 분석을 통해 최적의 거래 시간 창을 알아내기 위해, 다른 시장이나 제품에 대한 최적의 거래 시간은 다를 수 있습니다.
오전 상위 하위 점 돌파 동적 추적 전략은 가격 간격 돌파를 기반으로 한 일간 거래 방법이며, 8:30 AM 시간대에 형성된 상위 하위점을 식별하여 동적 추적 중지 메커니즘과 결합하여 일간 가격 돌파 기회를 포착한다. 이 전략 규칙은 명확하고, 위험 관리가 개선되어 있으며, 매일 거래 수를 제한하고 거래 시간 창을 설정함으로써 과도한 거래 위험을 효과적으로 제어한다. 또한, 전략에는 가짜 돌파 위험, 파라미터 민감성 등의 잠재적인 문제가 있습니다.
/*backtest
start: 2025-02-28 00:00:00
end: 2025-03-30 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Breakout of 8:30 AM High/Low", overlay=true)
// Identify 8:30 AM candle
is830 = (hour == 8 and minute == 30)
// Persistent variables for tracking
var float high830 = na
var float low830 = na
var int lastTradeDay = na
var bool tradeTakenToday = false
// Store 8:30 AM high and low
if is830
high830 := high
low830 := low
// Ensure high/low persist throughout the day
high830 := nz(high830, high830)
low830 := nz(low830, low830)
// Plot the high and low of the 8:30 AM candle
plot(high830, color=color.green, title="8:30 High", linewidth=2)
plot(low830, color=color.red, title="8:30 Low", linewidth=2)
// Reset tradeTakenToday at the start of each new trading day
if dayofweek != lastTradeDay or (hour == 0 and minute == 0)
tradeTakenToday := false
lastTradeDay := dayofweek // Update last trade day to the current day
// Track first breakout candle that closes outside the range
firstBreakoutHappened = ta.barssince(close > high830 or close < low830) == 0
// Time restriction: Only trade between 8:40 AM and 3:00 PM
isTradingTime = (hour == 8 and minute >= 40) or (hour > 8 and hour < 15)
// Entry conditions: first 15-min candle close outside the range & within trading time
longEntry = close > high830 and firstBreakoutHappened and not tradeTakenToday and isTradingTime
shortEntry = close < low830 and firstBreakoutHappened and not tradeTakenToday and isTradingTime
// Trailing stop and take profit logic inputs
ticks = input.int(15, title="Trailing Stop Loss Ticks", minval=1) // Trailing stop in ticks
takeProfit = input.int(30, title="Take Profit (in Ticks)", minval=1) // Take profit in ticks
// Variables to track trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na
// Update trailing stop levels for long trades
if (longEntry)
longTrailingStop := close - ticks * syminfo.mintick // Initialize trailing stop for long
// Update trailing stop levels for short trades
if (shortEntry)
shortTrailingStop := close + ticks * syminfo.mintick // Initialize trailing stop for short
// Update trailing stop levels during the trade
if (not na(longTrailingStop))
longTrailingStop := math.max(longTrailingStop, close - ticks * syminfo.mintick) // Move trailing stop up for long
if (not na(shortTrailingStop))
shortTrailingStop := math.min(shortTrailingStop, close + ticks * syminfo.mintick) // Move trailing stop down for short
// Exit Conditions (Trailing Stop)
endLongTrade = not na(longTrailingStop) and close <= longTrailingStop
endShortTrade = not na(shortTrailingStop) and close >= shortTrailingStop
// Reset trailing stop levels after exit
if (endLongTrade)
longTrailingStop := na
if (endShortTrade)
shortTrailingStop := na
// Stop loss and take profit settings
stopLoss = 100
// Execute trades (only one per day)
if longEntry
strategy.entry("Long", strategy.long, comment="Breakout Long")
strategy.exit("Long TP/SL", from_entry="Long", stop=close - stopLoss, limit=close + takeProfit * syminfo.mintick)
tradeTakenToday := true
if shortEntry
strategy.entry("Short", strategy.short, comment="Breakout Short")
strategy.exit("Short TP/SL", from_entry="Short", stop=close + stopLoss, limit=close - takeProfit * syminfo.mintick)
tradeTakenToday := true
// Exit trades using trailing stops
if endLongTrade
strategy.close("Long", comment="Trailing Stop Hit for Long")
if endShortTrade
strategy.close("Short", comment="Trailing Stop Hit for Short")