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