
A estratégia é um conjunto de sistemas de negociação de análise técnica integrados que identificam oportunidades de negociação de bandas de alta probabilidade através da integração de múltiplos indicadores. O sistema baseia-se principalmente no indicador SuperTrend como um filtro de direção de tendência, em combinação com o ADX (indicador de direção média) para confirmar a força da tendência, e usa a análise de desequilíbrio de pressão de compra e venda do delta de liquidez para gerar sinais de entrada e saída com precisão em vários ambientes de mercado.
A estratégia cria sinais de negociação trabalhando em conjunto com os seguintes quatro indicadores centrais:
Indicadores de SuperTrend: Como o principal filtro de direção de tendência, usa a configuração de otimização (factor: 3.0, ciclo ATR: 10) para equilibrar a capacidade de resposta e a confiabilidade. Quando o preço está acima da linha SuperTrend, é identificado como uma tendência ascendente; Quando o preço está abaixo da linha SuperTrend, é identificado como uma tendência descendente.
Indicador ADXA estratégia utiliza uma implementação personalizada para calcular a amplitude real, os movimentos na direção positiva e negativa, resultando em um valor de ADX. Quando o valor de ADX é maior do que o limite definido (o padrão 25), indicando a existência de uma forte tendência, o sistema tende a gerar mais transações de sinal.
Índice de Delta da Liquidez: Analise o desequilíbrio entre a pressão de compra e venda do volume de transação, calcule o volume de compra e venda e obtenha o valor final do delta por meio de uma série de processamentos de padronização e de suavização. Quando o valor do delta é superior ao limite positivo, é produzido um sinal de fazer mais e um sinal de fazer menos quando é inferior ao limite negativo, para verificar a direção da tendência e a potencial reversão.
Índice PSAR(Opcional): Pode ser usado como confirmação adicional de mudanças de tendência, sendo desligado por padrão para reduzir a filtragem de sinais. Quando o preço está acima do PSAR, é considerado uma tendência ascendente; quando o preço está abaixo do PSAR, é considerado uma tendência descendente.
A lógica de negociação gera um sinal de complemento através da combinação de todos os indicadores ativados. O sinal de compra ou venda final é gerado quando todos os indicadores apontam na mesma direção. Por exemplo, o sistema gerará um sinal de compra somente quando as condições PSAR, SuperTrend, ADX e Delta de Liquidez forem atendidas. Além disso, a estratégia permite que o usuário escolha a direção de negociação para se adaptar a diferentes condições de mercado ou restrições de conta.
A estratégia tem as seguintes vantagens significativas:
Sistema de confirmação multidimensionalA integração de diferentes tipos de indicadores técnicos para a confirmação de transações em várias dimensões, desde tendências, intensidade e volume de transações, reduz significativamente o risco de falsos sinais e aumenta a precisão das transações.
Altamente adaptávelA estratégia permite ao usuário a flexibilidade de escolher a direção de negociação e ativar/desativar indicadores específicos, permitindo que o sistema se adapte a várias condições de mercado e diferentes variedades de negociação.
Controle rigoroso dos riscosO mecanismo de stop loss e stop loss de proporção fixa embutida garante que cada transação tenha limites de risco e objetivos de lucro predefinidos, protegendo efetivamente a segurança dos fundos.
Considere os custos reais da transaçãoO modelo de estratégia inclui uma comissão ((0,035%) e um cálculo de deslizamento ((2 pontos), o que torna os resultados da retrospectiva mais adequados ao ambiente de negociação real.
Visualização de sinais de negociação: Fornece uma seta de compra/venda clara, com tamanho personalizável, fácil de identificar rapidamente no gráfico.
Painel de informações: Dinâmico mostra indicadores atualmente ativos e configurações de risco, fornecendo feedback imediato sobre o estado de operação da estratégia.
Gestão conservadora de posiçõesPor padrão, 5% de juros são usados como o tamanho da posição em cada transação, evitando a perda de capital causada por overtrading.
Apesar de ser uma estratégia abrangente, existem os seguintes riscos potenciais:
Sensibilidade do parâmetroO desempenho da estratégia é altamente dependente da configuração dos parâmetros do indicador, especialmente o fator SuperTrend e os limites do ADX. Diferentes ambientes de mercado podem exigir diferentes otimizações de parâmetros, o que pode levar a sobrevenda ou perda de oportunidades importantes.
Risco de atrasoA utilização de vários indicadores de média móvel pode atrasar os sinais, o que pode levar a uma entrada ou saída inadequada em mercados de retorno rápido.
Risco de correlação: Pode haver correlação intrínseca entre vários indicadores técnicos, o que significa que as confirmações aparentemente independentes podem vir de indicadores baseados em modelos matemáticos semelhantes, reduzindo o valor real das confirmações múltiplas.
Risco de otimização excessivaO bom desempenho durante o período de retrospectiva 2021-2033 não significa necessariamente a mesma eficácia no mercado futuro, especialmente se esses parâmetros forem o resultado de uma otimização excessiva para dados históricos.
Solução:
A estratégia pode ser otimizada em vários aspectos:
Ajuste de parâmetros dinâmicosImplementação de mecanismos de ajuste automático do fator SuperTrend e do depreciamento do ADX com base na volatilidade do mercado, permitindo que a estratégia se adapte melhor a diferentes cenários de mercado. Por exemplo, o uso de um fator SuperTrend menor em mercados de baixa volatilidade e um fator maior em mercados de alta volatilidade.
Filtro de tempoAumentar o mecanismo de filtragem baseado em tempo, evitando a negociação em momentos de baixa liquidez ou alta volatilidade, como o fim de semana no mercado de criptomoedas ou a publicação de dados econômicos importantes no mercado de câmbio.
Análise de Multi-Framas de TempoPor exemplo, entrar em negociação somente quando a direção da tendência do diagrama coincide com a estrutura do tempo de negociação atual. Isso pode aumentar significativamente a taxa de vitória da estratégia.
Estratégias inteligentes de redução de prejuízosSubstituição de stop proporcional fixo por stop dinâmico baseado em ATR ou suporte/resistência, melhor refletindo a situação real de flutuação do mercado e reduzindo o stop desencadeado pelo ruído do mercado.
Adição de filtros de entradaConsidere-se a adição de condições de filtragem como o julgamento RSI de sobrevenda ou o teste de borda de Brin, apenas para entrar em níveis de preços mais favoráveis, aumentando a qualidade de entrada.
Otimização da gestão de fundos: Realizar uma gestão de posição dinâmica com base no desempenho da estratégia atual e na situação do mercado, aumentando gradualmente as posições quando a estratégia funciona bem e reduzindo as posições quando a incerteza aumenta.
Aprendizagem de máquinaUtilizando a tecnologia de aprendizagem de máquina para otimizar a distribuição de peso dos indicadores e ajustar automaticamente a importância de cada indicador na formação do sinal final de acordo com diferentes condições de mercado.
A estratégia de negociação de tendência dinâmica de múltiplos indicadores integra vários indicadores técnicos, como SuperTrend, ADX e Delta de Liquidez, para construir um sistema de negociação abrangente e flexível, adequado para negociação de bandas em vários ambientes de mercado. A vantagem central da estratégia reside no seu mecanismo de confirmação de sinal multidimensional e no rigoroso quadro de gerenciamento de risco, que permite filtrar efetivamente o ruído do mercado e proteger os fundos de negociação. No entanto, os usuários precisam estar atentos aos riscos potenciais, como a sensibilidade dos parâmetros e o atraso dos indicadores, e reavaliar regularmente o desempenho da estratégia.
O sistema tem o potencial de aumentar ainda mais sua lucratividade e estabilidade através da implementação de orientações de otimização recomendadas, como o ajuste de parâmetros dinâmicos, a análise de múltiplos quadros temporais e a estratégia de parada inteligente. Finalmente, esta estratégia fornece aos comerciantes de quantificação uma estrutura sólida que pode ser personalizada e expandida de acordo com as preferências de risco pessoais e as perspectivas do mercado.
/*backtest
start: 2025-01-27 00:00:00
end: 2025-05-14 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TiamatCrypto
//@version=6
// ====================================================================================
// Multi-Indicator Swing Trading Strategy [TIAMATCRYPTO]v6
// ====================================================================================
// DESCRIPTION:
// This strategy uses a combination of technical indicators to identify swing trading
// opportunities in various markets. The default settings are optimized for daily
// timeframes on cryptocurrency and forex markets.
//
// RECOMMENDED DEFAULT SETTINGS:
// - Trading direction: Both (performs well in trending and ranging markets)
// - Position size: 5% (conservative position sizing to manage risk)
// - Stop Loss: 2% (conservative risk management for capital preservation)
// - Take Profit: 4% (realistic profit target with 1:2 risk-reward ratio)
// - Initial capital: $10,000 (realistic starting account size)
// - Timeframe: 2m (best performance on 2m charts)
// - Testing period: 2021-2033 (provides sufficient sample size of trades)
// ====================================================================================
strategy("Multi-Indicator Swing [TIAMATCRYPTO]v6", overlay=true,
default_qty_type=strategy.percent_of_equity, default_qty_value=5,
initial_capital=10000, commission_type=strategy.commission.percent,
commission_value=0.035, slippage=2)
// === BASIC SETTINGS ===
// Backtesting time period set directly in the code for realistic testing
var startDateInput = timestamp("2021-01-01T00:00:00")
var endDateInput = timestamp("2033-12-31T23:59:59")
var inDateRange = time >= startDateInput and time <= endDateInput
// Trading direction settings
tradeDirection = input.string("Both", "Trading Direction", options=["Long Only", "Short Only", "Both"], group="Basic Settings")
// === INDICATOR SWITCHES ===
// PSAR is now disabled by default
usePSAR = input.bool(false, "Use PSAR", group="Indicator Switches")
useSupertrend = input.bool(true, "Use Supertrend", group="Indicator Switches")
useADX = input.bool(true, "Use ADX", group="Indicator Switches")
useLiquidityDelta = input.bool(true, "Use Liquidity Delta", group="Indicator Switches")
// === INDICATOR SETTINGS SECTION ===
// PSAR Settings
// Default PSAR settings are conservative and work well across multiple markets
psarStart = input.float(0.02, "PSAR Initial Value", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarIncrement = input.float(0.02, "PSAR Increment", minval=0.01, maxval=0.1, step=0.01, group="PSAR Settings")
psarMaximum = input.float(0.2, "PSAR Maximum", minval=0.1, maxval=0.5, step=0.05, group="PSAR Settings")
// Supertrend Settings
// Factor 3.0 provides a good balance between sensitivity and false signals
atrPeriod = input.int(10, "SuperTrend ATR Period", minval=1, maxval=50, group="SuperTrend Settings")
factor = input.float(3.0, "SuperTrend Multiplier", minval=1, maxval=10, step=0.1, group="SuperTrend Settings")
// ADX Settings
// ADX threshold of 25 is standard for identifying strong trends
adxLength = input.int(14, "ADX Length", minval=1, maxval=50, group="ADX Settings")
adxThreshold = input.int(25, "ADX Trend Strength Threshold", minval=10, maxval=50, group="ADX Settings")
// Liquidity Delta Settings
// These settings help identify significant volume imbalances for trend confirmation
deltaLength = input.int(14, "Liquidity Delta Length", minval=1, maxval=50, group="Liquidity Delta")
deltaSmooth = input.int(3, "Delta Smoothing", minval=1, maxval=20, group="Liquidity Delta")
deltaThreshold = input.float(0.5, "Delta Signal Threshold", minval=0.1, maxval=5, step=0.1, group="Liquidity Delta")
// Risk Management Settings
// Conservative settings to ensure capital preservation
useStopLoss = input.bool(true, "Use Stop Loss", group="Risk Management")
useTakeProfit = input.bool(true, "Use Take Profit", group="Risk Management")
stopLossPercent = input.float(2.0, "Stop Loss (%)", minval=0.5, maxval=5, step=0.1, group="Risk Management")
takeProfitPercent = input.float(4.0, "Take Profit (%)", minval=1.0, maxval=10, step=0.1, group="Risk Management")
// Visualization Settings
signalSize = input.string("Normal", "Signal Size", options=["Small", "Normal", "Large"], group="Visualization")
buyColor = input.color(color.green, "Buy Signal Color", group="Visualization")
sellColor = input.color(color.red, "Sell Signal Color", group="Visualization")
// === INDICATOR CALCULATIONS ===
// All remaining indicators set to initialize as true when their respective switch is off
// PSAR Calculations
psar = ta.sar(psarStart, psarIncrement, psarMaximum)
psarCondition = not usePSAR or (close > psar)
psarSellCondition = not usePSAR or (close < psar)
// Supertrend Calculations
[supertrendValue, supertrendDirection] = ta.supertrend(factor, atrPeriod)
supertrendCondition = not useSupertrend or (supertrendDirection > 0)
supertrendSellCondition = not useSupertrend or (supertrendDirection < 0)
// ADX Calculations - custom implementation
trueRange = math.max(high - low, math.abs(high - close[1]), math.abs(low - close[1]))
smoothedTrueRange = ta.sma(trueRange, adxLength)
dmPlus = high > high[1] ? math.max(high - high[1], 0) : 0
dmMinus = low[1] > low ? math.max(low[1] - low, 0) : 0
smoothedDmPlus = ta.sma(dmPlus, adxLength)
smoothedDmMinus = ta.sma(dmMinus, adxLength)
diPlus = smoothedTrueRange > 0 ? 100 * smoothedDmPlus / smoothedTrueRange : 0
diMinus = smoothedTrueRange > 0 ? 100 * smoothedDmMinus / smoothedTrueRange : 0
dx = (diPlus + diMinus) > 0 ? math.abs(diPlus - diMinus) / (diPlus + diMinus) * 100 : 0
adxValue = ta.sma(dx, adxLength)
adxCondition = not useADX or (adxValue > adxThreshold)
// Liquidity Delta Calculations
bidVolume = close < open ? volume : volume * (high - close) / (high - low + 0.000001)
askVolume = close > open ? volume : volume * (close - low) / (high - low + 0.000001)
deltaRaw = bidVolume - askVolume
deltaAvg = ta.sma(deltaRaw, deltaLength)
deltaNormalized = deltaAvg / ta.sma(volume, deltaLength)
deltaSmoothed = ta.ema(deltaNormalized, deltaSmooth)
// Delta Signals
bullishDelta = deltaSmoothed > deltaThreshold
bearishDelta = deltaSmoothed < -deltaThreshold
deltaCondition = not useLiquidityDelta or bullishDelta
deltaSellCondition = not useLiquidityDelta or bearishDelta
// === TRADING LOGIC ===
// Buy signal - combination of all active indicators
buySignal = psarCondition and supertrendCondition and adxCondition and deltaCondition
// Sell signal - combination of all active indicators
sellSignal = psarSellCondition and supertrendSellCondition and adxCondition and deltaSellCondition
// Apply trading direction
isLongAllowed = tradeDirection == "Long Only" or tradeDirection == "Both"
isShortAllowed = tradeDirection == "Short Only" or tradeDirection == "Both"
finalBuySignal = buySignal and isLongAllowed
finalSellSignal = sellSignal and isShortAllowed
// === POSITION ENTRY WITH RISK MANAGEMENT ===
// Conservative position management with defined risk parameters
if finalBuySignal and inDateRange
strategy.entry("Long", strategy.long)
// Conditional setting of stop-loss and take-profit
if useStopLoss or useTakeProfit
stopLevel = useStopLoss ? close * (1 - stopLossPercent / 100) : na
takeProfitLevel = useTakeProfit ? close * (1 + takeProfitPercent / 100) : na
strategy.exit("Long Exit", "Long", stop=stopLevel, limit=takeProfitLevel)
if finalSellSignal and inDateRange
strategy.entry("Short", strategy.short)
// Conditional setting of stop-loss and take-profit
if useStopLoss or useTakeProfit
stopLevel = useStopLoss ? close * (1 + stopLossPercent / 100) : na
takeProfitLevel = useTakeProfit ? close * (1 - takeProfitPercent / 100) : na
strategy.exit("Short Exit", "Short", stop=stopLevel, limit=takeProfitLevel)
// === SIGNAL VISUALIZATION ===
// Creating separate signals for different sizes
buySmallSignal = finalBuySignal and signalSize == "Small"
buyNormalSignal = finalBuySignal and signalSize == "Normal"
buyLargeSignal = finalBuySignal and signalSize == "Large"
sellSmallSignal = finalSellSignal and signalSize == "Small"
sellNormalSignal = finalSellSignal and signalSize == "Normal"
sellLargeSignal = finalSellSignal and signalSize == "Large"
// Draw signals for each size
plotshape(buySmallSignal and inDateRange, title="Buy Small", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.small)
plotshape(buyNormalSignal and inDateRange, title="Buy Normal", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.normal)
plotshape(buyLargeSignal and inDateRange, title="Buy Large", location=location.belowbar, color=buyColor, style=shape.triangleup, size=size.large)
plotshape(sellSmallSignal and inDateRange, title="Sell Small", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.small)
plotshape(sellNormalSignal and inDateRange, title="Sell Normal", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.normal)
plotshape(sellLargeSignal and inDateRange, title="Sell Large", location=location.abovebar, color=sellColor, style=shape.triangledown, size=size.large)
// === INFORMATION PANEL ===
// Building list of active indicators
indList = ""
indList := usePSAR ? indList + "PSAR, " : indList
indList := useSupertrend ? indList + "SuperT, " : indList
indList := useADX ? indList + "ADX, " : indList
indList := useLiquidityDelta ? indList + "Delta" : indList
// Remove last comma if it exists
if str.endswith(indList, ", ")
indList := str.substring(indList, 0, str.length(indList) - 2)
// Building risk management text
riskText = ""
if useStopLoss and useTakeProfit
riskText := str.tostring(stopLossPercent, "#.#") + "% SL, " + str.tostring(takeProfitPercent, "#.#") + "% TP"
else if useStopLoss
riskText := str.tostring(stopLossPercent, "#.#") + "% SL"
else if useTakeProfit
riskText := str.tostring(takeProfitPercent, "#.#") + "% TP"
else
riskText := "Disabled"
// Display strategy information
var table infoTable = table.new(position.top_right, 2, 5, border_width=1)
table.cell(infoTable, 0, 0, "Strategy:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 0, "Multi-Indicator Swing", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 1, "Period:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 1, "2021-2023", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 2, "Direction:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 2, tradeDirection, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 3, "Indicators:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 3, indList, bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 0, 4, "Risk Management:", bgcolor=color.new(color.blue, 90), text_color=color.white)
table.cell(infoTable, 1, 4, riskText, bgcolor=color.new(color.blue, 90), text_color=color.white)