거래 세션을 기반으로 한 범위 돌파 모멘텀 전략 및 동적 위험 관리

Moving Average EMA SMA Range Breakout Session Trading Risk-Reward Ratio BREAK-EVEN
생성 날짜: 2025-05-26 13:03:40 마지막으로 수정됨: 2025-05-26 13:03:40
복사: 2 클릭수: 232
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

거래 세션을 기반으로 한 범위 돌파 모멘텀 전략 및 동적 위험 관리 거래 세션을 기반으로 한 범위 돌파 모멘텀 전략 및 동적 위험 관리

개요

이 전략은 특정 거래 시간대에 기반한 범위를 돌파하는 전략으로, 시장이 정의된 거래 시간대에 형성된 가격 범위를 주로 돌파합니다. 이 전략은 시간 분석, 동력 돌파, 이동 평균 필터링 및 정교한 위험 관리 시스템을 결합하여, 시장이 낮은 변동성 상태에서 높은 변동성 상태로 전환하는 과정에서 거래 기회를 잡기 위해 고안되었습니다. 이 전략은 특히 예정된 거래 시간대 (예: 아시아, 유럽 또는 미국 상장) 내에서 구축된 가격 고도 및 낮은 가격에 초점을 맞추고, 가격이 이러한 중요한 수준을 돌파 할 때 시장에 진입합니다.

전략 원칙

