A estratégia de cruzamento de médias móveis entrelaçadas

Autora:ChaoZhang, Data: 2024-02-19 14:21:10
Tags:

img

Resumo

Esta estratégia gera sinais de negociação baseados no cruzamento de média móvel simples e média móvel ponderada, combinados com stop loss e take profit para gerenciar posições.

Estratégia lógica

A lógica principal é calcular duas médias móveis com períodos diferentes, uma é a média móvel simples de 9 dias e a outra é a média móvel ponderada de 21 dias. Quando o SMA de curto período de 9 dias cruza acima do WMA de longo período de 21 dias, um sinal de compra é gerado. Quando a linha de curto período cruza abaixo da linha de longo período, um sinal de venda é gerado.

Após receber o sinal, as ordens são colocadas de acordo com as taxas de stop loss e take profit definidas. Por exemplo, se a taxa de stop loss for definida em 5%, então o preço de stop loss será definido em 95% do preço de entrada. Se a taxa de take profit for de 5%, então o preço de take profit será definido em 105% do preço de entrada. Isso realiza a fusão de fatores dinâmicos (crossover média móvel que decide o tempo de entrada e saída) e fatores estáticos (ratios de stop loss e take profit fixos).

Análise das vantagens

A estratégia combina indicadores técnicos dinâmicos e parâmetros de estratégia estáticos, possuindo os benefícios de sistemas dinâmicos e estáticos. Os indicadores técnicos podem capturar dinamicamente as características do mercado, o que é benéfico para capturar tendências.

Em comparação com sistemas puramente dinâmicos, esta estratégia é mais robusta na gestão de posições, o que reduz o impacto de decisões irracionais. Em comparação com sistemas puramente estáticos, esta estratégia é mais flexível nas seleções de entrada, o que se adapta melhor às mudanças do mercado. Portanto, esta estratégia tem boa robustez geral e lucratividade.

Análise de riscos

Os riscos desta estratégia vêm principalmente de dois aspectos. Primeiro, a possibilidade de sinais errados das médias móveis.

Em segundo lugar, o risco de que o stop loss fixo e o take profit não possam se adaptar a condições extremas de mercado.

As contra-medidas são: em primeiro lugar, evitar nós de tempo chave para reduzir a probabilidade de sinais errados; em segundo lugar, habilitar algoritmos de stop loss adaptativos de acordo com a volatilidade do mercado e eventos especiais, fazendo com que o stop loss e o take profit se ajustem com o mercado.

Orientações de otimização

Esta estratégia pode ser otimizada a partir dos seguintes aspectos:

  1. Ensaiar diferentes combinações de parâmetros para encontrar os parâmetros ideais;

  2. Adicionar condições de filtragem para evitar sinais inválidos;

  3. Aplicar algoritmos de stop loss adaptativos para acompanhar o mercado;

  4. Incorporar outros indicadores para avaliar a força da tendência, evitando mercados de gama;

  5. Utilize métodos de aprendizagem de máquina para otimizar automaticamente parâmetros.

Através de testes de parâmetros, adição de filtros, melhoria de paradas, avaliação de tendências, etc., a estabilidade e rentabilidade da estratégia podem ser ainda melhoradas.

Resumo

A estratégia combina com sucesso indicadores dinâmicos e parâmetros estáticos, equilibrando flexibilidade e robustez. Em comparação com estratégias dinâmicas e estáticas puras, esta estratégia tem um desempenho melhor em geral.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("WMA vs MMA Crossover Strategy with SL/TP", shorttitle="WMA_MMA_Cross_SL_TP", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Définition des périodes pour les moyennes mobiles
wmaLength = input.int(9, title="WMA Length")
mmaLength = input.int(21, title="MMA Length")

// Paramètres de Stop Loss et Take Profit en pourcentage
stopLossPercentage = input.float(5, title="Stop Loss (%)") / 100
takeProfitPercentage = input.float(5, title="Take Profit (%)") / 100

// Calcul des moyennes mobiles
wmaValue = ta.wma(close, wmaLength)
mmaValue = ta.sma(close, mmaLength)

// Conditions pour les signaux d'achat et de vente
buySignal = ta.crossover(wmaValue, mmaValue)
sellSignal = ta.crossunder(wmaValue, mmaValue)

// Génération des ordres en fonction des signaux
if buySignal
    strategy.entry("Buy", strategy.long)
    strategy.exit("Exit Buy", "Buy", stop=strategy.position_avg_price * (1 - stopLossPercentage), limit=strategy.position_avg_price * (1 + takeProfitPercentage))

if sellSignal
    strategy.entry("Sell", strategy.short)
    strategy.exit("Exit Sell", "Sell", stop=strategy.position_avg_price * (1 + stopLossPercentage), limit=strategy.position_avg_price * (1 - takeProfitPercentage))

// Affichage des moyennes mobiles sur le graphique
plot(wmaValue, color=color.blue, title="WMA")
plot(mmaValue, color=color.red, title="MMA")

// Affichage des signaux sur le graphique pour référence
plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")
plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")


Mais.