O recurso está a ser carregado... Carregamento...

Estratégia de supertendência dinâmica ajustada para volatilidade em várias etapas

Autora:ChaoZhang, Data: 2024-11-29 16:57:19
Tags:ATRSMADSTTP

img

Resumo

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.

Princípio da estratégia

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.

Vantagens da estratégia

  1. Adaptabilidade dinâmica: A estratégia adapta-se automaticamente a diferentes condições de mercado através do fator de ajustamento de volatilidade.
  2. Gestão de riscos: o mecanismo de captação de lucros em várias etapas fornece uma abordagem sistemática para a realização de lucros.
  3. Personalização: oferece várias configurações de parâmetros para acomodar diferentes estilos de negociação.
  4. Cobertura abrangente do mercado: apoia as negociações longas e curtas.
  5. Feedback visual: fornece uma interface gráfica clara para análise e tomada de decisão.

Riscos estratégicos

  1. Sensibilidade dos parâmetros: diferentes combinações de parâmetros podem provocar variações significativas no desempenho.
  2. Lag: Os indicadores baseados em médias móveis têm um lag inerente.
  3. Risco de Falsa Breakout: Pode gerar sinais falsos em mercados variados.
  4. Compensação de lucro: os lucros iniciais podem perder tendências importantes, os lucros tardios correm o risco de perder os ganhos acumulados.

Orientações para a otimização da estratégia

  1. Introduzir filtros de ambiente de mercado para ajustar os parâmetros da estratégia em diferentes condições de mercado.
  2. Adicionar análise de volume para melhorar a confiabilidade do sinal.
  3. Desenvolver mecanismos adaptativos de obtenção de lucros que ajustem dinamicamente os níveis de lucro com base na volatilidade do mercado.
  4. Integrar indicadores técnicos adicionais para confirmação do sinal.
  5. Implementar o dimensionamento dinâmico das posições com base no risco de mercado.

Resumo

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))


Relacionados

Mais.