동적 앵커링 VWAP와 거래량 분포를 결합한 유동성 확보 전략

ATR VWAP RSI POC TP/SL Volume Profile
생성 날짜: 2025-05-15 16:15:45 마지막으로 수정됨: 2025-05-15 16:15:45
복사: 0 클릭수: 429
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

동적 앵커링 VWAP와 거래량 분포를 결합한 유동성 확보 전략 동적 앵커링 VWAP와 거래량 분포를 결합한 유동성 확보 전략

개요

동적으로 고정된 VWAP와 거래량 분포를 결합한 유동성 포착 전략은 가격 이탈 가치 영역과 거래량 이상성을 기반으로 한 양적 거래 방법이다. 이 전략은 주로 일간 재계산된 고정된 거래량 가중 평균 가격 ((VWAP) 과 거래량 분포의 최고 거래량 가격 (POC) 을 주요 기준점으로 사용하고, 상대적으로 강한 약한 지표 ((RSI) 와 거래량 이상성 검출을 결합하여 가격 이탈 가치 영역과 충분한 유동성 지원이 있을 때 거래 기회를 포착한다.

전략 원칙

이 전략의 핵심 원칙은 가격과 가치 절전 지점 (VWAP와 POC) 의 오차를 식별하고, 합성 거래량 및 동적 지표 확인과 결합하여 시장에서의 유동성 기회를 포착하는 것입니다. 구체적으로 구현하는 원칙은 다음과 같습니다:

  1. 동적 고정 VWAP 계산전략: VWAP 계산을 매 거래일 초에 재설정하여 VWAP가 당일 가격 가중치를 반영할 수 있도록 보장합니다. VWAP 값을 축적된 거래량 (cumVol) 과 축적된 가격에 거래량 (cumPV) 을 곱하는 방식으로 동적으로 업데이트합니다.

  2. 성과 분포 분석: 가격대를 여러 계층으로 나누고, 각 가격대의 거래량을 계산하여, 거래량이 가장 많은 가격대 중간 지점을 POC (Point of Control) 으로 찾는다. 이 과정은 각 거래일에 재설정되어, POC가 당일 거래량 분포를 반영하도록 한다.

  3. 신호 생성 논리:

    • 구매 신호: 가격이 VWAP와 POC보다 낮고 거래량이 20일 평균의 3배 이상 (조정 가능한 변수) 이며 RSI가 40보다 낮을 때 발동한다.
    • 팔기 신호: 가격이 VWAP와 POC보다 높고 거래량이 20일 평균의 3배 이상이고 RSI가 60보다 높을 때 발동됩니다.
  4. 위험 관리:ATR ((평균 실제 범위) 를 기반으로 스톱 로드 및 스톱 스탠드 레벨을 동적으로 설정한다. 전략은 기본적으로 1.5배의 ATR을 스톱 로드, 2배의 ATR을 스톱 로드로 사용하며, 리스크 수익률은 1:1.33로 보장한다.

전략적 이점

  1. 다중 인증 메커니즘전략: 두 가지 핵심 가치 지점 (VWAP 및 POC) 에서 가격의 오차, 거래량 이상 및 RSI 확인 삼중 조건 필터링 신호를 통해 가짜 신호의 가능성을 효과적으로 감소시킵니다.

  2. 동적적 시장 적응: 매일 재계산된 VWAP와 거래량 분포는 전략이 다양한 시장 환경에 적응하고 최신 가격과 거래량 상황을 반영할 수 있도록 보장합니다.

  3. 수량-가격 관계에 기반한 분석 프레임워크이 전략은 가격 (VWAP), 거래량 (Volume Profile) 및 동력 (RSI) 분석을 통합하여 가격 관계 분석 프레임워크를 구축합니다.

  4. 자율적 위험 관리ATR 기반의 스톱 로드 설정은 시장의 변동성에 따라 위험 관리가 자동으로 조정될 수 있도록 하며, 다양한 변동 환경에서 일관된 위험 관리를 제공합니다.

  5. 시각 확인 지원: 전략은 VWAP, POC 및 신호 표시의 시각화를 제공하여 거래자가 전략 논리와 신호 생성 과정을 직관적으로 이해할 수 있도록합니다.

  6. 유동성 포착 장점: 거래 조건으로 평균 이상의 거래량을 요구함으로써, 전략은 시장에서 유동적인 사건을 포착하는 데 초점을 맞추고 거래의 실행 효율성과 슬라이드 포인트 통제를 향상시킵니다.

전략적 위험

  1. 일일 데이터에 지나치게 의존하는 것전략: 매일 VWAP 및 거래량 분포를 재설정하여, 일일 간의 연속성이 부족하여, 더 장기적인 시장 구조를 무시합니다. 다중 주기 VWAP 또는 더 장기적인 거래량 분포를 추가 참조로 추가하는 것을 고려해야합니다.

  2. 성량 이상 탐지 민감성전략: 일정한 거래량 배수 (기본 3배) 를 사용하여 예외를 탐지합니다. 다른 시장이나 다른 기간에는 다른 파라미터 설정이 필요할 수 있습니다.

  3. RSI 하락 고정 리스크: RSI가 고정된 4060 값을 사용하는 것은 모든 시장 환경에 적합하지 않을 수 있으며, 특히 트렌드 시장에서 기회를 놓치거나 과도한 신호를 생성 할 수 있습니다. RSI 값을 동적으로 조정하거나 트렌드 식별 메커니즘과 결합하는 것이 고려 될 수 있습니다.

  4. 너무 작은 위험: 높은 변동성이 있는 시장에서 1.5배의 ATR의 중지 손실은 너무 작을 수 있으며, 이로 인해 자주 중지 손실이 발생합니다. 시장 환경이나 변동성 특성의 동력에 따라 중지 손실 배수를 조정하는 것이 고려되어야합니다.

  5. 트렌드 필터 부족: 전략에는 명확한 트렌드 필터링 메커니즘이 없으며, 강한 트렌드 중 역동 신호를 일으킬 수 있습니다. 강한 트렌드 중 역동 거래를 피하기 위해 트렌드 식별 구성 요소를 추가하는 것이 좋습니다.

전략 최적화 방향

  1. 다주기 VWAP 통합: 여러 시간 주기의 VWAP를 도입하여 VWAP 대역을 형성하여 전략의 다차원 분석 능력을 향상시킵니다. 이것은 다른 시간 프레임의 가격 편차를 식별하여 신호의 신뢰성을 향상시킵니다.

  2. 자율적 거래량 절감: 고정된 교류량 배수를 교류량 변동성에 기반한 적응한 임계값으로 대체하여, 예를 들어 교류량 Z 분수 또는 교류량 표준 차차 배수를 사용하여, 실제 교류량 비정상을 더 정확하게 식별한다.

  3. 시장 상태 분류: 시장 상태를 식별하는 모듈을 추가하여 트렌드 시장, 간격 시장 및 고 변동 시장을 구분하고, 다른 시장 상태에 따라 전략 매개 변수 및 신호 생성 논리를 조정합니다.

  4. 시간 필터: 시간 필터 기능을 추가하여 시장 개시와 종결 전의 높은 변동의 시기를 피하거나 특정 효율적인 거래 시기를 집중하십시오.

  5. 성과 분배 강화: 거래량 분포 분석을 최적화하고, 시간 가격 기회를 도입하여 (TPO) 분석을 수행하거나, 더 안정적인 시장 구조 정보를 얻기 위해 다일 축적된 거래량 분포를 고려합니다.

  6. 동적 차단 장치: 시장의 변동성이나 가격 구조에 기반한 동적 스톱 전략을 구현합니다. 예를 들어, 강력한 브레이크 시 트래킹 스톱을 사용하여 수익 잠재력을 극대화합니다.

  7. 기계 학습 강화: 결정 나무 또는 무작위 숲 알고리즘을 사용하여 다중 매개 변수 조합을 최적화하여 전략의 적응성을 향상시키는 기계 학습 알고리즘을 도입하여 매개 변수 선택 및 신호 생성을 최적화하십시오.

요약하다

동적으로 고정된 VWAP와 거래량 분포를 결합한 유동성 캡처 전략은 가격 이탈 가치 영역을 기반으로 거래량 확인을 결합한 양적 거래 시스템이다. VWAP, 거래량 분포 POC, RSI 및 거래량 변동성 검사를 통합함으로써 전략은 가격 이탈 가치 영역을 효과적으로 식별하고 거래량이 많은 거래량 지원 거래 기회를 확보할 수 있다. 전략의 핵심 장점은 다수의 확인 메커니즘과 자율적 위험 관리이지만, 일일 데이터에 지나치게 의존하고 트렌드 교차의 부족 등의 위험도 있다.

전략 소스 코드
/*backtest
start: 2025-04-14 00:00:00
end: 2025-05-14 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Liquidity Sniper + VWAP Profile", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1, max_bars_back=500)

// === Inputs ===
volumeMultiplier = input.float(3.0, title="Volume Multiplier")
atrLength = input.int(14, title="ATR Length")
slMultiplier = input.float(1.5, title="Stop Loss ATR Multiplier")
tpMultiplier = input.float(2.0, title="Take Profit ATR Multiplier")
levels = input.int(24, title="Volume Profile Levels", minval=10, maxval=100)

// === VWAP Calculation ===
var float cumVol = na
var float cumPV = na
isNewDay = ta.change(time("D"))
if isNewDay
    cumVol := volume
    cumPV := hl2 * volume
else
    cumVol += volume
    cumPV += hl2 * volume
vwap = cumPV / cumVol
plot(vwap, color=color.orange, title="Daily VWAP")

// === Volume Profile (Lite) ===
profileHeight = high - low
step = profileHeight / levels
var float[] volumeProfile = array.new_float(levels, 0.0)

if isNewDay
    for i = 0 to levels - 1
        array.set(volumeProfile, i, 0.0)

for i = 0 to levels - 1
    levelLow = low + step * i
    levelHigh = levelLow + step
    if close >= levelLow and close < levelHigh
        vol = array.get(volumeProfile, i)
        array.set(volumeProfile, i, vol + volume)

maxVol = array.max(volumeProfile)
var float POC = na
for i = 0 to levels - 1
    if array.get(volumeProfile, i) == maxVol
        POC := low + step * i + step / 2

plot(POC, title="Volume Profile POC", color=color.blue)

// === Indicators ===
atr = ta.atr(atrLength)
vol = volume
volMA = ta.sma(volume, 20)
rsi = ta.rsi(close, 14)

// === Signal Logic ===
buySignal = close < vwap and close < POC and vol > volMA * volumeMultiplier and rsi < 40
sellSignal = close > vwap and close > POC and vol > volMA * volumeMultiplier and rsi > 60

// === Debug Plots ===
plotshape(buySignal, title="BUY Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="SELL Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// === Entry + Exit ===
if buySignal
    strategy.entry("BUY", strategy.long)
    strategy.exit("TP/SL BUY", from_entry="BUY", stop=close - atr * slMultiplier, limit=close + atr * tpMultiplier)

if sellSignal
    strategy.entry("SELL", strategy.short)
    strategy.exit("TP/SL SELL", from_entry="SELL", stop=close + atr * slMultiplier, limit=close - atr * tpMultiplier)