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

Média móvel de tendência dupla, seguindo uma estratégia com sistema de gestão de riscos baseado no ATR

Autora:ChaoZhang, Data: 2024-11-29 14:56:43
Tags:SMAATRTPSLHTF

img

Resumo

Esta estratégia combina o clássico seguimento de tendência de média móvel dupla com gerenciamento de risco dinâmico baseado em ATR. Ele oferece dois modos de negociação: um modo básico usando cruzamento de média móvel simples para seguir a tendência e um modo avançado incorporando filtragem de tendência de prazo mais alto e mecanismos dinâmicos de stop-loss baseados em ATR. Os comerciantes podem alternar entre os modos através de um menu suspenso simples, atendendo às necessidades de gerenciamento de risco de iniciantes e experientes.

Princípios de estratégia

A estratégia 1 (Modo Básico) emprega um sistema de média móvel dupla de 21 e 49 dias, gerando sinais longos quando o MA rápido cruza acima do MA lento. As metas de lucro podem ser definidas em porcentagem ou pontos, com uma parada de trailering opcional para bloquear os lucros. A estratégia 2 (Modo Avançado) adiciona filtragem de tendência diária, permitindo entradas apenas quando o preço está acima da média móvel de prazo mais alto. Incorpora um stop-loss dinâmico baseado em ATR de 14 períodos que se ajusta à volatilidade do mercado e inclui uma funcionalidade de captação de lucro parcial para proteger ganhos.

Vantagens da estratégia

  1. Estratégia altamente adaptável que pode adaptar-se à experiência do comerciante e às condições do mercado
  2. Análise de quadros de tempo em modo avançado melhora a qualidade do sinal
  3. As paradas dinâmicas baseadas no ATR adaptam-se à variação da volatilidade do mercado
  4. Saldos de lucro parcial proteção dos lucros com continuação da tendência
  5. Configuração flexível dos parâmetros para diferentes características do mercado

Riscos estratégicos

  1. O sistema de MA dupla pode gerar sinais falsos frequentes em mercados variados
  2. A filtragem da tendência pode causar atraso no sinal, perdendo algumas oportunidades de negociação
  3. As paradas do ATR podem não se ajustar suficientemente rapidamente aos picos de volatilidade
  4. A obtenção parcial de lucros pode reduzir o tamanho das posições demasiado cedo em caso de tendências fortes

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

  1. Adicionar indicadores de volume e volatilidade para filtrar sinais falsos
  2. Considerar a aplicação de uma adaptação dinâmica dos parâmetros com base nas condições de mercado
  3. Otimizar o período de cálculo do ATR para equilibrar sensibilidade e estabilidade
  4. Adicionar módulo de reconhecimento do estado do mercado para seleção automática do modo de estratégia
  5. Introduzir mais opções de stop-loss como trailing stops e saídas baseadas em tempo

Resumo

Este é um sistema de negociação bem concebido e abrangente. A combinação de duplo seguimento de tendência média móvel e gerenciamento de risco baseado em ATR garante fiabilidade e controle de risco eficaz. O design de modo duplo atende às necessidades de diferentes níveis de comerciantes, enquanto configurações de parâmetros ricas fornecem amplas oportunidades de otimização. Os comerciantes são aconselhados a começar com parâmetros conservadores na negociação ao vivo e otimizar gradualmente para melhores resultados.


/*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


Relacionados

Mais.