이 전략의 핵심은 베가스 채널과 슈퍼 트렌드 지표의 조합이다. 베가스 채널은 가격의 상위 및 하위 변동 범위를 결정하기 위해 간단한 이동 평균 (SMA) 및 표준 편차 (STDEV) 를 사용합니다. 채널의 폭은 시장 변동성의 정도를 반영합니다. 반면 슈퍼 트렌드 지표는 현재 가격을 지표 값과 비교하여 트렌드 방향을 결정하는 트렌드 추적 지표입니다.
이 전략은 베가스 채널의 폭의 변화에 적응하기 위해 슈퍼트렌드 지표의 곱셈을 동적으로 조정합니다. 베가스 채널이 더 넓으면 (즉 시장 변동성이 더 높습니다), 슈퍼트렌드 지표의 곱셈이 그에 따라 증가하여 트렌드 변화에 더 민감하게 작용합니다. 반대로 베가스 채널이 좁으면 (즉 시장 변동성이 낮습니다), 곱셈이 감소하여 지표를 더 안정화합니다. 이러한 동적 조정으로 슈퍼트렌드 지표가 다른 시장 리듬에 적응 할 수 있습니다.
거래 신호는 현재 폐쇄 가격과 슈퍼트렌드 지표 값을 비교하여 생성됩니다. 가격이 아래에서 슈퍼트렌드 지표선을 넘을 때 긴 신호가 생성됩니다. 반대로 가격이 위에서 지표선을 넘을 때 짧은 신호가 생성됩니다. 이 간단하고 직관적인 신호 판단 방법은 전략을 이해하기 쉽고 적용 할 수 있습니다.
시장 변동성에 동적 적응: Vegas 채널을 통해 슈퍼 트렌드 지표의 매개 변수를 동적으로 조정함으로써 전략은 다른 시장 변동 조건에 적응하여 트렌드 시장에서 동향을 적시에 파악하고 변동 시장에서 안정성을 유지할 수 있습니다.
명확하고 직관적인 거래 신호: 전략은 슈퍼 트렌드 지표에 대한 가격의 상대적 위치에 기반하여 명확한 구매 및 판매 신호를 생성하며 간단하고 이해하기 쉽고 거래자가 신속하게 결정을 내리는 것을 촉진합니다.
유연한 거래 방향 옵션: 전략은 다른 거래자의 필요와 시장 시각을 충족시키는 긴, 짧은 및 양방향 거래를위한 세 가지 옵션을 제공합니다.
우수한 시각 지원: 전략은 차트에서 상승 및 하락 추세를 녹색과 빨간색으로 식별하고 사살로 구매 및 판매 지점을 표시합니다. 직관적이고 명확하며 시장 맥박을 파악하는 것을 용이하게합니다.
트렌드 인식 지연: 모든 트렌드 추적 전략과 마찬가지로, 이 전략은 트렌드 역전 초기 단계에서 신호 지연을 경험할 수 있으며, 이로 인해 최적의 입문 지점이 놓치고 추가 위험이 발생할 수 있습니다.
매개 변수 설정에 대한 민감성: 전략의 성능은 ATR 기간과 베가스 채널 길이와 같은 매개 변수 선택에 어느 정도 의존하며 다른 매개 변수에서 다른 결과를 얻을 수 있습니다.
빈번한 거래: 전략은 트렌드 변화에 상대적으로 민감하며 변동 시장에서 빈번한 거래 신호를 생성하여 거래 비용과 유출 위험을 증가시킬 수 있습니다.
더 많은 지표를 도입: 여러 차원에서 트렌드 신호를 확인하고 신호 신뢰성을 향상시키기 위해 RSI 및 MACD와 같은 다른 기술적 지표를 도입하는 것을 고려하십시오.
진입 및 출구 규칙을 최적화하십시오. 현재 진입 신호를 기반으로, 잘못된 신호를 줄이기 위해 여러 개의 연속 촛불이 트렌드 방향으로 닫을 것을 요구하는 것과 같은 더 많은 필터링 조건을 도입 할 수 있습니다. 동시에 출구를 최적화하기 위해 트레일링 스톱 또는 변동성 스톱을 설정 할 수 있습니다.
동적 위치 조정: 시장 트렌드 강도와 변동성 등의 지표에 기초하여, 트렌드가 강할 때 위치를 증가시키고, 트렌드가 약해질 때 위치를 줄여서 시장 트렌드 강도와 변동성 등의 지표에 기반하여, 위험을 더 잘 제어하고 수익을 최적화합니다.
/*backtest start: 2023-04-22 00:00:00 end: 2024-04-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © PresentTrading // The "Vegas SuperTrend Strategy" uses Vegas Channel and SuperTrend indicators on trading charts, allowing for adjustable settings like ATR length and channel size. // It modifies the SuperTrend's sensitivity to market volatility, generating buy (green) or sell (red) signals upon trend shifts. // Entry and exit points are visually marked, with the strategy automating trades based on these trend changes to adapt to different market conditions. //@version=5 strategy("Vegas SuperTrend Enhanced - strategy [presentTrading]", shorttitle="Vegas SuperTrend Enhanced - strategy [presentTrading]", overlay=true, precision=3, default_qty_type=strategy.cash, commission_value=0.1, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD, default_qty_value=10000, initial_capital=10000) // Input settings allow the user to customize the strategy's parameters. tradeDirectionChoice = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"]) // Option to select the trading direction atrPeriod = input(10, "ATR Period for SuperTrend") // Length of the ATR for volatility measurement vegasWindow = input(100, "Vegas Window Length") // Length of the moving average for the Vegas Channel superTrendMultiplier = input(5, "SuperTrend Multiplier Base") // Base multiplier for the SuperTrend calculation volatilityAdjustment = input.float(5, "Volatility Adjustment Factor") // Factor to adjust the SuperTrend sensitivity to the Vegas Channel width // Calculate the Vegas Channel using a simple moving average and standard deviation. vegasMovingAverage = ta.sma(close, vegasWindow) vegasChannelStdDev = ta.stdev(close, vegasWindow) vegasChannelUpper = vegasMovingAverage + vegasChannelStdDev vegasChannelLower = vegasMovingAverage - vegasChannelStdDev // Adjust the SuperTrend multiplier based on the width of the Vegas Channel. channelVolatilityWidth = vegasChannelUpper - vegasChannelLower adjustedMultiplier = superTrendMultiplier + volatilityAdjustment * (channelVolatilityWidth / vegasMovingAverage) // Calculate the SuperTrend indicator values. averageTrueRange = ta.atr(atrPeriod) superTrendUpper = hlc3 - (adjustedMultiplier * averageTrueRange) superTrendLower = hlc3 + (adjustedMultiplier * averageTrueRange) var float superTrendPrevUpper = na var float superTrendPrevLower = na var int marketTrend = 1 // Update SuperTrend values and determine the current trend direction. superTrendPrevUpper := nz(superTrendPrevUpper[1], superTrendUpper) superTrendPrevLower := nz(superTrendPrevLower[1], superTrendLower) marketTrend := close > superTrendPrevLower ? 1 : close < superTrendPrevUpper ? -1 : nz(marketTrend[1], 1) superTrendUpper := marketTrend == 1 ? math.max(superTrendUpper, superTrendPrevUpper) : superTrendUpper superTrendLower := marketTrend == -1 ? math.min(superTrendLower, superTrendPrevLower) : superTrendLower superTrendPrevUpper := superTrendUpper superTrendPrevLower := superTrendLower // Enhanced Visualization // Plot the SuperTrend and Vegas Channel for visual analysis. plot(marketTrend == 1 ? superTrendUpper : na, "SuperTrend Upper", color=color.green, linewidth=2) plot(marketTrend == -1 ? superTrendLower : na, "SuperTrend Lower", color=color.red, linewidth=2) plot(vegasChannelUpper, "Vegas Upper", color=color.purple, linewidth=1) plot(vegasChannelLower, "Vegas Lower", color=color.purple, linewidth=1) // Apply a color to the price bars based on the current market trend. barcolor(marketTrend == 1 ? color.green : marketTrend == -1 ? color.red : na) // Detect trend direction changes and plot entry/exit signals. trendShiftToBullish = marketTrend == 1 and marketTrend[1] == -1 trendShiftToBearish = marketTrend == -1 and marketTrend[1] == 1 plotshape(series=trendShiftToBullish, title="Enter Long", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") plotshape(series=trendShiftToBearish, title="Enter Short", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell") // Define conditions for entering long or short positions, and execute trades based on these conditions. enterLongCondition = marketTrend == 1 enterShortCondition = marketTrend == -1 // Check trade direction choice before executing trade entries. if enterLongCondition and (tradeDirectionChoice == "Long" or tradeDirectionChoice == "Both") strategy.entry("Long Position", strategy.long) if enterShortCondition and (tradeDirectionChoice == "Short" or tradeDirectionChoice == "Both") strategy.entry("Short Position", strategy.short) // Close all positions when the market trend changes. if marketTrend != marketTrend[1] strategy.close_all()