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

Estratégia de lucro de dupla supertendência em várias etapas

Autora:ChaoZhang, Data: 2024-06-21 14:36:35
Tags:ATRS.T.TP

img

Resumo

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.

Princípios de estratégia

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Vantagens da estratégia

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Riscos estratégicos

  1. Sensibilidade dos parâmetros: o desempenho da estratégia depende muito das configurações dos indicadores Supertrend e dos parâmetros de take-profit.

  2. 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.

  3. 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.

  4. 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.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Conclusão

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


Relacionados

Mais.