Este artigo apresenta uma estratégia de negociação de tendências baseada em múltiplas médias móveis chamada
A estratégia emprega três médias móveis simples (SMAs): de longo prazo (default 200 períodos), de médio prazo (default 21 períodos) e de curto prazo (default 9 períodos). Um sinal de compra é acionado quando o preço está acima das médias móveis de longo prazo e médio prazo e cruza acima da média móvel de curto prazo, desde que não haja posições abertas. A estratégia também define níveis de stop-gain e stop-loss de ponto fixo para gerenciar o risco. Além disso, todas as posições são fechadas às 17:00 de cada dia de negociação.
Calcular as médias móveis simples a longo prazo (default 200 periods), a médio prazo (default 21 periods) e a curto prazo (default 9 periods).
Determine se o preço atual está acima das médias móveis de longo e médio prazo.
Verifique se o preço atual ultrapassa a média móvel de curto prazo.
Quando ambas as condições 2 e 3 estiverem satisfeitas e não houver posições abertas, é desencadeado um sinal de compra.
Depois de comprar, defina níveis de stop-gain e stop-loss fixos e feche a posição quando o preço atingir qualquer um dos níveis.
Fechar todas as posições às 17:00 de cada dia de negociação.
Simples e de fácil compreensão: a estratégia baseia-se em médias móveis, tornando-a simples de compreender e de aplicar.
Seguimento da tendência: Ao analisar a posição dos preços em relação às médias móveis de diferentes períodos, a estratégia capta eficazmente as tendências ascendentes do mercado.
Controle de risco: A estratégia incorpora níveis fixos de stop-gain e stop-loss, ajudando a gerir o risco para as operações individuais.
Fechamento automático de posições: a estratégia fecha automaticamente todas as posições num horário específico de cada dia de negociação, evitando riscos overnight.
Optimização de parâmetros: o desempenho da estratégia pode ser sensível aos parâmetros da média móvel do período, exigindo otimização para diferentes mercados e instrumentos.
Mercados agitados: em condições de mercado agitadas, sinais cruzados frequentes podem levar a um desempenho estratégico subóptimo.
Risco de deslizamento: durante a alta volatilidade do mercado, os níveis de stop-gain e stop-loss fixos podem não ser executados como pretendido, resultando em risco de deslizamento.
A taxa de prejuízo e a taxa de prejuízo dinâmicos: ajustar os níveis de prejuízo e de prejuízo dinâmicos com base na volatilidade do mercado ou nas tendências dos preços para otimizar a relação risco/recompensa.
Filtros de tendência: Incorporar indicadores técnicos adicionais, como o ADX, para confirmar a força da tendência e filtrar sinais falsos em mercados instáveis.
Adaptação multi-instrumentos: refinar a estratégia para se adaptar a diferentes instrumentos futuros e características do mercado.
Gestão de fundos: introduzir regras de gestão de fundos mais sofisticadas, como o dimensionamento das posições e o controlo do risco, para reforçar a robustez da estratégia.
A estratégia de negociação de média móvel é uma estratégia simples e fácil de entender que capta as tendências de mercado em alta, analisando a posição do preço em relação às médias móveis de diferentes períodos. A estratégia incorpora níveis de stop-gain e stop-loss de ponto fixo e fecha automaticamente todas as posições em um momento específico todos os dias para gerenciar o risco. No entanto, a estratégia pode ter um desempenho inferior em mercados agitados e enfrentar desafios como otimização de parâmetros e risco de deslizamento.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Médias Móveis de MarcosJR", overlay=true) // Inputs para data inicial e final start_year = input.int(2020, title="Ano Inicial") start_month = input.int(1, title="Mês Inicial") start_day = input.int(1, title="Dia Inicial") end_year = input.int(2020, title="Ano Final") end_month = input.int(12, title="Mês Final") end_day = input.int(31, title="Dia Final") // Convertendo dia, mês e ano para timestamp start_date = timestamp(start_year, start_month, start_day, 00, 00) end_date = timestamp(end_year, end_month, end_day, 23, 59) // Condição para verificar se a data está dentro do intervalo especificado date_within_range = true // Parâmetros para os períodos das médias móveis ma_short_period = input.int(9, title="MA Curta") ma_medium_period = input.int(21, title="MA Média") ma_long_period = input.int(200, title="MA Longa") // Definindo médias móveis ma_short = ta.sma(close, ma_short_period) ma_medium = ta.sma(close, ma_medium_period) ma_long = ta.sma(close, ma_long_period) // Plotando as médias móveis no gráfico com espessura aumentada plot(ma_short, color=color.blue, title="MA Curta", linewidth=2) plot(ma_medium, color=color.orange, title="MA Média", linewidth=2) plot(ma_long, color=color.red, title="MA Longa", linewidth=2) // Verificando se o preço está acima das médias móveis above_ma_long = close > ma_long above_ma_medium = close > ma_medium // Verificando se o preço tocou na média móvel curta touch_ma_short = ta.crossover(close, ma_short) // Condições de compra buy_condition = date_within_range and above_ma_long and above_ma_medium and touch_ma_short // Sinais de entrada e saída de compra var float entry_price = na if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento entry_price := close // Define o preço de entrada ao comprar // Parâmetros para o tamanho do stop gain e stop loss em pontos stop_gain_points = input.int(100, title="Stop Gain (pontos)", minval=1) stop_loss_points = input.int(100, title="Stop Loss (pontos)", minval=1) // Calcular o preço de saída alvo (Stop Gain) e de stop loss target_price = entry_price + stop_gain_points * syminfo.mintick stop_loss_price = entry_price - stop_loss_points * syminfo.mintick // Sair da operação de compra quando o preço atingir o stop gain ou stop loss if (strategy.position_size > 0) strategy.exit("Venda", "Compra", limit=target_price, stop=stop_loss_price) // Sinais de entrada de compra if (buy_condition and strategy.opentrades == 0) // Verifica se não há operações em andamento strategy.entry("Compra", strategy.long) // Plotando setas de compra plotshape(series=buy_condition, title="Sinal de Compra", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) // Função para verificar se é 17:00 do mesmo dia is_17_oclock_same_day = hour == 17 and minute == 0 and hour[1] < 17 // Sair de todas as operações às 17:00 do mesmo dia if (is_17_oclock_same_day) strategy.close_all()