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.
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).
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.
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.
Esta estratégia pode ser otimizada a partir dos seguintes aspectos:
Ensaiar diferentes combinações de parâmetros para encontrar os parâmetros ideais;
Adicionar condições de filtragem para evitar sinais inválidos;
Aplicar algoritmos de stop loss adaptativos para acompanhar o mercado;
Incorporar outros indicadores para avaliar a força da tendência, evitando mercados de gama;
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.
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")