Esta é uma estratégia de take-profit em vários passos baseada em indicadores duplos de Supertrend. A estratégia usa dois indicadores de Supertrend com parâmetros diferentes para determinar as tendências do mercado e executar negociações longas ou curtas de acordo. O núcleo da estratégia está em seu mecanismo de take-profit em vários passos, que define várias metas de lucro para bloquear progressivamente os lucros, mantendo uma parte da posição aberta para capturar movimentos maiores do mercado.
Indicadores de Supertrend Duplo: A estratégia emprega dois indicadores de Supertrend com configurações de parâmetros diferentes para identificar tendências. Um sinal longo é acionado quando ambos os indicadores mostram uma tendência de alta, enquanto um sinal curto é acionado quando ambos indicam uma tendência de queda.
Multi-Step Trailing Take-Profit: A estratégia estabelece 4 metas de take-profit ajustáveis. Cada meta tem uma porcentagem de lucro correspondente e uma taxa de fechamento de posição. Por exemplo, a primeira meta pode fechar 12% da posição a 6% de lucro, a segunda pode fechar 8% a 12% de lucro, e assim por diante. Este mecanismo permite o bloqueio gradual de lucro, mantendo parte da posição aberta para se beneficiar dos movimentos contínuos do mercado.
Direcção de negociação flexível: Os utilizadores podem optar por negociar apenas a longo prazo, a curto prazo ou em ambas as direcções, adaptando-se a diferentes ambientes de mercado e preferências de negociação.
Stop-Loss dinâmico: Embora não haja uma definição explícita de stop-loss no código, a estratégia fecha automaticamente as posições quando os indicadores de Supertrend se invertem, atuando efetivamente como um stop-loss dinâmico.
Gestão de risco otimizada: O mecanismo de captação de lucro em várias etapas melhora significativamente a relação risco-recompensa da estratégia.
Redução dos falsos sinais: a utilização de indicadores duplos de Supertrend reduz significativamente o impacto dos falsos sinais, melhorando a precisão e a fiabilidade das negociações.
Alta adaptabilidade: A estratégia pode ajustar de forma flexível a direção da negociação e os parâmetros de lucro com base nas preferências dos utilizadores e nas condições do mercado, tornando-a adequada para vários instrumentos e prazos de negociação.
Alto grau de automação: A estratégia é totalmente automatizada, desde a entrada até o lucro e a saída, minimizando o impacto das emoções e dos erros operacionais.
Gestão de capital flexível: através da fixação de diferentes rácios de captação de lucro, a estratégia permite uma gestão de capital flexível, garantindo uma rápida realização parcial de lucros, permitindo que a posição restante continue a beneficiar dos movimentos do mercado.
Sensibilidade dos parâmetros: o desempenho da estratégia depende muito das configurações dos indicadores Supertrend e dos parâmetros de take-profit.
Dependência da tendência: Como uma estratégia de tendência, pode entrar e sair frequentemente em mercados agitados, causando custos comerciais desnecessários.
Risco de deslizamento: em mercados em rápida evolução, a execução de take-profits em várias etapas pode ser afetada por deslizamento, resultando em preços de execução reais que se desviam das expectativas.
Risco de otimização excessiva: com múltiplos parâmetros ajustáveis, a estratégia é propensa a otimização excessiva, levando potencialmente a diferenças significativas entre os resultados de backtesting e o desempenho da negociação ao vivo.
Introduzir a filtragem da volatilidade: considerar a incorporação do ATR ou de outros indicadores de volatilidade para reduzir a frequência de negociação durante períodos de baixa volatilidade, melhorando a adaptabilidade da estratégia às diferentes condições de mercado.
Ajuste dinâmico de parâmetros: explorar o uso de algoritmos adaptativos para ajustar dinamicamente os parâmetros da Supertrend e as metas de lucro para melhor adaptação às mudanças do mercado.
Melhorar o Mecanismo de Stop-Loss: Embora as inversões de Supertrend forneçam alguma funcionalidade de stop-loss, considere adicionar mecanismos de stop-loss mais flexíveis, como trailing stops, para um melhor controle do risco.
Integrar indicadores técnicos adicionais: considerar a incorporação de outros indicadores técnicos como o RSI ou o MACD para melhorar a precisão de entrada e saída através da confluência de vários indicadores.
Otimizar a gestão de capital: explorar estratégias de gestão de capital mais sofisticadas, tais como o ajustamento dinâmico dos tamanhos das posições com base no desempenho da conta, para equilibrar melhor o risco e a recompensa.
Optimização dos backtests: realizar backtests mais abrangentes, incluindo análises de desempenho em diferentes prazos e condições de mercado, para identificar os cenários de aplicação e configurações de parâmetros ideais da estratégia.
Esta estratégia multi-etapa, baseada em indicadores duplos de Supertrend, alcança um equilíbrio entre risco e recompensa através de seu mecanismo flexível de multi-etapa. As principais vantagens da estratégia estão em suas excelentes capacidades de gerenciamento de risco e sensibilidade às tendências. No entanto, os usuários precisam prestar atenção às configurações de parâmetros e aos impactos do ambiente de mercado ao aplicá-la. Através de otimização e refinamento adicionais, esta estratégia tem o potencial de se tornar um sistema de negociação automatizado robusto e confiável.
/*backtest start: 2024-05-21 00:00:00 end: 2024-06-20 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true ) // this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings. // The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals. // User inputs for take profit settings // Grouping Take Profit settings useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings") takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings") takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings") takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings") takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings") takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings") takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings") takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings") takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings") numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings") // Grouping Trade Direction tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction") // Grouping Supertrend settings atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings") factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings") atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings") factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings") // Function to calculate Supertrend supertrend(factor, atrPeriod) => [a, direction] = ta.supertrend(factor, atrPeriod) direction // Calculate Double Supertrend supertrend1 = supertrend(factor1, atrPeriod1) supertrend2 = supertrend(factor2, atrPeriod2) // Entry conditions longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both") shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both") // Exit conditions longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both") shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both") // Variables to store the highest and lowest prices during the trade var float highestPrice = na var float lowestPrice = na // Get the entry price from open trades entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) // Reset highestPrice or lowestPrice when entering new trades if (longCondition and strategy.position_size <= 0) highestPrice := na // Reset the highest price strategy.entry("My Long Entry Id", strategy.long) // Enter long position strategy.close("My Short Entry Id", "Short Exit") // Close short position if any if (shortCondition and strategy.position_size >= 0) lowestPrice := na // Reset the lowest price strategy.entry("My Short Entry Id", strategy.short) // Enter short position strategy.close("My Long Entry Id", "Long Exit") // Close long position if any // Exit trades based on conditions if (longExitCondition and strategy.position_size > 0) strategy.close("My Long Entry Id", "Long Exit") // Exit long position if (shortExitCondition and strategy.position_size < 0) strategy.close("My Short Entry Id", "Short Exit") // Exit short position if (strategy.position_size > 0) // Update the highest price for long positions highestPrice := na(highestPrice) ? high : math.max(highestPrice, high) // Step 1 if (useTakeProfit and numberOfSteps >= 1) strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100)) // Step 2 if (useTakeProfit and numberOfSteps >= 2) strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100)) // Step 3 if (useTakeProfit and numberOfSteps >= 3) strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100)) // Step 4 if (useTakeProfit and numberOfSteps == 4) strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100)) if (strategy.position_size < 0) // Update the lowest price for short positions lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low) // Step 1 if (useTakeProfit and numberOfSteps >= 1) strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100)) // Step 2 if (useTakeProfit and numberOfSteps >= 2) strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100)) // Step 3 if (useTakeProfit and numberOfSteps >= 3) strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100)) // Step 4 if (useTakeProfit and numberOfSteps == 4) strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))