전략의 핵심 원칙은 시장이 특정 시간 동안 구축한 지지 및 저항 지점을 뚫는 데 기반합니다. 구체적인 실행 논리는 다음과 같습니다:

  1. 시간대 정의와 구간 형성전략: 사용자가 특정 거래 시간을 정의 할 수 있습니다. UAE 시간 (GMT + 4) 에 따라, 시스템은 거래 구역을 형성하는 가격의 최고점과 최저점을 지속적으로 추적하고 업데이트합니다.

  2. 브레이크 조건 식별

    • 다단 조건: 가격 종료 시점의 최고점보다 높습니다.
    • 공백 조건: 가격 마감은 기간 최저점보다 낮다
  3. 이동 평균 필터: 정책은 지수 이동 평균 ((EMA) 또는 간단한 이동 평균 ((SMA) 이 될 수 있는 선택 가능한 이동 평균 필터링 메커니즘을 제공합니다. 활성화되면, 시스템은 다음과 같이 요구합니다:

    • 다중 거래: 가격이 이동 평균 위에 있어야 합니다.
    • 허공 거래: 가격이 이동 평균 아래로 있어야 합니다. 이 필터는 거래의 방향과 전체적인 추세와 일치하는 것을 보장하기 위한 것입니다.
  4. 위험 관리 설정

    • 두 가지 옵션이 있습니다.
      • 높고 낮은 지점에 기반: 다중 거래의 중지 손실은 시간대의 낮은 지점에, 공백 거래의 중지 손실은 시간대의 높은 지점에 설정
      • 중간 범위에 기반: 시간대 가격 범위에 중점을 둔 스톱로스
    • 정지금액은 점차 요소를 고려하여 추가로 조정됩니다.
    • 스톱 (TP) 는 미리 설정된 리스크-타임-비율을 기반으로 계산된다.
    • 이익과 손실의 균형을 이루는 기능을 구현하여 거래가 특정 위험 수익 수준을 달성하면 스톱 손실을 이동합니다.
  5. 거래 관리

    • 하루 최대 거래 수 제한
    • 모든 세션의 시작에 카운터와 간격값을 재설정합니다.
    • 세션 종료 후, 세션 추적을 종료합니다.

이 전략은 시장이 낮은 변동 시간에 에너지를 축적하고, 결정적인 가격 수준을 돌파할 때 풀어주는 것을 원칙으로 한다. 확인적인 종결 가격 돌파구를 기다리는 것으로, 전략은 가짜 돌파구의 위험을 줄이려고 하며, 선택적인 이동 평균 필터는 신호의 신뢰성을 더욱 강화한다.

전략적 이점

이 전략의 코드 구현을 분석하면 다음과 같은 몇 가지 주요 장점을 요약할 수 있습니다.

  1. 시장 구조에 기반한 객관적인 진입전략은 주관적 판단이나 고정된 파라미터에 의존하지 않고, 시장 구조의 객관적인 반영으로 시간 동안 형성 된 가격 범위를 사용합니다. 이것은 전략이 다른 시장 조건과 변동성에 적응할 수있게합니다.

  2. 유연한 시간 설정: 사용자는 다른 시장의 특성과 개인 거래 스타일에 따라 거래 시간을 조정할 수 있습니다. 이것은 전략이 여러 시장과 시간대에 적용될 수 있도록 합니다.

  3. 다층 필터링 장치이 전략은 반경과 이동 평균 필터를 결합하여 신호 품질을 크게 향상시키고 가짜 돌파의 가능성을 감소시킵니다. 특히 트렌드 시장에서 이동 평균 필터는 역동 거래를 방지합니다.

  4. 세밀한 위험 관리

    • 실제 시장 변동에 기반한 동적 스톱 로즈 설정
    • 미리 정의된 리스크-이익 비율은 일관된 거래 관리를 보장합니다.
    • 이윤/손실 균형 기능이 손실 거래의 가능성을 감소시킵니다.
    • 거래 제한은 과도한 거래와 위험 축적을 방지합니다.
  5. 매우 적응력이 좋다: 전략 파라미터는 다양한 시기와 시장 및 자산 클래스에 적용할 수 있도록 광범위하게 조정할 수 있습니다. 이동 평균 유형, 기간, 리스크 수익률 및 기타 주요 파라미터는 특정 조건에 맞게 최적화 할 수 있습니다.

  6. 쉽게 모니터링하고 최적화할 수 있습니다.: 코드 구현에는 명확한 시각화 요소 (예: 간격 높고 낮은 점과 이동 평균의 그래픽 표시) 와 경고 조건이 포함되어 있어 모니터링과 후속 최적화를 용이하게 한다.

전략적 위험

이 전략은 여러 장점이 있지만, 몇 가지 위험과 잠재적인 단점이 있습니다.

  1. 가짜 신호를 뚫는 위험: 시장은 종종 허위 돌파가 발생하며, 즉 가격이 단기간에 범위를 돌파한 후 급격히 철회한다. 전략은 종전 가격 확인과 선택 가능한 이동 평균 필터를 통해이 위험을 줄이는 데 도움이되지만, 완전히 제거 할 수는 없습니다.

    • 해결 방법: 거래량 돌파 또는 변동률 필터와 같은 추가 확인 지표를 추가하거나 돌파 후 일정 시간 동안 가격을 유지하도록 요구할 수 있습니다.
  2. 시간적 의존성전략의 효과는 선택된 시기의 특성에 크게 의존한다. 선택된 시기가 일관되게 의미있는 가격 범위를 형성하지 않으면 전략의 성능이 영향을 받을 수 있다.

    • 해결 방법: 다양한 시장과 자산에 대한 상세한 시점 분석을 수행하여 가장 효과적인 거래 구역을 형성 할 수있는 시점을 결정합니다.
  3. 손해배상 설정 위험: 높은 변동성 시장에서, 시간대의 높은 낮은 시점에 기반한 스톱 로즈는 너무 넓어 위험도가 너무 커질 수 있습니다. 낮은 변동성 시장에서, 스톱 로즈는 너무 좁아 불필요하게 트리거 될 수 있습니다.

    • 해결 방법: 변동율에 기반한 동적 중지 손해 조정, 또는 최소/최대 중지 범위 제한을 추가한다.
  4. 고정 리스크 수익률 문제: 고정된 리스크 수익률은 모든 시장 조건에서 최적이 아닐 수 있다. 강한 추세 시장에서 높은 리스크 수익률이 더 적합할 수 있고, 수평 시장에서 낮은 비율이 더 적합할 수 있다.

    • 해결 방법: 시장 조건에 기초한 적응적 리스크 수익률을 달성하는 것을 고려한다.
  5. 시장 적응력이 부족함이 전략은 다른 시장 환경을 구분하는 명확한 메커니즘이 없습니다 (예: 트렌드 시장 vs 가로판 시장) 그리고 침투 전략에 적합하지 않은 시장 조건에서 신호를 생성 할 수 있습니다.

    • 해결 방법: 트렌드 강도 지표나 변동률 분석과 같은 시장 환경 필터를 추가하고, 불리한 조건에서 조정하거나 비활성화 전략을 사용한다.
  6. 거래 빈도 제한매일 거래하는 수를 제한하는 것은 과도한 거래를 방지하지만, 특히 변동성이 높은 날에는 유효한 신호를 놓칠 수 있습니다.

    • 해결 방법: 시장의 변동성이나 이전 거래의 성공률에 따른 적응 제한과 같은 더 지능적인 거래 주파수 제어를 고려하십시오.

전략 최적화 방향

정책 코드의 심층적인 분석을 바탕으로 몇 가지 잠재적인 최적화 방향이 있습니다.

  1. 자율 시간 설정

    • 현재 전략은 고정된 시기의 시작과 끝 시간을 사용한다. 가치있는 개선은 적응 시기의 식별을 구현하여, 역사적인 변동 패턴에 따라 최적의 시기의 설정을 자동으로 결정하는 것이다.
    • 이러한 최적화는 전략이 다른 시장의 계절적 패턴과 변화하는 변동성 특성에 적응할 수 있게 해준다.
  2. 개선의 획기적인 확인

    • 거래량 확인 요구사항을 늘리고, 거래량이 크게 증가하는 것을 보장합니다.
    • 최근 변동률 조정에 따라 필요한 파격의 크기를 바탕으로 동적 파격 경계를 달성합니다.
    • 가격 동작 확인을 추가합니다. 파격 이후 특정 모양이 요구됩니다.
    • 이러한 개선은 가짜 브레이크 트레이드를 크게 줄이고 전반적인 수익성을 향상시킬 수 있습니다.
  3. 동적 위험 관리

    • 시장의 변동성에 따라 조정된 리스크-비율
    • 시장 조건에 기반한 부분 수익 설정과 같은 더 복잡한 꼬리 리스크 관리를 구현
    • 시간 기반의 상쇄 손실을 추가하고 오랜 기간 동안 진행되지 않는 거래에 대해 평형
    • 이러한 최적화는 전략의 리스크 조정 수익률을 크게 향상시킬 수 있습니다.
  4. 시장 환경 필터링

    • 시장 환경 분류 시스템을 구현하고, 트렌드, 범위 및 전환 시장 상태를 구분합니다.
    • 식별된 시장 환경에 따라 정책 매개 변수 조정 또는 완전히 활성화 / 비활성화
    • 변동률에 기반한 필터를 추가하여 비정상적으로 높은 변동률 동안 거래를 조정하거나 중지합니다.
    • 이 최적화는 불리한 조건에서 거래하는 것을 피하는 데 매우 중요하며, 장기적인 성과를 크게 향상시킬 수 있다.
  5. 다중 시간 프레임 분석

    • 더 높은 시간 프레임의 트렌드 정보를 통합하여 거래 방향이 더 큰 트렌드와 일치하도록합니다.
    • 낮은 시간 프레임의 가격 행동을 사용하여 정확한 입시 최적화
    • 이러한 최적화는 입학 정확도와 전체적인 성공률을 높일 수 있습니다.
  6. 기계 학습 강화

    • 기계 학습 알고리즘을 사용하여 최적화 정책 파라미트
    • 성공 가능성이 가장 높은 돌파구 설정을 식별하기 위해 패턴 인식 시스템을 구현합니다.
    • 특정 돌파구가 성공할 확률을 추정하기 위한 예측 모델을 개발하는 것
    • 이러한 첨단 최적화는 기존의 기술 분석을 강화하는 데이터 기반의 통찰력을 활용하여 전략을 새로운 수준으로 끌어올릴 수 있습니다.

요약하다

거래 시기를 기반으로 한 간격 돌파량 전략은 시기를 분석, 가격 돌파, 추세 확인 및 위험 관리의 요소를 결합 한 포괄적 인 거래 시스템입니다. 그것의 핵심 장점은 객관적 시장 구조에 기반한 입구점 식별과 정교한 위험 제어 장치입니다.

이 전략은 특히 거래 시간 특성이 명확한 시장에서 적용됩니다. 예를 들어 외환 시장과 지역 거래 시간 특성이있는 글로벌 지수입니다. 전략은 중요한 가격 수준을 정의하고 확인적 돌파구를 기다리는 것으로 가격의 축적 단계에서 방향적 이동의 전환을 포착하려고합니다.

허위 돌파 위험과 시점 의존성 같은 과제들이 있음에도 불구하고, 이러한 위험들은 제안된 최적화 방향, 즉, 적응된 파라미터 설정, 개선된 돌파 확인 및 동적 위험 관리와 같은 방법으로 효과적으로 관리될 수 있다.

이 전략의 유연성과 사용자 정의성은 다양한 거래 스타일과 시장 조건에 적합합니다. 일일 거래자가 특정 시기의 변동성을 활용하려는 경우와 중요한 입문점을 결정하려는 스윙 거래자의 경우, 이 프레임 워크는 개인 요구에 따라 추가적으로 사용자 정의 및 최적화를 할 수있는 강력한 기반을 제공합니다.

궁극적으로, 전략의 효과는 특정 시장 특성에 대한 정교한 조정과 엄격한 거래 규율에 달려 있습니다. 지속적인 모니터링, 피드백 및 최적화를 통해 거래자는 전략의 성능을 더욱 향상시킬 수 있으며 강력한 거래 도구가 될 수 있습니다.

전략 소스 코드
/*backtest
start: 2025-05-21 00:00:00
end: 2025-05-25 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Session Breakout Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)

// === User Inputs ===
startHour = input.int(2, "Session Start Hour (UAE Time)")
endHour = input.int(4, "Session End Hour (UAE Time)")
useMA = input.bool(true, "Use Moving Average Confluence")
maType = input.string("EMA", "MA Type", options=["EMA", "SMA"])
maLength = input.int(50, "MA Length")
riskReward = input.float(3.0, "Risk-Reward Ratio")
breakEvenRR = input.float(1.0, "Break-even After X RR")
slType = input.string("LowHigh", "SL Type", options=["LowHigh", "MidRange"])
extraPips = input.float(5.0, "Extra Pips for Spread") * syminfo.mintick
maxTrades = input.int(3, "Max Trades per Day")

// === Time Calculations ===
t = time("30", "Etc/GMT-4") // UAE time in GMT+4
tHour = hour(t)
tMin = minute(t)

sessionOpen = (tHour == startHour and tMin == 0)
sessionClose = (tHour == endHour and tMin == 0)

var float sessionHigh = na
var float sessionLow = na
var int tradeCount = 0
var bool inSession = false

if sessionOpen
    sessionHigh := high
    sessionLow := low
    inSession := true
    tradeCount := 0
else if inSession and not sessionClose
    sessionHigh := math.max(sessionHigh, high)
    sessionLow := math.min(sessionLow, low)
else if sessionClose
    inSession := false

// === MA Filter ===
ma = maType == "EMA" ? ta.ema(close, maLength) : ta.sma(close, maLength)

// === Entry Conditions ===
longCondition = close > sessionHigh and (not useMA or close > ma)
shortCondition = close < sessionLow and (not useMA or close < ma)

// === SL and TP ===
rangeMid = (sessionHigh + sessionLow) / 2
sl = slType == "LowHigh" ? (shortCondition ? sessionHigh : sessionLow) : rangeMid
sl := shortCondition ? sl + extraPips : sl - extraPips
entry = close
risk = math.abs(entry - sl)
tp = shortCondition ? entry - risk * riskReward : entry + risk * riskReward
beLevel = shortCondition ? entry - risk * breakEvenRR : entry + risk * breakEvenRR

// === Trade Execution ===
canTrade = tradeCount < maxTrades

if longCondition and canTrade
    strategy.entry("Long", strategy.long)
    strategy.exit("TP/SL", from_entry="Long", limit=tp, stop=sl)
    tradeCount += 1

if shortCondition and canTrade
    strategy.entry("Short", strategy.short)
    strategy.exit("TP/SL", from_entry="Short", limit=tp, stop=sl)
    tradeCount += 1

// === Plotting ===
plot(inSession ? sessionHigh : na, title="Session High", color=color.blue)
plot(inSession ? sessionLow : na, title="Session Low", color=color.orange)
plot(useMA ? ma : na, title="Moving Average", color=color.gray)

// === Alerts ===
alertcondition(longCondition, title="Long Breakout Alert", message="Session breakout long signal")
alertcondition(shortCondition, title="Short Breakout Alert", message="Session breakout short signal")