Acompanhamento de tendência de média móvel dupla e estratégia de negociação adaptativa de controle de risco ATR

SMA ATR TP SL HTF
Data de criação: 2024-11-29 14:56:43 última modificação: 2024-11-29 14:56:43
cópia: 0 Cliques: 522
1
focar em
1617
Seguidores

Acompanhamento de tendência de média móvel dupla e estratégia de negociação adaptativa de controle de risco ATR

Visão geral

A estratégia é um sistema de negociação adaptável que combina o acompanhamento clássico de tendências em linha dupla e o controle de risco dinâmico do ATR. A estratégia oferece dois modos de negociação: o modo básico usa um simples cruzamento de tendências em linha dupla para acompanhar a tendência, o modo avançado adiciona filtragem de tendências em quadros de tempo mais elevados e um mecanismo de parada dinâmico baseado no ATR. A estratégia pode alternar entre os dois modos por meio de um menu de download simples, atendendo à facilidade de uso dos iniciantes e atendendo às necessidades de controle de risco dos comerciantes experientes.

Princípio da estratégia

A estratégia 1 ((modo básico) usa um sistema de dupla equilíbrio de 21 e 49 dias, que gera vários sinais quando a média rápida atravessa a média lenta para cima. O objetivo de lucro pode ser selecionado em porcentagem ou ponto, oferecendo um recurso opcional de parada de perda móvel para bloquear o lucro. A estratégia 2 ((modo avançado) baseia-se na estratégia de dupla equilíbrio. O filtro de tendência de nível de linha diária é adicionado à base do sistema de dupla equilíbrio e só é permitido entrar em jogo quando o preço está acima da média do quadro de tempo mais alto.

Vantagens estratégicas

  1. A estratégia é altamente adaptável e pode ser alterada de acordo com o nível de experiência do comerciante e o ambiente do mercado
  2. Análise de multi-quadros de tempo em modo avançado para melhorar a qualidade do sinal
  3. ATR Stop Loss Dinâmico adapta-se a diferentes condições de mercado
  4. Alguns mecanismos de lucro equilibram a proteção dos lucros e a continuação da tendência
  5. Configuração de parâmetros flexível para otimização de acordo com diferentes características do mercado

Risco estratégico

  1. Sistemas de dupla linha podem gerar falsos sinais frequentes em mercados com tremores
  2. A filtragem de tendências pode atrasar os sinais e perder algumas oportunidades de negociação
  3. ATR paragem pode não ser oportuna em caso de variação de taxa de flutuação
  4. O que é que o governo está fazendo para reduzir os lucros e afetar a tendência geral?

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

  1. Pode aumentar o volume de transação e oscilação de indicadores de filtragem de falsos sinais
  2. Considerar a introdução de um mecanismo de adaptação de parâmetros dinâmicos para ajustar automaticamente o ciclo de medianação de acordo com a situação do mercado
  3. Otimização do ciclo de cálculo do ATR, equilibrando sensibilidade e estabilidade
  4. Adição de módulo de identificação de estado de mercado para selecionar automaticamente o melhor modelo de estratégia
  5. Introdução de mais opções de stop loss, como stop loss tracking, stop loss time, etc.

Resumir

Trata-se de um sistema de estratégia de negociação concebido de forma racional e funcional. A combinação de seguimento de tendências de dupla linha e controle de risco ATR garante a fiabilidade da estratégia e oferece um bom gerenciamento de risco. O design de dois modos atende às necessidades de diferentes níveis de comerciantes, e a rica configuração de parâmetros oferece espaço suficiente para otimização.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shaashish1

//@version=5
strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000)

//#region STRATEGY SELECTION
strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection")
//#endregion STRATEGY SELECTION

// ####################### STRATEGY 1: Original Logic ########################
//#region STRATEGY 1 INPUTS
s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings")
s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100
s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings")
s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings")
//#endregion STRATEGY 1 INPUTS

// ####################### STRATEGY 2: Enhanced with Recommendations ########################
//#region STRATEGY 2 INPUTS
s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR")
s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR")
s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings")
s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings")
//#endregion STRATEGY 2 INPUTS

// ####################### GLOBAL VARIABLES ########################
var float takeProfitPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na
var float fastMA = na
var float slowMA = na
var float higherTimeframeTrendMA = na
var bool validOpenLongPosition = false

// Precalculate higher timeframe values (global scope for Strategy 2)
higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen))

// ####################### LOGIC ########################
if (strategyOptions == "Strategy 1")
    // Strategy 1 Logic (Original Logic Preserved)
    fastMA := ta.sma(close, s1_fastMALen)
    slowMA := ta.sma(close, s1_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA)
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0
    
    // Take Profit Price
    takeProfitPrice := if (s1_takeProfitMode == "Percentage")
        close * (1 + s1_takeProfitPerc)
    else
        close + (s1_takeProfitPips * syminfo.mintick)

    // Trailing Stop Price (if enabled)
    if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled)
        trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick)
    else
        trailingStopPrice := na

else if (strategyOptions == "Strategy 2")
    // Strategy 2 Logic with Recommendations
    fastMA := ta.sma(close, s2_fastMALen)
    slowMA := ta.sma(close, s2_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0

    // ATR-Based Stop-Loss
    atr = ta.atr(s2_atrLength)
    stopLossPrice := close - (atr * s2_atrMultiplier)

    // Partial Take Profit Logic
    takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100))
//#endregion STRATEGY LOGIC

// ####################### PLOTTING ########################
plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1)
plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1)
plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr)

// Trailing Stop and ATR Stop-Loss Plots (Global Scope)
plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr)
plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr)
//#endregion PLOTTING

// ####################### POSITION ORDERS ########################
//#region POSITION ORDERS
if (validOpenLongPosition)
    strategy.entry(id="Long Entry", direction=strategy.long)

if (strategyOptions == "Strategy 1")
    if (strategy.position_size > 0)
        if (s1_trailingTakeProfitEnabled)
            strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice)
        else
            strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice)

else if (strategyOptions == "Strategy 2")
    if (strategy.position_size > 0)
        strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice)
        strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice)
//#endregion POSITION ORDERS