첫 번째 30분 가격 범위 돌파 전략: 다중 기간 모멘텀 식별을 기반으로 한 시장 추세 추적 시스템

ATR Range Breakout SESSION ANALYSIS momentum Risk-Reward Ratio R:R TIME-BASED TRADING SINGLE ENTRY SYSTEM
생성 날짜: 2025-07-25 11:57:10 마지막으로 수정됨: 2025-07-25 11:57:10
복사: 0 클릭수: 211
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

첫 번째 30분 가격 범위 돌파 전략: 다중 기간 모멘텀 식별을 기반으로 한 시장 추세 추적 시스템 첫 번째 30분 가격 범위 돌파 전략: 다중 기간 모멘텀 식별을 기반으로 한 시장 추세 추적 시스템

개요

첫 반시간 가격 간격 돌파 전략은 시간 분석과 가격 간격 돌파를 기반으로 한 거래 시스템으로, 15분 차트에서 거래하기 위해 특별히 고안되었다. 이 전략은 거래 일일 전 30분 (09:15-09:44:59) 에 형성된 가격 간격을 중요한 참고로 사용하여 돌파 지점을 결정한 후 거래를 한다. 전략의 핵심 아이디어는 시장 방향이 확립된 후, 순진을 위해 조기 상장 가격 움직임을 포착하는 것이며, 동시에 엄격한 일일 거래 한 번 제한을 통해 과도한 거래를 피하고, 전반적인 승률을 높이는 것이다.

전략 원칙

