Estratégia de lucro móvel multietapas de disparo duplo da Supertrend

ATR ST TP
Data de criação: 2024-06-21 14:36:35 última modificação: 2024-06-21 14:36:35
cópia: 1 Cliques: 698
1
focar em
1617
Seguidores

Estratégia de lucro móvel multietapas de disparo duplo da Supertrend

Visão geral

Esta é uma estratégia de parada móvel em vários passos baseada em dois indicadores de Supertrend. A estratégia usa dois indicadores de Supertrend diferentes para avaliar a tendência do mercado e negociar em múltiplos espaços de acordo com a direção da tendência.

Princípio da estratégia

  1. Indicadores de dupla Supertrend: estratégia de usar dois parâmetros de configuração de diferentes indicadores de Supertrend para julgar a tendência. Quando dois indicadores mostram uma tendência ascendente ao mesmo tempo, acionar um sinal múltiplo; quando dois indicadores mostram uma tendência descendente ao mesmo tempo, acionar um sinal de fechamento. Este mecanismo de dupla confirmação pode reduzir efetivamente os falsos sinais.

  2. Paradas móveis em vários passos: a estratégia define 4 objetivos de parada ajustáveis. Cada objetivo tem uma proporção de porcentagem de parada e posição de paz correspondente. Por exemplo, o primeiro objetivo de parada pode ser definido como 12% de posição em 6% de lucro, o segundo objetivo pode ser 8% de posição em 12% de lucro, e assim por diante.

  3. Flexível direção de negociação: a estratégia permite que o usuário escolha entre apenas fazer mais, apenas fazer menos ou negociar em ambos os sentidos, para se adaptar a diferentes ambientes de mercado e preferências de negociação.

  4. Paradas dinâmicas: Embora não haja uma configuração de paradas definida no código, a estratégia se estabiliza automaticamente quando o indicador da Supertrend é invertido, o que na verdade atua como paradas dinâmicas.

Vantagens estratégicas

  1. Optimização do gerenciamento de risco: o mecanismo de parada móvel em vários passos melhora significativamente a taxa de retorno do risco da estratégia. Ao bloquear os lucros gradualmente, a estratégia pode reduzir o risco de retração enquanto mantém o espaço para o aumento.

  2. Redução de falsos sinais: o uso de indicadores duplos de Supertrend reduz significativamente o impacto de falsos sinais, aumentando a precisão e a confiabilidade das negociações.

  3. Adaptabilidade: A estratégia pode ajustar de forma flexível a direção de negociação e parâmetros de parada de acordo com as preferências do usuário e as condições do mercado, e é aplicável a vários tipos de negociação e períodos de tempo.

  4. Alto grau de automação: A estratégia é totalmente automatizada, sem a intervenção humana desde a entrada, parada e saída, reduzindo significativamente o impacto emocional e a possibilidade de erros operacionais.

  5. Gerenciamento de capital flexível: A estratégia permite o gerenciamento de capital flexível, garantindo o bloqueio rápido de parte dos lucros e permitindo que as posições restantes continuem lucrando, através da configuração de diferentes taxas de suspensão.

Risco estratégico

  1. Sensibilidade de parâmetros: o desempenho da estratégia depende muito da configuração do indicador Supertrend e dos parâmetros de parada. Parâmetros inadequados podem levar a excesso de negociação ou perda de oportunidades importantes.

  2. Dependência de tendências: como uma estratégia de acompanhamento de tendências, pode haver frequentes entradas e saídas em mercados turbulentos, causando custos de negociação desnecessários.

  3. Risco de deslizamento: Em um cenário rápido, a execução do multi-passo pode ser afetada pelo deslizamento, e o preço de execução real pode ser diferente do esperado.

  4. Risco de otimização excessiva: a estratégia possui vários parâmetros ajustáveis, sendo fácil cair na armadilha de otimização excessiva, resultando em resultados de teste com grande diferença em relação ao desempenho do disco real.

Direção de otimização da estratégia

  1. Introduzir filtros de volatilidade: considerar a combinação de ATR ou outros indicadores de volatilidade, reduzir a frequência de negociação em períodos de baixa volatilidade e melhorar a adaptabilidade da estratégia em diferentes ambientes de mercado.

  2. Ajuste de parâmetros dinâmicos: pode ser explorado o uso de algoritmos de adaptação para ajustar dinamicamente os parâmetros da Supertrend e os objetivos de parada para melhor se adaptar às mudanças do mercado.

  3. Aumentar o mecanismo de stop loss: Embora o Supertrend ofereça uma certa função de stop loss invertida, pode-se considerar a adição de mecanismos de stop loss mais flexíveis, como o rastreamento de stop loss, para controlar ainda mais o risco.

  4. Combinação com outros indicadores técnicos: pode-se considerar a introdução de outros indicadores técnicos, como RSI, MACD, para melhorar a precisão de entrada e saída por meio de ressonância de vários indicadores.

  5. Optimizar o gerenciamento de fundos: estratégias de gerenciamento de fundos mais complexas podem ser exploradas, como o tamanho da posição de ajuste dinâmico de acordo com a lucratividade da conta, para melhor equilibrar riscos e ganhos.

  6. Optimização de retorno: realizar um retorno mais abrangente, incluindo análises de desempenho em diferentes períodos de tempo e condições de mercado, para identificar os melhores cenários de aplicação e configurações de parâmetros da estratégia.

Resumir

A estratégia de parada móvel em vários passos é baseada em dois indicadores de Supertrend e equilibra riscos e ganhos por meio de um mecanismo de parada em vários passos flexível. Os principais benefícios da estratégia são sua excelente capacidade de gerenciamento de riscos e sensibilidade à tendência. No entanto, os usuários precisam prestar atenção à configuração de parâmetros e ao impacto do ambiente de mercado na aplicação.

Código-fonte da estratégia
/*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))