80% 규칙에 기반한 선물 가치 영역 반전 전략

ETH VOL POC VAH VAL TPO
생성 날짜: 2025-07-17 15:50:07 마지막으로 수정됨: 2025-07-17 15:50:07
복사: 0 클릭수: 226
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

80% 규칙에 기반한 선물 가치 영역 반전 전략 80% 규칙에 기반한 선물 가치 영역 반전 전략

개요

80%의 법칙에 기반한 선물 가치 지역 반전 전략은 고전적인 80%의 법칙의 설정을 검증하기 위해 특별히 설계된 정량 거래 시스템이다. 이 전략의 핵심은 가격의 이전 거래일 가치 지역 ((Value Area) 으로 다시 들어간 후의 반전 기회를 잡는 것이다. 이 전략은 정해진 ETH 선물 거래 시간 동안 작동하며, 가격이 전날 가치 지역으로 다시 들어갔을 때, 그 지역에서 충분한 시간을 유지한 후, 시스템은 거래 신호를 유발하며, 주요 목표는 가격 제어 포인트 ((Point of Control, POC) 이며, 또한 전체 가치 지역 경로를 추적하여 연구 분석을 수행한다.

전략 원칙

이 전략은 시장 추세 평균 회귀의 원칙에 기초하고 있으며, 특히 가격과 가치 영역 사이의 관계에 주목한다. 전략의 핵심 논리는 다음과 같다:

  1. 거래 시간 정의: 전략은 실제 22시간 ETH 선물 창 ((태평양 시간 오후 5시부터 다음 날 오후 3시까지) 에 고정되어 있으며, 글로벌 시간대 설정을 지원한다. 이것은 전략이 올바른 시장 환경에서 작동하는 것을 보장한다.

  2. 가치 영역 계산시스템 자동으로 가치 지역 최고점 (VAH), 가치 지역 최저점 (VAL) 및 가격 통제 점 (POC) 을 계산합니다.

    • 가치 영역 범위는 하루의 하위점 차이의 68% (표준 차이의 범위) 로 정의됩니다.
    • VAH와 VAL은 높은 낮은 점과 가치 영역 범위를 통해 계산됩니다.
    • POC는 ((최고 가격+최저 가격+폐쇄 가격) / 3로 계산됩니다.
  3. 신호 확인 메커니즘: 가격이 가치 영역으로 다시 들어가야 하며 최소 45분 동안 그 영역에 머물러야 한다 (<15분 차트의 3개의 K선) 입시 신호를 확인하기 위해. 이 요구는 가격 반전의 의지의 진실성을 보장한다.

  4. 유효일 필링:

    • 유효한 수일: VAL보다 낮게 마감
    • 유효 상장일: VAH보다 상장
  5. 트리거 조건:

    • 다단 신호: 유효한 수일 동안, 가격은 아래에서 가치 영역으로 다시 들어가며, 영역 내에서 3개의 K선으로 유지하며, VAL을 재검토합니다.
    • 공백 신호: 유효한 공백 날에, 가격은 상단에서 가치 영역으로 다시 들어가며, 영역 내에서 3 K 라인을 유지하며, VAH를 다시 측정합니다.
  6. 탈퇴 전략“가격이 POC에 도달하면 퇴출하는 것이 주 목표이며, 이는 평균값 회귀의 핵심 아이디어에 부합합니다”.

전략적 이점

  1. 기본 통계이 전략은 가치 영역과 80% 법칙에 기초하고 있으며, 둘 다 견고한 통계학적 기초를 가지고 있다. 가치 영역은 68%의 가격 활동이 일어나는 영역을 대표하며, 정형 분포의 표준 차이는 비슷하다.

  2. 정확한 거래 창 정의이 전략은 단순한 일일 간격이 아닌 실제 22시간 ETH 선물 창을 사용하여 시장 구조를 더 정확하게 반영합니다.

  3. 유연한 시간대 지원: 전 세계 거래자는 자신의 지리적 위치에 따라 전략을 조정할 수 있습니다. 따라서 시스템은 모든 시간대에 정상적으로 작동할 수 있습니다.

  4. 엄격한 신호 확인: 값이 값 영역 내에서 최소 3개의 K선을 유지하도록 요구하여 신호를 확인하는 것이 가짜 신호의 가능성을 크게 줄여줍니다.

  5. 정확한 목표 설정: POC를 주요 목표로 사용하는 것은 명확한 우위를 제공하며, 선물 시장에서 흔히 볼 수 있는 평균값 회귀 특성에 부합한다.

  6. 이중 인증 메커니즘: 값이 가치 영역으로 다시 들어가도록 요구할 뿐만 아니라, 경계선 ((VAL 또는 VAH) 을 재측정하도록 요구합니다. 이것은 신호의 신뢰성을 증가시킵니다.

  7. 수동 커버 모드: 자동 논리가 특별한 시장 조건에 대응하기에는 충분하지 않을 때, 전략은 거래자가 수동으로 설정된 가치 지역 수준을 사용할 수 있도록 허용한다.

  8. 디부팅 기능: 전략 개발과 앞으로의 테스트에 도움이 되는 상세한 진단 태그를 제공합니다.

전략적 위험

  1. 평균값의 회귀는 실패의 위험80%의 법칙이 많은 경우에도 효과가 있지만, 시장에서 강력한 추세가 나타나서 가격이 POC로 돌아가지 못하게 할 수 있습니다. 이러한 위험을 줄이기 위해 추세 필터를 추가하거나 스톱포드를 설정하는 것이 고려 될 수 있습니다.

  2. 매개변수 민감도: 3 K 라인 ((45 분) 의 확인 요구 사항은 핵심 파라미터이다. 너무 짧으면 조기 입시를 초래할 수 있고, 너무 길으면 기회를 놓칠 수 있다. 다른 시장 조건에서 다른 확인 시간 설정을 테스트하는 것이 좋습니다.

  3. 시장환경의존성: 이 전략은 간격의 흔들림 시장에서 가장 잘 작동하지만 강한 추세 또는 높은 변동 환경에서는 좋지 않을 수 있습니다. 시장 환경 필터를 추가하는 것이 고려되어야합니다.

  4. 위험 선택의 시간: 전략의 성능은 선택된 거래 시간 (뉴욕, 런던, 도쿄 또는 온천) 에 영향을 받을 수 있습니다. 다른 거래 시간대의 역사적 성과를 분석하여 최적의 시간을 선택하는 것이 좋습니다.

  5. 가치 영역 계산 방법의 한계: 고정된 68% 범위와 간소화된 POC 계산을 사용하면 일부 시장의 실제 가치 분포를 정확하게 반영하지 못할 수 있습니다. 거래량에 기반한 가치 지역 계산 방법을 사용하는 것이 더 정확 할 수 있습니다.

  6. 손해 방지 장치의 부재: 현재 전략에는 명확한 스톱드 메커니즘이 없으며, 극단적인 시장 흐름에 따라 심각한 손실을 초래할 수 있습니다. ATR 또는 고정 비율에 기반한 스톱드 설정을 시행하는 것이 좋습니다.

전략 최적화 방향

  1. 동적 확인 조건: 현재 전략은 고정된 3 K 라인을 확증 조건으로 사용하며, 시장의 변동성에 따라 조정할 수 있는 이 파라미터를 고려할 수 있다. 높은 변동성 기간에는 더 긴 확증 시간이 필요할 수 있고, 낮은 변동성 기간에는 단축될 수 있다.

  2. 거래량에 기반한 가치 지역: 현재 가치 영역 계산은 가격을 기반으로 한 간소화 방법이다. 거래량에 기반한 TPO ((Time Price Opportunity) 분석이나 거래량 분포 ((Volume Profile) 로 업그레이드할 수 있으며, 이는 시장 참가자들의 합의된 가치 영역을 더 정확하게 반영할 것이다.

  3. 다중 시간 프레임 확인더 큰 시간 프레임의 트렌드 방향과 결합하여 역동 신호를 필터링 할 수 있으며, 거래의 80%의 규칙 신호만이 전략의 성공률을 높일 수 있습니다.

  4. 자율적 목표 설정: 현재 전략은 POC를 목표로 고정한다. 시장의 변동성에 따라 동적 목표를 설정하는 것을 고려할 수 있다. 예를 들어, 높은 변동성 시장에서 더 먼 목표를 설정하는 것을 고려할 수 있다.

  5. 변동율 필터: ATR 또는 다른 변동성 지표를 필터 조건으로 추가하여 극저 변동성 또는 극고 변동성 시장 환경에서 거래하는 것을 피하십시오.

  6. 최적화 시점 설정: 다른 시간대와 거래 시간대에 대한 전략적 성과를 깊이 분석하여 최적의 거래 시간 조합을 찾습니다.

  7. 지능형 손해 방지 장치: 지능적인 스톱 로직을 구현합니다. 예를 들어, 지지/저항 지점에 기반한 스톱 또는 가격 변동에 기반한 추적 스톱을 통해 위험을 더 잘 관리합니다.

  8. 신호 강도 평가: 신호 품질 점수 시스템을 개발하여 가격 재입입의 강도, 확인된 K선 특성과 다른 시장 요소를 결합하여 각 신호에 강도 점수를 부여하여 포지션 크기를 결정합니다.

요약하다

80%의 법칙에 기반한 선물 가치 지역 반전 전략은 가격의 가치 지역으로 돌아가는 반전 기회를 잡기 위해 고도로 설계된 정량 거래 시스템입니다. 엄격한 신호 확인 메커니즘, 정밀한 시간 분기 정의 및 명확한 목표 설정으로 거래자에게 고전적인 80%의 거래 규칙을 적용하는 체계화된 방법을 제공합니다.

전략의 주요 장점은 통계학적 기초, 엄격한 신호 확인 요구 사항 및 유연한 구성 옵션에 있다. 그러나, 또한 평균값 회귀 실패, 변수 민감성 및 시장 환경 의존과 같은 위험이 존재한다. 동적 확인 조건, 거래량에 기반한 가치 지역 계산, 다중 시간 프레임 확인 및 적응 목표 설정과 같은 최적화 조치를 시행함으로써 전략의 안정성과 적응성이 크게 향상 될 수 있다.

80%의 법칙에 기반한 이 시스템은 미래에셋 시장에서 적용되는 평균 회귀 전략을 추구하는 거래자들에게 개인적인 위험 선호와 시장 관점에 따라 더 커스터마이징하고 최적화할 수 있는 견고한 출발점을 제공합니다.

전략 소스 코드
/*backtest
start: 2025-07-09 00:00:00
end: 2025-07-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_OKX","currency":"SOL_USDT","balance":200000}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dscottmuller

// === Update July 15, 2025 ===
// • Converted to strategy for backtesting
// • POC-based exits for precision targeting
// • Full move markers for research tracking
// • Global time zone input (default: America/Los_Angeles)

//@version=5
strategy("80% Rule Backtest", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === General Inputs ===
useAllMarkets    = input.bool(false, "Use 24-Hour Session (All Markets)")
sessionChoice    = input.string("New York", "Market Session", options=["New York", "London", "Tokyo"])
showSessionBox   = input.bool(false, "Highlight Selected Session")
enableSounds     = input.bool(false, "Enable Audible Alerts")
extendLines      = input.bool(true,  "Extend Lines Right")

// === Advanced Session Settings ===
group = "Advanced Session Settings"
showAutoLevels   = input.bool(true, "Show Auto-Calculated VAH/POC/VAL", group=group)
useManualLevels  = input.bool(false, "Use Manual VAH/POC/VAL", group=group)
manualVAH        = input.float(0.0, "Manual VAH", group=group)
manualVAL        = input.float(0.0, "Manual VAL", group=group)
manualPOC        = input.float(0.0, "Manual POC", group=group)
debugMode        = input.bool(false, "Enable Debug Mode", group=group)

// === Time Zone Selection ===
sessionTZ = input.string("America/Los_Angeles", "ETH Session Timezone",
 options=[
     "America/Los_Angeles",  // Default: Pacific Time
     "America/New_York", 
     "America/Chicago", 
     "America/Denver", 
     "Europe/London", 
     "Europe/Paris", 
     "Asia/Tokyo", 
     "Australia/Sydney"
 ], group=group)

// === Market Session Filter ===
nySession     = time(timeframe.period, "0930-1600", "America/New_York")
londonSession = time(timeframe.period, "0800-1630", "Europe/London")
tokyoSession  = time(timeframe.period, "0900-1500", "Asia/Tokyo")
allSession    = time(timeframe.period, "0000-0000")
inSession = useAllMarkets ? not na(allSession) : sessionChoice == "New York" ? not na(nySession) : sessionChoice == "London"   ? not na(londonSession) : sessionChoice == "Tokyo"    ? not na(tokyoSession) : false
bgcolor(showSessionBox and inSession ? color.new(color.blue, 90) : na)

// === ETH Session Window (22-Hour Futures) ===
ethStart = timestamp(sessionTZ, year, month, dayofmonth - 1, 17, 00)
ethEnd   = timestamp(sessionTZ, year, month, dayofmonth,     15, 00)
inEthWindow = time("30") >= ethStart and time("30") <= ethEnd

ethHigh  = inEthWindow ? high : na
ethLow   = inEthWindow ? low  : na
ethClose = inEthWindow ? close : na

extHigh  = ta.highest(ethHigh, 100)
extLow   = ta.lowest(ethLow, 100)
extClose = ta.valuewhen(not na(ethClose), ethClose, 0)

// === Value Area Calculations ===
vaRange = (extHigh - extLow) * 0.68
vah = extHigh - ((extHigh - extLow - vaRange) / 2)
val = extLow  + ((extHigh - extLow - vaRange) / 2)
poc = (extHigh + extLow + extClose) / 3

finalVAH = useManualLevels ? manualVAH : vah
finalVAL = useManualLevels ? manualVAL : val
finalPOC = useManualLevels ? manualPOC : poc

// === Signal Logic ===
validLongDay  = extClose < finalVAL
validShortDay = extClose > finalVAH

insideVA = close > finalVAL and close < finalVAH
reenteredFromBelow = validLongDay and close > finalVAL
reenteredFromAbove = validShortDay and close < finalVAH

var int barsInside = 0
barsInside := ta.change(time("D")) ? 0 : insideVA ? barsInside + 1 : 0
insideConfirmed = barsInside >= 3

retestVAL = validLongDay and low <= finalVAL
retestVAH = validShortDay and high >= finalVAH

longSignal  = inSession and validLongDay and reenteredFromBelow and insideConfirmed and retestVAL
shortSignal = inSession and validShortDay and reenteredFromAbove and insideConfirmed and retestVAH

longBar  = longSignal and not longSignal[1]
shortBar = shortSignal and not shortSignal[1]

// === Strategy Entries ===
if longBar
    strategy.entry("Long", strategy.long, comment="80% Long Signal")

if shortBar
    strategy.entry("Short", strategy.short, comment="80% Short Signal")

// === Strategy Exits at POC ===
strategy.exit("Long to POC",  from_entry="Long",  limit=finalPOC)
strategy.exit("Short to POC", from_entry="Short", limit=finalPOC)

// === Track Full Move (Visual Only) ===
longFullHit  = longBar and high >= finalVAH
shortFullHit = shortBar and low  <= finalVAL

plotshape(longFullHit,  title="Full Move Long",  location=location.abovebar, color=color.green, style=shape.triangleup, text="FULL")
plotshape(shortFullHit, title="Full Move Short", location=location.belowbar, color=color.red,   style=shape.triangledown, text="FULL")

// === Debug Diagnostics ===
if debugMode and (longBar or shortBar)
    debugText = (useManualLevels ? "Manual Mode" : "Auto Mode") +  " | TZ: " + sessionTZ +  " | 80% Triggered | barsInside: " + str.tostring(barsInside)

    label.new(bar_index, close, debugText, xloc.bar_index, longBar ? yloc.belowbar : yloc.abovebar, style=label.style_label_left, textcolor=color.white, size=size.small, color=color.new(color.gray, 70))