
거래량 필터링 기반의 공급 수요 구간 주문 블록 돌파 전략은 기술 분석의 분화 이론, 거래량 확인 및 주문 블록 개념을 결합한 양적 거래 전략이다. 이 전략은 역사적 가격의 중요한 분화 지점을 식별하고, 합성 거래량 필터링 메커니즘과 결합하여 잠재적인 공급 수요 구간을 결정하고, 가격이 이러한 중요한 구간을 돌파 할 때 거래 신호를 실행한다. 전략의 핵심은 시장의 주문 블록 효과를 이용하는 것입니다.
이 전략의 핵심 원리는 분화 이론과 주문 블록 개념에 기반한다. 첫째, 전략은 지정된 주기 내의 가격 분화점을 계산하여 잠재적인 공급 수요 범위를 식별한다. 상부 분화점은 지정된 주기 내의 최고점의 가격 수준으로 정의되고, 하부 분화점은 지정된 주기 내의 최저점의 가격 수준으로 정의된다. 신호 품질을 향상시키기 위해 전략은 거래량 필터링 메커니즘을 도입하여 분화점의 거래량이 20시즌의 SMP 거래량의 지정된 배수를 초과해야 한다고 요구한다.
유효한 상위 분기점을 식별할 때, 전략은 그 지점을 저항 영역으로 표시하고, 가격이 위쪽으로 돌파될 때까지 기다린다. 가격이 상위 분기점을 돌파할 때, 전략은 공급 수요 관계가 변화했다고 판단하고, 원래의 저항 영역을 지원 영역으로 변환하고, 이 때 여러 작업을 수행한다. 반대로, 유효한 하위 분기점을 식별할 때, 전략은 그 지점을 지원 영역으로 표시하고, 가격이 하향으로 돌파될 때, 원래의 지원 영역을 저항 영역으로 변환하고, 빈 작업을 수행한다.
정책은 사용자가 두 가지의 돌파구 확인 방법을 선택할 수 있습니다: 램프芯加实体突破 및 순实体突破. 램프芯加实体突破 모드는 최고 가격과 최저 가격을 돌파구 확인 기준으로 사용하며, 순实体突破 모드는 매수 가격을 확인 기준으로 사용한다. 거래량 필터링 메커니즘은 현재 거래량과 역사 평균 거래량의 배수 관계를 비교하여 돌파구의 유효성을 검증한다.
이 전략에는 여러 가지 중요한 장점이 있습니다. 첫째, 거래량 필터링 메커니즘은 신호의 신뢰성을 크게 향상시킵니다. 전통적인 분형 돌파 전략은 가짜 돌파 신호를 발생시키는데, 거래량 확인을 통해 거래량이 부족한 약한 돌파구를 효과적으로 필터링하여 충분한 시장 참여가 있을 때만 거래 신호를 발생시키는 것을 보장합니다.
둘째, 전략은 주문 블록 이론에 기초하고 있으며, 시장의 논리적 기반이 있습니다. 주문 블록은 특정 가격에서 대규모 자본의 집중된 구매와 판매를 나타냅니다. 이러한 지역은 종종 중요한 지원 및 저항 수준을 형성합니다. 가격이 이러한 중요한 지역을 돌파 할 때, 일반적으로 시장 구조에 중요한 변화가 발생하여 거래자에게 높은 확률의 진입 기회를 제공합니다.
셋째, 전략은 잘 적응하고 구성할 수 있습니다. 사용자는 다른 시장 환경과 개인 취향에 따라 분화주기, 거래량 배수와 같은 파라미터를 조정할 수 있습니다.
마지막으로, 전략의 논리는 명확하고 간결하며, 이해하기 쉽고 구현된다. 명확한 분화 식별, 거래량 필터링 및 돌파구 확인 과정을 통해 전략은 복잡한 기술 지표 조합을 피하고 과도한 최적화의 위험을 줄인다.
이 전략은 많은 장점이 있지만, 몇 가지 잠재적인 위험도 주의해야 한다. 첫째, 전략은 거래량 데이터에 대한 의존도가 높다. 거래량 데이터가 정확하지 않거나 시장 유동성이 떨어지면 거래량 필터링 메커니즘은 잘못된 판단을 일으킬 수 있으며, 유효한 거래 기회를 놓치고 거짓 신호를 생성한다.
둘째, 전략의 지연성이 문제가 있다. 전략의 진입 시기는 분화점의 확인과 돌파구의 발생을 기다리기 때문에 최적의 진입 지점에서 뒤쳐질 수 있다. 이러한 지연성은 빠르게 변화하는 시장 환경에서 전략의 수익성에 영향을 미칠 수 있다.
세 번째, 전략은 명확한 중단 및 중지 메커니즘이 없습니다. 전략은 진입 시기를 식별 할 수 있지만, 그에 따른 위험 관리 조치를 제공하지 않습니다. 시장의 급격한 변동이나 돌파구 실패로 인해 거래자는 손실의 큰 위험에 직면 할 수 있습니다.
이러한 위험을 줄이기 위해, 거래자는 다른 기술 분석 도구와 함께 신호 확인을 수행하고, 합리적인 스톱 스톱 레벨을 설정하고, 시장 조건에 따라 전략 매개 변수를 동적으로 조정하는 것이 좋습니다. 동시에, 다양한 시장 환경에서 전략에 대한 충분한 피드백과 검증이 권장됩니다.
이 전략에는 여러 가지 최적화 방향이 있다. 첫째, 동적 거래량 저하 메커니즘을 도입할 수 있다. 현재 전략은 고정 거래량 배수를 필터링 조건으로 사용하지만 시장의 거래량 특성은 시간이 지남에 따라 변한다. 적응형 거래량 저하를 도입함으로써 시장의 실제 상황에 따라 필터링 기준을 동적으로 조정하여 전략의 적응성을 향상시킬 수 있다.
둘째, 완벽한 리스크 관리 모듈을 추가하는 것이 좋습니다. 변동률, 지지 저항 수준 또는 고정 비율에 따라 스톱 스톱 레벨을 설정할 수 있습니다. 또한, 신호 강도 및 시장 변동성에 따라 거래 규모를 조정하는 포지션 관리 메커니즘을 도입하는 것을 고려할 수 있습니다.
셋째, 여러 시간 프레임 분석을 도입하는 것을 고려할 수 있습니다. 현재 전략은 단일 시간 프레임에서만 작동하며, 더 높은 시간 프레임의 트렌드 분석과 결합하여 전략의 성공률을 높일 수 있습니다. 예를 들어, 더 높은 시간 프레임의 트렌드 방향이 일치하는 경우에만 거래 신호를 실행하십시오.
넷째, 분모 식별 알고리즘을 최적화할 수 있다. 현재 분모 식별은 비교적 간단하며, 가격 행동 패턴에 기반한 분모 식별이나 다른 기술 지표와 결합된 복합 분모 식별과 같은 더 복잡한 분모 식별 방법을 도입하는 것을 고려할 수 있다.
마지막으로, 신호 필터링 메커니즘을 추가하는 것이 좋습니다. 추가 기술 지표 (RSI, MACD 등) 를 도입하여 거래 신호를 필터링하거나 시장 감정 지표에 따라 전략의 민감성을 조정 할 수 있습니다.
거래량 필터링에 기반한 공급 수요 구역 주문 블록 돌파 전략은 분화 이론, 거래량 분석 및 주문 블록 개념을 결합한 종합적인 양적 거래 전략이다. 이 전략은 중요한 가격 분화 지점을 식별하여 거래량 확인 메커니즘을 결합하여 가격 돌파 중요한 공급 수요 구역 때 거래 작업을 수행한다.
전략의 주요 장점은 탄탄한 이론적 기초, 좋은 신호 품질 및 높은 구성성이다. 거래량 필터링 메커니즘은 신호의 신뢰성을 효과적으로 향상시키고, 주문 블록 이론은 전략에 명확한 시장 논리적 지원을 제공합니다. 그러나, 전략에는 거래량 데이터에 대한 의존성, 신호 낙후성 및 위험 관리 장치의 부족과 같은 몇 가지 잠재적인 위험이 있습니다.
동적 거래량 하락, 리스크 관리 모듈, 다중 시간 프레임 분석 및 신호 필터링 메커니즘과 같은 최적화 조치를 도입함으로써 이 전략의 성능과 안정성은 더욱 향상 될 수 있습니다.
/*backtest
start: 2024-07-07 00:00:00
end: 2025-07-05 10:18:00
period: 3m
basePeriod: 3m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Supply and Demand - Order Block Strategy with Volume Filter", overlay=true)
// ═══════════════════════════════════════════════════════════════════════════════════
// 📊 INPUT SETTINGS
// ═══════════════════════════════════════════════════════════════════════════════════
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=5, minval=3, tooltip="Number of periods for fractal lookback")
// 🔊 Volume Filter
enableVolumeFilter = input.bool(true, "Enable Volume Filter", group="Volume Filter")
volumeMultiplier = input.float(1.5, "Volume Multiplier", minval=1.0, maxval=3.0, step=0.1, group="Volume Filter", tooltip="Fractal must have volume > average volume * this multiplier")
// ═══════════════════════════════════════════════════════════════════════════════════
// 📈 TECHNICAL INDICATORS
// ═══════════════════════════════════════════════════════════════════════════════════
avgVolume = ta.sma(volume, 20)
// ═══════════════════════════════════════════════════════════════════════════════════
// 📦 FRACTAL CALCULATION WITH VOLUME FILTER
// ═══════════════════════════════════════════════════════════════════════════════════
// Original fractal calculation
upFractal = high[n] == ta.highest(high, n)
downFractal = low[n] == ta.lowest(low, n)
// 🔊 Enhanced fractal with volume confirmation
upFractalValid = upFractal and (not enableVolumeFilter or volume[n] > avgVolume * volumeMultiplier)
downFractalValid = downFractal and (not enableVolumeFilter or volume[n] > avgVolume * volumeMultiplier)
var float topValue = na
var float bottomValue = na
var topBreakBlock = false
var bottomBreakBlock = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close
// New up fractal - only if volume criteria met
if upFractalValid
topBreakBlock := false
topValue := high[n]
// New down fractal - only if volume criteria met
if downFractalValid
bottomBreakBlock := false
bottomValue := low[n]
// ═══════════════════════════════════════════════════════════════════════════════════
// 🚀 ENTRY LOGIC
// ═══════════════════════════════════════════════════════════════════════════════════
// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
topBreakBlock := true
if strategy.position_size <= 0
strategy.entry("Long", strategy.long)
// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
bottomBreakBlock := true
if strategy.position_size >= 0
strategy.entry("Short", strategy.short)
// ═══════════════════════════════════════════════════════════════════════════════════
// 🎨 PLOTS
// ═══════════════════════════════════════════════════════════════════════════════════
plotshape(downFractalValid, style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractalValid, style=shape.triangledown, location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)