이 전략은 시장의 이른 시점에 기초한 가격 범위를 구축하는 것이 그 당일 거래 활동의 중요한 지원 및 저항 수준을 반영할 수 있는 개념이다. 구체적인 실행 과정은 다음과 같다:

  1. 참조 영역 형성시스템 모니터링 및 거래 전날의 15분 K선 ((09:15:00-09:44:59) 의 두 개의 데이터를 통합하여 “리퍼런스 하이 포인트”와 “리퍼런스 리퍼런스 로이 포인트”를 형성하기 위해 이 기간 동안의 최고 가격과 최저 가격을 기록합니다.

  2. 거래 설정09:45K 라인이 완료된 후, 참조 영역이 잠겨있다. 다음 거래 시간 동안 (아침 09:15-12:00 및 오후 13:00-16:00을 포함하여) 전략은 가격의 참조 영역을 뚫는 신호를 찾습니다.

  3. 참가 규칙

    • 다중 입단가격 상승이 기준 최고치 또는 그 이상일 때 구매 신호를 발동한다.
    • 공허 입원: 가격이 기준 하위점 또는 그 이하로 떨어지면 판매 신호를 쏘아 올립니다.
    • 일일 거래 제한: 어떤 거래가 실행되면, 그 날 새로운 거래 포지션을 열지 않습니다.
  4. 출전 규칙

    • 목표 지연: 입점 가격으로 설정하여 추가 (多頭) 또는 빼 (空頭) 하는 초기 간격의 거리.
    • 정지 위치: 다중 거래의 중지 손실은 참조 낮은 지점에서, 공백 거래의 중지 손실은 참조 높은 지점에서 설정 .
  5. 거래 방향 제어

    • 사용자는 입력 파라미터를 통해 거래 방향을 “구매만”, “판매만” 또는 “비방향”으로 제한할 수 있으며, 이는 개인의 시장 선호 또는 추세 판단에 적합하다.

전략 코드는 논리적으로 엄격한 시간 제어와 가격 조건 검사를 통해, 침입 신호를 정확하게 포착하고 위험 관리 규칙을 엄격하게 시행하도록 보장합니다.

전략적 이점

코드에 대한 심층적인 분석 결과, 이 전략은 다음과 같은 중요한 장점을 가지고 있습니다:

  1. 규율이 강합니다.매일 한 번만 거래하는 것은 과도한 거래와 감정적 인 결정을 방지하고 거래 빈도와 관련된 비용과 심리적 스트레스를 줄일 수 있습니다.

  2. 규칙이 명확합니다.입출장 조건이 명확하고 투명하며, 주관적인 판단이 필요하지 않아 거래 과정에서 주저와 오류가 줄어들었습니다.

  3. 유연성: “trade_direction” 파라미터를 통해, 사용자는 거시적 추세나 개인 분석에 따라 다면, 공면 또는 양방향 거래를 유지할 수 있으며, 전략의 적응성을 증가시킨다.

  4. 완벽한 위험 관리: 각 거래에는 미리 정의된 중지 및 중지 목표가 있으며, 위험과 수익의 비율이 명확하여 장기적으로 안정적인 자금 관리를 돕습니다.

  5. 시간 효율성시장 개시 후 첫 30분 간격에 초점을 맞추어, 전략은 시장의 이른 경기가 종종 더 큰 변동성과 방향성을 갖는 특징을 활용하여 거래 효율성을 향상시킵니다.

  6. 코드 구조가 명확합니다.: 전략 구현은 변수 재설정과 조건 검사를 사용하는 방식으로, 논리적으로 엄격하고, 이해하기 쉽고, 유지하기 쉽다.

전략적 위험

이 전략은 합리적으로 설계되었지만, 다음과 같은 잠재적인 위험들이 있습니다.

  1. 가짜 침입 위험: 시장은 참조 범위를 깨고 나서 빠르게 반전할 수 있으며, 이로 인해 스톱 손실이 유발됩니다. 해결책은 가격의 깨진 후 일정 시간 동안 유지하거나 특정 폭을 넘기 전에 거래를 실행하기 위해 확인 메커니즘을 추가하는 것입니다.

  2. 범위를 너무 넓히는 위험오전 30분 동안 시장이 너무 많이 변동하면, 상쇄 손실이 너무 멀어지고, 합리적인 위험 관리 원칙에 부합하지 않습니다. 최대 간격 제한을 설정하거나, 역사적인 변동률에 따라 동적으로 조정하는 것을 고려할 수 있습니다.

  3. 너무 좁은 범위의 위험대조적으로, 조기 거래가 너무 작은 변동으로 인해 정지 목표가 입구 지점과 너무 가까워 거래 비용을 커버하는 것이 어려울 수 있습니다. 해결책은 최소 간격 요구 사항을 설정하거나 낮은 변동의 날에 거래를 포기하는 것입니다.

  4. 단일 시장 의존전략은 특정 시장을 위해 설계되어 다른 시장 또는 다른 시장 조건에서 좋지 않을 수 있습니다. 적용하기 전에 충분한 피드백과 시장 적응성 분석을 수행하는 것이 좋습니다.

  5. 고정된 리스크/수익률의 한계: 코드에서 고정된 리스크 리워드 비율 ((risk_reward = 1.0) 을 사용한다. 이는 다른 시장 조건에 적합하지 않을 수 있다. 시장의 변동성이나 트렌드 강도에 따라 동적으로 조정하는 것을 고려할 수 있다.

최적화 방향

코드 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:

  1. 동적 영역 조정: 현재 전략은 고정된 시간 창을 사용하여 (최초 30 분) 거래 범위를 결정한다. 시장의 변동률 (ATR 지표와 같은) 에 따라 동적으로 참조 범위를 조정하는 방법을 고려하여 다른 시장 환경에 적응 할 수 있습니다.

  2. 다중 인증 메커니즘: 추가적인 기술 지표 또는 가격 패턴 확인을 추가하여, 단기 이동 평균 추세와 일치하는 파격 방향에서만 거래를 실행하면, 가짜 파격 위험을 줄일 수 있습니다.

  3. 일부 포지션 관리: 코드가 변경되어 부분 중단 및 부분 중단 전략이 구현되었습니다. 예를 들어, 특정 수익 목표가 달성되면 일부 포지션을 제거하고 나머지 부분은 트렌드 행동을 최대한 잡기 위해 손실 추적을 설정합니다.

  4. 시간 퇴화 요인: 시간적 쇠퇴 요소를 도입하여 거래일이 진행됨에 따라 전략의 브레이크 신호에 대한 요구가 점차 증가합니다. 일반적으로, 이른 상장 브레이크가 후기 상장 브레이크보다 더 의미가 있기 때문입니다.

  5. 적응의 위험과 이익의 비율: 시장 상황에 따라 위험/이익 비율을 동적으로 조정합니다. 고정된 값을 사용하는 대신 다른 시장 환경에 더 잘 적응합니다.

  6. 거래량 필터거래량 확인 메커니즘을 강화하여 거래량이 크게 증가했을 때만 돌파구를 확인하여 가짜 돌파구를 추가로 줄일 수 있습니다.

요약하다

첫 번째 반시간 가격 범위를 돌파하는 전략은 시장의 이른 시기를 구축한 중요한 가격 범위를 포착하고 그 돌파구를 추적하여 거래를 수행하는 간결하고 효과적인 거래 시스템입니다. 이 전략은 규율, 명확한 규칙 및 엄격한 위험 통제를 강조하며 체계화된 거래 방법을 찾는 거래자에게 특히 적합합니다.

전략의 핵심 장점은 명확한 입출장 규칙, 일일 거래 제한 및 조정 가능한 거래 방향 선호가 있기 때문에 체계화된 거래의 규율을 유지하면서도 다양한 시장 환경에 적응할 수있는 유연성을 갖출 수 있습니다.

가짜 돌파구 위험과 구간 설정의 도전이 있지만, 동적 구간 조정, 여러 확인 메커니즘 및 적응 위험 관리와 같은 권장 된 최적화 방향으로 이러한 위험을 효과적으로 완화 할 수 있습니다.

전반적으로, 이것은 합리적이고 논리적으로 명확한 전략 프레임워크로 설계되어 있으며, 거래자가 충분히 이해하고 적절하게 조정한 후 실제 거래에 적용할 수 있습니다. 특히 시장의 초기 거래의 동력과 방향성을 포착하는 데 적합합니다.

전략 소스 코드
/*backtest
start: 2025-06-24 00:00:00
end: 2025-07-12 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("HSI1! First 30m Candle Strategy (15m Chart)", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, calc_on_every_tick=true)

// === CONFIGURATION ===
risk_reward = 1.0
trade_size = 1

// User input to choose direction
trade_direction = input.string("Both", title="Trade Direction", options=["Buy Only", "Sell Only", "Both"])

// === SESSION TIME ===
time_in_session = (time >= timestamp("Asia/Hong_Kong", year, month, dayofmonth, 9, 15) and time <= timestamp("Asia/Hong_Kong", year, month, dayofmonth, 12, 0)) or (time >= timestamp("Asia/Hong_Kong", year, month, dayofmonth, 13, 0) and time <= timestamp("Asia/Hong_Kong", year, month, dayofmonth, 16, 0))

// === FIRST 30-MIN CANDLE AGGREGATION ===
// The first 30m period: 09:15:00 to 09:44:59
start_30m = timestamp("Asia/Hong_Kong", year, month, dayofmonth, 9, 15)
end_30m   = timestamp("Asia/Hong_Kong", year, month, dayofmonth, 9, 45)

// Identify the first bar of a new day for reset
curr_ymd = year * 10000 + month * 100 + dayofmonth
var int first_30m_ymd = na
var float first_30m_high = na
var float first_30m_low  = na
var bool range_locked = false

// Reset all at the start of a new day
if na(first_30m_ymd) or first_30m_ymd != curr_ymd
    first_30m_ymd := curr_ymd
    first_30m_high := na
    first_30m_low := na
    range_locked := false

// If within first 30m window, keep updating highs/lows
if time >= start_30m and time < end_30m
    first_30m_high := na(first_30m_high) ? high : math.max(first_30m_high, high)
    first_30m_low  := na(first_30m_low)  ? low  : math.min(first_30m_low, low)

// Lock the range after the 09:45 bar starts
if not range_locked and time >= end_30m and not na(first_30m_high) and not na(first_30m_low)
    range_locked := true

carry_high = range_locked ? first_30m_high : na
carry_low  = range_locked ? first_30m_low  : na

// === SINGLE TRADE PER DAY LOGIC ===
var int last_trade_ymd = na
var bool traded_today = false

if na(last_trade_ymd) or last_trade_ymd != curr_ymd
    traded_today := false  // New day, reset flag

can_trade = time_in_session and not na(carry_high) and not traded_today

// === TRADE ENTRY/EXIT CONDITIONS ===
long_condition  = can_trade and strategy.position_size == 0 and high >= carry_high and (trade_direction == "Buy Only" or trade_direction == "Both")
short_condition = can_trade and strategy.position_size == 0 and low <= carry_low and (trade_direction == "Sell Only" or trade_direction == "Both")

stop_long  = carry_low
take_long  = carry_high + (carry_high - carry_low) * risk_reward

stop_short = carry_high
take_short = carry_low - (carry_high - carry_low) * risk_reward

if long_condition
    strategy.entry("Long", strategy.long, qty=trade_size, stop=carry_high)
    strategy.exit("TP/SL Long", "Long", stop=stop_long, limit=take_long)
    last_trade_ymd := curr_ymd
    traded_today := true

if short_condition
    strategy.entry("Short", strategy.short, qty=trade_size, stop=carry_low)
    strategy.exit("TP/SL Short", "Short", stop=stop_short, limit=take_short)
    last_trade_ymd := curr_ymd
    traded_today := true

// === PLOTS ===
plot(carry_high, title="First 30m High", color=color.green, linewidth=2, display=display.none)
plot(carry_low,  title="First 30m Low",  color=color.red, linewidth=2, display=display.none)