Estratégia de acompanhamento da recuperação da média móvel

Autora:ChaoZhang, Data: 2024-03-28 18:00:05
Tags:

img

Resumo

A ideia principal desta estratégia é usar duas médias móveis com períodos diferentes para capturar a oportunidade de rebote após uma retração do mercado. Quando o preço está acima da média móvel de longo prazo e retorna para a média móvel de curto prazo, a estratégia abre uma posição longa e fecha a posição quando o preço sobe acima da média móvel de curto prazo ou atinge o preço de stop-loss.

Princípio da estratégia

  1. Calcular duas médias móveis com períodos diferentes (MA1 e MA2), onde MA1 é a média móvel de longo prazo e MA2 é a média móvel de curto prazo.
  2. Quando o preço de encerramento estiver acima do MA1 e abaixo do MA2, e não houver posição atual, e o momento atual estiver dentro do intervalo de tempo de negociação especificado, a estratégia abre uma posição longa.
  3. Registre o preço de entrada como buyPrice e calcule o preço stop-loss stopPrice (isto é, i_stopPercent por cento abaixo do preço de entrada).
  4. Quando o preço de encerramento voltar a subir acima do MA2 e i_lowerClose for falso, ou quando o preço de encerramento cair abaixo do preço stop-loss stopPrice, a estratégia fecha a posição.
  5. Se i_lowerClose for verdade, a estratégia fecha a posição quando o preço de fechamento estiver acima do MA2 e o preço de fechamento da vela anterior estiver abaixo do MA2.

Vantagens da estratégia

  1. Seguimento da tendência: Ao determinar a tendência geral com base na posição relativa do preço e na média móvel de longo prazo, a estratégia procura oportunidades de entrada na tendência.
  2. Pullback buying: Ao procurar oportunidades de compra quando o preço retorna para a média móvel de curto prazo durante uma tendência de alta, a estratégia melhora a relação custo-eficácia dos pontos de entrada.
  3. Protecção de stop-loss: a fixação de um preço de stop-loss ajuda a controlar eficazmente o risco de queda quando o preço se move negativamente por uma certa magnitude.
  4. Parâmetros flexíveis: Os utilizadores podem definir de forma flexível parâmetros como períodos de média móvel, percentagem de stop-loss e se devem fechar a posição quando o preço de fechamento da vela anterior estiver abaixo da média móvel de curto prazo, de acordo com as suas preferências.

Riscos estratégicos

  1. Optimização de parâmetros: diferentes definições de parâmetros têm um impacto significativo no desempenho da estratégia, exigindo otimização de parâmetros e backtesting em diferentes ambientes de mercado para encontrar a combinação ideal de parâmetros.
  2. Mercados agitados: nos mercados agitados, os preços flutuam frequentemente entre as médias móveis de longo prazo e de curto prazo, o que pode conduzir a abertura e fechamento frequentes de posições e erodir os custos de negociação.
  3. Reversão de tendência: quando uma tendência de mercado se inverte, a estratégia pode sofrer perdas consecutivas.
  4. Eventos de cisne negro: Quando o mercado experimenta eventos repentinos e imprevisíveis, os preços podem flutuar drasticamente, desencadeando stop-losses e expondo a estratégia a perdas significativas.

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

  1. Julgamento da tendência: introduzir mais indicadores de julgamento da tendência, como o ADX, antes de abrir uma posição para confirmar a força e a direção da tendência atual e melhorar a precisão dos sinais de entrada.
  2. O nível de stop-loss é ajustado de forma dinâmica com base em indicadores como a volatilidade dos preços e o ATR, ampliando o stop-loss quando a volatilidade dos preços é elevada e ajustando-o quando a volatilidade dos preços é baixa.
  3. Dimensão da posição: ajustar dinamicamente o tamanho da posição de cada entrada com base em fatores como a força da tendência do mercado e a volatilidade dos preços, aumentar o tamanho da posição quando a tendência é forte e a volatilidade moderada e diminuir o tamanho da posição quando a tendência é fraca ou a volatilidade é demasiado elevada.
  4. Cobertura longa-curta: considerar a monitorização simultânea dos sinais dos lados longo e curto e a cobertura de posições em diferentes mercados ou prazos para reduzir o risco global da estratégia.

Resumo

A estratégia de rastreamento de retorno da média móvel capta oportunidades de negociação longas durante os recuos de preços em uma tendência de alta usando a posição relativa de duas médias móveis com períodos diferentes. Esta estratégia é adequada para mercados de tendência e, com configurações de parâmetros apropriadas e stop-loss, pode gerar retornos estáveis em condições de tendência. No entanto, a estratégia enfrenta certos riscos em mercados agitados e durante inversões de tendência. Ao introduzir mais indicadores, otimizar o tamanho da posição, implementar stop-loss dinâmicos e outros métodos, o desempenho e a estabilidade desta estratégia podem ser melhorados.


/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 00:00:00
period: 1d
basePeriod: 1h
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/
// © contapessoal_ivan
// @version=5
strategy("Pullback Strategy", 
     overlay=true, 
     initial_capital=1000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("26 Jan 2023 00:00 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("26 Mar 2024 23:59 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)


Mais.