고급 범위 돌파 다중 시간 프레임 거래 전략

HTF SMA PIN BAR RSI EMA VOL
생성 날짜: 2025-02-18 18:08:09 마지막으로 수정됨: 2025-02-18 18:08:09
복사: 0 클릭수: 530
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

고급 범위 돌파 다중 시간 프레임 거래 전략

개요

이것은 그래프 간격 이론에 기반한 다중 시간 주기의 거래 전략이다. 이 전략은 주로 더 높은 시간 주기의 그래프 형태와 가격 간격을 분석하여 잠재적인 거래 기회를 식별한다. 이 전략은 거래량 필터와 동적 스톱 패스 메커니즘을 통합하여 이전 시기의 높은 낮은 시점에 대한 돌파구를 통해 트렌디션 기회를 포착한다.

전략 원칙

전략의 핵심은 더 높은 시간 주기 (설정된 4시간) 에서 가격이 이전 범위를 돌파하는 상황을 모니터링하는 것입니다. 구체적으로:

  1. 이 전략은 K 선의 두 개의 높은 시간 주기의 높은 점과 낮은 점 데이터를 지속적으로 추적하고 저장합니다.
  2. 현재 K 선의 종결 가격이 이전 고위보다 낮고 현재 K 선의 혁신 고위일 때, 하위 신호가 형성된다
  3. 현재 K 선의 종전 가격이 이전보다 높고 현재 K 선의 혁신이 낮을 때, 다중 신호가 형성된다.
  4. 입점 가격은 K선을 유발하는 높은 낮은 위치로 설정됩니다.
  5. 이윤 목표 설정 이전 기간에 해당하는 높은 낮은 위치
  6. 정지 거리는 구간 크기에 따라 동적으로 조정됩니다

전략적 이점

  1. 다중 시간 주기 분석은 더 신뢰할 수 있는 신호를 제공합니다.
  2. 동적 중지 손실 설정, 시장의 변동에 따라 적응
  3. 선택 가능한 거래량 필터링 메커니즘은 거래 확인을 증가시킵니다.
  4. 트리거 가격, 타겟 가격, 그리고 스톱 로즈 가격의 표시를 포함한 명확한 시각적 인터페이스
  5. 전략적 논리는 간단하고 명확하며, 이해하기 쉽고 실행하기 쉽습니다.
  6. 다양한 거래 유형과 시장 환경에 적합합니다.

전략적 위험

  1. 빈번한 가짜 브레이크 신호가 발생할 수 있는 주간 시장의 흔들림
  2. 더 큰 스톱 로즈 배수는 너무 큰 일회성 손실을 초래할 수 있습니다.
  3. 역사적인 가격 데이터에 의존하여 빠르게 변화하는 시장 환경에서 지연될 수 있습니다.
  4. 근본적인 요소의 영향을 고려하지 않고
  5. 유동성이 낮은 시장에서 효율적으로 실행하기 어려울 수 있습니다.

전략 최적화 방향

  1. 이동 평균 또는 ADX 지표와 같은 트렌드 필터를 도입합니다.
  2. 더 많은 시장 환경 판단 조건을 추가합니다.
  3. 유동적 제약을 도입하는 것을 고려할 수 있는 최적화된 손해 방지 전략
  4. 거래량 관리 모듈에 추가
  5. 더 많은 시간주기 연동 분석을 추가하는 것을 고려하십시오.
  6. 변동률 지표를 도입하여 간격 판단을 최적화

요약하다

이것은 구조적이고, 논리적으로 명확한 다중 시간 주기의 거래 전략이다. 위험 관리와 필터링 메커니즘을 통합하면서 더 높은 시간 주기의 가격 행동을 분석하여 잠재적인 트렌딩 기회를 찾는다. 전략의 핵심 장점은 다양한 시장 환경에 적응할 수 있는 간단한 매개 변수 조정으로 적응할 수 있는 적응성과 확장성이다.

전략 소스 코드
/*backtest
start: 2025-01-18 00:00:00
end: 2025-02-17 00:00:00
period: 6h
basePeriod: 6h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Candle Range Theory Strategy", overlay=true)

// Input parameters
var string HTF = input.timeframe("240", "Higher Timeframe (Minutes)")  // 4H default
var float stopLossMultiplier = input.float(1.5, "Stop Loss Multiplier", minval=0.5)
var bool useVolFilter = input.bool(false, "Use Volume Filter")
var float volThreshold = input.float(1.5, "Volume Threshold Multiplier", minval=1.0)

// Function to get higher timeframe data
getHtfData(src) =>
    request.security(syminfo.tickerid, HTF, src)

// Calculate volume condition once per bar
var bool volCondition = true
if useVolFilter
    float vol = getHtfData(volume)
    float avgVol = ta.sma(vol, 20)
    volCondition := vol > avgVol * volThreshold

// Get HTF candle data
htf_open = getHtfData(open)
htf_high = getHtfData(high)
htf_low = getHtfData(low)
htf_close = getHtfData(close)

// Store previous candle data
var float h1 = na  // High of Candle 1
var float l1 = na  // Low of Candle 1
var float h2 = na  // High of Candle 2
var float l2 = na  // Low of Candle 2
var float prevClose = na

// Track setup conditions
var string setupType = na
var float triggerLevel = na
var float targetLevel = na
var float stopLevel = na

// Update candle data - fixed time function usage
var bool isNewBar = false
isNewBar := ta.change(request.security(syminfo.tickerid, HTF, time)) != 0

if isNewBar
    h1 := h2
    l1 := l2
    h2 := htf_high[1]
    l2 := htf_low[1]
    prevClose := htf_close[1]

    // Identify setup conditions
    if not na(h1) and not na(h2) and not na(prevClose)
        if (h2 > h1 and prevClose < h1)  // Short setup
            setupType := "short"
            triggerLevel := l2
            targetLevel := l1
            stopLevel := h2 + (h2 - l1) * stopLossMultiplier
        else if (l2 < l1 and prevClose > l1)  // Long setup
            setupType := "long"
            triggerLevel := h2
            targetLevel := h1
            stopLevel := l2 - (h1 - l2) * stopLossMultiplier
        else
            setupType := na
            triggerLevel := na
            targetLevel := na
            stopLevel := na

// Entry conditions using pre-calculated volume condition - fixed line breaks
bool longCondition = setupType == "long" and high > triggerLevel and not na(triggerLevel) and volCondition
bool shortCondition = setupType == "short" and low < triggerLevel and not na(triggerLevel) and volCondition

// Execute trades
if longCondition
    strategy.entry("Long", strategy.long, comment="Long Entry")
    strategy.exit("Long Exit", "Long", limit=targetLevel, stop=stopLevel)

if shortCondition
    strategy.entry("Short", strategy.short, comment="Short Entry")
    strategy.exit("Short Exit", "Short", limit=targetLevel, stop=stopLevel)

// Plot signals - fixed plotshape parameters
plotshape(series=longCondition, title="Long Signal", location=location.belowbar, color=color.green, style=shape.triangleup)
plotshape(series=shortCondition, title="Short Signal", location=location.abovebar, color=color.red, style=shape.triangledown)

plot(triggerLevel, "Trigger Level", color=color.yellow, style=plot.style_circles)
plot(targetLevel, "Target Level", color=color.blue, style=plot.style_circles)
plot(stopLevel, "Stop Level", color=color.red, style=plot.style_circles)