리소스 로딩... 로딩...

통계적 이중 표준 오차 VWAP 브레이크업 거래 전략

저자:차오장, 날짜: 2025-01-06 16:31:36
태그:VWAPSDVOLHL2

img

전반적인 설명

이 전략은 VWAP (Volume Weighted Average Price) 및 표준편차 채널을 기반으로 한 트렌드 브레이크 아웃 시스템이다. 상승 브레이크 아웃 기회를 잡기 위해 VWAP 및 표준편차 대역을 계산하여 동적 가격 범위를 구성합니다. 이 전략은 주로 수익 목표와 위험을 제어하기 위한 주문 간격과 함께 거래에 표준편차 대역의 브레이크 아웃 신호에 의존합니다.

전략 원칙

  1. 핵심 지표 계산:
  • 내일 HL2 가격과 부피를 사용하여 VWAP를 계산합니다.
  • 가격 변동에 기초한 표준편차를 계산
  • 표준편차의 1.28 배 상단과 하단 반도를 설정
  1. 거래 논리:
  • 진입 조건: 가격이 하위 범위를 넘고 그 위에 올라갑니다.
  • 출구 조건: 미리 설정된 수익 목표에 도달
  • 빈번한 거래를 피하기 위한 최소 주문 간격

전략적 장점

  1. 통계 기초
  • VWAP 기반의 가격 센터 참조
  • 표준편차를 이용한 변동성 측정
  • 동적 거래 범위 조정
  1. 위험 관리
  • 고정 수익 목표 설정
  • 거래 주파수 제어
  • 장기적 전략은 위험을 줄여줍니다.

전략 위험

  1. 시장 위험
  • 높은 변동성 중 가짜 파업
  • 트렌드 반전 시기를 정확하게 정하는 데 어려움이 있습니다.
  • 하락 추세 시장에서의 손실 증가
  1. 매개 변수 위험
  • 표준편차 곱셈값 설정에 대한 민감도
  • 이윤 목표 최적화가 필요합니다.
  • 거래 간격은 성과에 영향을 미칩니다.

최적화 방향

  1. 신호 최적화
  • 트렌드 필터 추가
  • 부피 변경 확인을 포함
  • 추가 기술 지표 포함
  1. 위험 관리 최적화
  • 동적 스톱 로스 포스팅
  • 변동성에 기초한 포지션 크기
  • 강화된 주문 관리 시스템

요약

이것은 통계적 원칙과 기술적 분석을 결합한 양적 거래 전략이다. VWAP와 표준편차 대역의 조합을 통해 비교적 신뢰할 수있는 거래 시스템을 구축합니다. 핵심 장점은 과학적 통계적 기초와 포괄적인 위험 관리 메커니즘에 있습니다. 그러나 실제 응용 분야에서는 매개 변수 및 거래 논리의 지속적인 최적화가 여전히 필요합니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5 
strategy("VWAP Stdev Bands Strategy (Long Only)", overlay=true)

// Standard Deviation Inputs
devUp1 = input.float(1.28, title="Stdev above (1)")
devDn1 = input.float(1.28, title="Stdev below (1)")

// Show Options
showPrevVWAP = input(false, title="Show previous VWAP close?")
profitTarget = input.float(2, title="Profit Target ($)", minval=0) // Profit target for closing orders
gapMinutes = input.int(15, title="Gap before new order (minutes)", minval=0) // Gap for placing new orders

// VWAP Calculation
var float vwapsum = na
var float volumesum = na
var float v2sum = na
var float prevwap = na // Track the previous VWAP
var float lastEntryPrice = na // Track the last entry price
var int lastEntryTime = na // Track the time of the last entry

start = request.security(syminfo.tickerid, "D", time)
newSession = ta.change(start)

vwapsum := newSession ? hl2 * volume : vwapsum[1] + hl2 * volume
volumesum := newSession ? volume : volumesum[1] + volume
v2sum := newSession ? volume * hl2 * hl2 : v2sum[1] + volume * hl2 * hl2

myvwap = vwapsum / volumesum
dev = math.sqrt(math.max(v2sum / volumesum - myvwap * myvwap, 0))

// Calculate Upper and Lower Bands
lowerBand1 = myvwap - devDn1 * dev
upperBand1 = myvwap + devUp1 * dev

// Plot VWAP and Bands with specified colors
plot(myvwap, style=plot.style_line, title="VWAP", color=color.green, linewidth=1)
plot(upperBand1, style=plot.style_line, title="VWAP Upper (1)", color=color.blue, linewidth=1)
plot(lowerBand1, style=plot.style_line, title="VWAP Lower (1)", color=color.red, linewidth=1)

// Trading Logic (Long Only)
longCondition = close < lowerBand1 and close[1] >= lowerBand1 // Price crosses below the lower band

// Get the current time in minutes
currentTime = timestamp("GMT-0", year(timenow), month(timenow), dayofmonth(timenow), hour(timenow), minute(timenow))

// Check if it's time to place a new order based on gap
canPlaceNewOrder = na(lastEntryTime) or (currentTime - lastEntryTime) >= gapMinutes * 60 * 1000

// Close condition based on profit target
if (strategy.position_size > 0)
    if (close - lastEntryPrice >= profitTarget)
        strategy.close("B")
        lastEntryTime := na // Reset last entry time after closing

// Execute Long Entry
if (longCondition and canPlaceNewOrder)
    strategy.entry("B", strategy.long)
    lastEntryPrice := close // Store the entry price
    lastEntryTime := currentTime // Update the last entry time

    // Add label for the entry
    label.new(bar_index, close, "B", style=label.style_label_down, color=color.green, textcolor=color.white, size=size.small)

// Optional: Plot previous VWAP for reference
prevwap := newSession ? myvwap[1] : prevwap[1]
plot(showPrevVWAP ? prevwap : na, style=plot.style_circles, color=close > prevwap ? color.green : color.red)

관련

더 많은