Estratégia de inversão de tendência baseada em médias móveis

Autora:ChaoZhang, Data: 2024-02-21 17:03:31
Tags:

img

Resumo

A ideia principal desta estratégia é negociar pullbacks de curto prazo ao longo da direção da tendência de longo prazo. Especificamente, a média móvel simples de 200 dias é usada para determinar a direção da tendência de longo prazo, e a média móvel simples de 10 dias é usada para determinar a direção da tendência de curto prazo. Quando o preço está acima da linha de 200 dias, é um mercado de touros. Quando o preço está abaixo da linha de 200 dias, é um mercado de ursos. Em um mercado de touros, vá longo quando o preço cai para a linha de 10 dias. Em um mercado de ursos, vá curto quando o preço sobe para a linha de 10 dias.

Estratégia lógica

Esta estratégia usa a média móvel simples de 200 dias e a média móvel simples de 10 dias para determinar a tendência do mercado. Quando o preço cruza acima da linha de 200 dias, considera-se que está entrando em um mercado de touros. Quando o preço cruza abaixo da linha de 200 dias, considera-se que está entrando em um mercado de ursos. Em um mercado de touros, se o preço cair em torno da linha de 10 dias, significa encontrar uma correção de curto prazo. Neste momento, vá longo, visando a continuação da tendência de alta de longo prazo. Em um mercado de ursos, se o preço subir em torno da linha de 10 dias, significa encontrar um rebote de curto prazo. Neste momento, vá curto, visando a continuação da tendência de baixa de longo prazo.

Especificamente, quando as seguintes condições forem atendidas, vá longo para entrar no mercado: o preço está acima da linha de 200 dias, o preço está abaixo da linha de 10 dias e não houve posição anterior. Quando as seguintes condições forem atendidas, feche a posição para sair do mercado: o preço está acima da linha de 10 dias e houve uma posição longa anterior. Para evitar grandes perdas, um stop loss FAILSAFE é definido. Se o retração do ponto mais alto exceder 10%, imediatamente pare a perda para sair.

Pode-se ver que a lógica de negociação desta estratégia é baseada principalmente na cruz de ouro e cruz de morte das médias móveis.

Análise das vantagens

A maior vantagem desta estratégia é o acompanhamento de tendências de baixo custo para obter retornos excessivos.

  1. A utilização de uma combinação de médias móveis de longo prazo e de curto prazo para determinar a direção das tendências primárias e secundárias pode efetivamente bloquear oportunidades de tendência de médio e longo prazo e evitar ser enganado por movimentos de curto prazo do mercado.

  2. Ao entrar com base em retrações de curto prazo, o custo de entrada pode ser minimizado para obter um potencial de lucro relativamente elevado.

  3. O mecanismo de stop loss FAILSAFE pode controlar eficazmente perdas individuais para proteger os fundos da conta.

  4. A autorização de saídas de rastreamento de tendências pode aproveitar plenamente as oportunidades de tendência de médio e longo prazo para os excessos de rendimentos alfa.

  5. A adoção de um método de negociação totalmente automatizado evita o impacto emocional subjetivo e facilita a implementação da estratégia.

Análise de riscos

Os principais riscos desta estratégia são:

  1. Risco de sobreajuste do backtest: as condições reais do mercado podem diferir dos dados históricos, resultando em um desempenho comercial reduzido.

  2. A probabilidade de reversão dos preços perto das médias móveis é relativamente grande, o que pode facilmente conduzir a pequenas perdas acumuladas.

  3. Risco de reversão de tendência: são comuns reversões súbitas das tendências a médio e longo prazo, que podem facilmente conduzir a perdas relativamente elevadas quando se detém posições.

As contra-medidas são:

  1. Aumentar o tamanho da amostra e utilizar mais dados históricos para os ensaios de robustez para garantir resultados fiáveis.

  2. Otimizar os parâmetros ajustando a combinação de parâmetros do sistema de média móvel para garantir a qualidade do sinal.

  3. Ampliar as linhas de stop loss adequadamente para permitir algumas retrações de preços para evitar stop losses excessivamente sensíveis.

Orientações de otimização

Esta estratégia pode ser melhorada nos seguintes aspectos:

  1. Adicionar condições de filtragem, tais como filtragem de volume, para reduzir eficazmente as negociações desnecessárias causadas por falsas rupturas.

  2. Incorporar outros indicadores, como o KDJ e o MACD, para formar sinais combinados para melhorar a qualidade dos sinais comerciais.

  3. Testar diferentes períodos de detenção e otimizar estratégias de tomada de lucro e stop loss para melhorar ainda mais o rácio Sharpe, etc.

  4. Ajustar dinamicamente os parâmetros com base nas condições do mercado para formar um mecanismo de otimização de parâmetros adaptativo para tornar a estratégia mais robusta.

  5. Adicionar módulos de negociação algorítmicos usando aprendizado de máquina, etc. para gerar automaticamente sinais de negociação para reduzir a intervenção humana.

Resumo

A lógica geral desta estratégia é clara e fácil de implementar para rastreamento de baixo custo de tendências de médio e longo prazo para alcançar um alfa estável. Mas também há riscos de ser pego no lado errado da tendência, o que requer mais otimização para melhorar a robustez.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
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/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 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("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +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.