Breakout no final do mês na estratégia da média móvel de 200 dias

Autora:ChaoZhang, Data: 2023-12-08 16:02:08
Tags:

img

Resumo

Esta estratégia baseia-se na ruptura do preço da média móvel de 200 dias no final do mês para capturar a direção da tendência dos preços das ações.

Princípio da estratégia

  1. Usar a média móvel simples de 200 dias dma200 como indicador para julgar a tendência dos preços
  2. No último dia de negociação de cada mês, julgue se o preço de fechamento é superior a dma200
  3. Se o preço de fechamento ultrapassar a MA de 200 dias, estabelecer uma posição longa completa no início do próximo dia de negociação
  4. Se o preço de fechamento ultrapassar a MA de 200 dias, liquidar todas as posições no início do dia de negociação seguinte
  5. Isto pode obter o efeito de seguir a tendência, estabelecendo posições quando os preços das acções entram numa tendência ascendente e evitando tendências descendentes

Análise das vantagens

  1. A estratégia tem a vantagem de ser simples e eficaz, de ser fácil de compreender e de aplicar.
  2. Tomar posições no final do mês pode reduzir a frequência de negociação e minimizar os custos de negociação e os impactos do deslizamento
  3. O MA de 200 dias é um indicador de avaliação da tendência a médio e longo prazo muito utilizado, eficaz para a maioria das acções
  4. A estratégia tem um aproveitamento relativamente reduzido e um declínio máximo, com riscos controláveis

Análise de riscos

  1. A MA de 200 dias pode não ser suficientemente sensível para que algumas acções possam captar as reversões de preços a tempo
  2. Há apenas 1 ponto de negociação por mês para a tomada de posições, o que pode fazer com que as oportunidades de alta/baixa sejam perdidas.
  3. A estratégia pode falhar no julgamento correto quando a tendência global do mercado é incerta
  4. Outros indicadores devem ser combinados para reduzir estes riscos

Orientações de otimização

  1. Considere aumentar os pontos de negociação no início ou no meio do mês para melhorar a frequência da estratégia
  2. Adicionar indicadores como Bollinger Bands para julgar a flutuação de preços e evitar negócios errados
  3. Avaliação dos efeitos de adequação de diferentes parâmetros de MA em diferentes unidades populacionais para encontrar combinações ideais de parâmetros
  4. Estabelecer mecanismos dinâmicos de dimensionamento das posições para deter ativamente as perdas quando o drawdown for demasiado elevado

Resumo

A estratégia é relativamente simples e prática em geral, capturando efetivamente as tendências de preços de médio e longo prazo das ações através do rompimento do MA de 200 dias no final do mês, com um drawdown e riscos relativamente pequenos.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © muscleriot
//200 dma
//2000-2016 backtested 
//1 signal per month only at end of month
//If > 200DMA enter long
//If < 200DMA goto cash
//results: 318% drawdown 17% vs 125% with 55% drawdown for buy and hold
//@version=5
strategy("200DMA last DOM - ajh", overlay =true,default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Use 100% of  equity always

dma200 = ta.sma(close, 200)
plot(dma200, color=color.red, linewidth = 2)
//e =dayofmonth(time)
// backtesting date range
from_day = input.int(defval=1, title="From Day", minval=1, maxval=31)
from_month = input.int(defval=1, title="From Month", minval=1, maxval=12)
from_year = input.int(defval=2018, title="From Year", minval=1900)

to_day = input.int(defval=1, title="To Day", minval=1, maxval=31)
to_month = input.int(defval=1, title="To Month", minval=1, maxval=12)
to_year = input.int(defval=9999, title="To Year", minval=1900)

time_cond = time > timestamp(from_year, from_month, from_day, 00, 00) and 
   time < timestamp(to_year, to_month, to_day, 23, 59)



xLong = dayofmonth(time) == 30 and (close > dma200) ? true : na
xSell = dayofmonth(time) == 30 and (close < dma200) ? true : na
plotchar(xLong, "long","L", color=color.green)    
plotchar(xSell, "Sell","S", color=color.red)    
if (xLong == true) and time_cond
    strategy.entry("long", strategy.long)
if (xSell == true) and time_cond
    strategy.close("long")

Mais.