A Multi-Step Volatility-Adjusted Dynamic SuperTrend Strategy é um sistema de negociação inovador que combina os indicadores Vegas Channel e SuperTrend. A singularidade da estratégia reside em sua capacidade de se adaptar dinamicamente à volatilidade do mercado e seu mecanismo de take-profit de várias etapas para otimizar as taxas de risco-recompensa. Combinando a análise de volatilidade do Vegas Channel com as capacidades de acompanhamento de tendências do SuperTrend, a estratégia ajusta automaticamente seus parâmetros conforme as condições do mercado mudam, fornecendo sinais de negociação mais precisos.
A estratégia opera em três componentes principais: cálculo do canal de Vegas, detecção de tendências e mecanismo de take-profit em várias etapas. O canal de Vegas usa a média móvel simples (SMA) e o desvio padrão (STD) para definir os intervalos de volatilidade de preços, enquanto o indicador SuperTrend determina a direção da tendência com base nos valores ajustados do ATR. Os sinais de negociação são gerados quando as tendências do mercado mudam. O mecanismo de take-profit em várias etapas permite saídas parciais em diferentes níveis de preços, um método que bloqueia os lucros e permite que as posições restantes capturem ganhos potenciais.
A Multi-Step Volatility-Adjusted Dynamic SuperTrend Strategy representa uma abordagem de negociação quantitativa avançada, combinando múltiplos indicadores técnicos e mecanismos inovadores de lucro para fornecer aos traders um sistema de negociação abrangente. Suas características de adaptabilidade dinâmica e gerenciamento de riscos a tornam particularmente adequada para operação em vários ambientes de mercado, com boa escalabilidade e potencial de otimização. Através de melhoria e otimização contínuas, a estratégia mostra promessa para entregar um desempenho de negociação mais estável no futuro.
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Multi-Step Vegas SuperTrend - strategy [presentTrading]", shorttitle="Multi-Step Vegas SuperTrend - strategy [presentTrading]", overlay=true, precision=3, commission_value=0.1, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD) // 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 // User inputs for take profit settings useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings") takeProfitPercent1 = input.float(3.0, title="Take Profit % Step 1", group="Take Profit Settings") takeProfitPercent2 = input.float(6.0, title="Take Profit % Step 2", group="Take Profit Settings") takeProfitPercent3 = input.float(12.0, title="Take Profit % Step 3", group="Take Profit Settings") takeProfitPercent4 = input.float(21.0, title="Take Profit % Step 4", group="Take Profit Settings") takeProfitAmount1 = input.float(25, title="Take Profit Amount % Step 1", group="Take Profit Settings") takeProfitAmount2 = input.float(20, title="Take Profit Amount % Step 2", group="Take Profit Settings") takeProfitAmount3 = input.float(10, title="Take Profit Amount % Step 3", group="Take Profit Settings") takeProfitAmount4 = input.float(15, title="Take Profit Amount % Step 4", group="Take Profit Settings") numberOfSteps = input.int(4, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings") // 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() // Multi-Stage Take Profit Logic if (strategy.position_size > 0) entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) if numberOfSteps >= 1 strategy.exit("Take Profit 1", from_entry="Long Position", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100)) if numberOfSteps >= 2 strategy.exit("Take Profit 2", from_entry="Long Position", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100)) if numberOfSteps >= 3 strategy.exit("Take Profit 3", from_entry="Long Position", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100)) if numberOfSteps >= 4 strategy.exit("Take Profit 4", from_entry="Long Position", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100)) if (strategy.position_size < 0) entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) if numberOfSteps >= 1 strategy.exit("Take Profit 1", from_entry="Short Position", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100)) if numberOfSteps >= 2 strategy.exit("Take Profit 2", from_entry="Short Position", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100)) if numberOfSteps >= 3 strategy.exit("Take Profit 3", from_entry="Short Position", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100)) if numberOfSteps >= 4 strategy.exit("Take Profit 4", from_entry="Short Position", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))