Esta estratégia combina o sistema de cruzamento da média móvel e o indicador MACD para implementar uma estratégia de negociação automatizada que vai longo em períodos de tendência e tira lucro / pára em inversões de tendência.
A estratégia é baseada principalmente na combinação do sistema de cruzamento da média móvel e do indicador MACD. Especificamente, ela vai longa quando a média móvel de curto prazo cruza a média móvel de longo prazo e vai curta quando a média móvel de curto prazo cruza abaixo da média móvel de longo prazo.
Ao mesmo tempo, o indicador MACD é usado para confirmar sinais de negociação. Somente quando a linha MACD DIFF cruza a linha DEA, um sinal longo será acionado. E uma vez que a linha DIFF cruza abaixo da linha DEA, a posição longa será fechada para um stop loss.
Além disso, o RSI é utilizado para evitar um curto-circuito excessivo, com uma posição curta iniciada apenas quando o RSI está abaixo de 30%.
Para os stop losses, a estratégia adota um método de trailing stop de percentagem fixa, com o stop loss longo definido a 1% abaixo do preço de entrada e o stop loss curto definido a 1% acima do preço de entrada.
A maior vantagem desta estratégia é usar o sistema de média móvel para determinar a direção da tendência principal, em seguida, usar o indicador MACD para sinais de entrada, o que pode efetivamente filtrar falhas.
Além disso, o stop loss porcentual fixo e a tomada de lucro móvel ajudam a manter as perdas dentro de limites aceitáveis, garantindo lucros cedo quando possível.
Os principais riscos desta estratégia são:
O sistema de cruzamento da média móvel tem problemas de atraso, o que pode levar a entrada atrasada e falta de melhores pontos de entrada.
O indicador MACD é propenso a gerar sinais falsos. Outros filtros, como KDJ, podem ser adicionados.
O stop loss de percentagem fixa às vezes não pode sair em tempo hábil.
A estratégia pode ter grandes reduções, podendo o dimensionamento das posições ser reduzido para mitigar o risco.
A estratégia só é de longa duração e não pode beneficiar de tendências descendentes.
A estratégia pode ser melhorada nos seguintes aspectos:
Otimizar os parâmetros de MA para sinais mais precisos.
Para efeitos de avaliação do risco, a instituição deve avaliar se o risco de reestruturação da posição em risco é reduzido.
Testar métodos dinâmicos de stop loss, como trailing stops e ATR stops, para controlar melhor os riscos.
Adicionar mecanismos de curto prazo para que a estratégia possa lucrar com tendências de queda.
Otimizar o tamanho das posições e a gestão de fundos para reduzir a retirada máxima.
Teste de desempenho em diferentes produtos e classes de ativos para ampliar a aplicabilidade.
Incorporar algoritmos de aprendizagem de máquina para otimizar automaticamente os parâmetros e reduzir a intervenção manual.
Esta estratégia combina os pontos fortes do sistema de crossover de média móvel e do indicador MACD para alta lucratividade. Melhorias adicionais no ajuste de parâmetros, filtros adicionais, mecanismos de stop loss e mecanismos de curto prazo podem melhorar a estabilidade e reduzir os drawdowns. A incorporação de aprendizado de máquina também pode expandir a aplicabilidade.
/*backtest start: 2023-10-16 00:00:00 end: 2023-10-23 00:00:00 period: 2m basePeriod: 1m 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/ // © Toxic_Cat_ //@version=5 // strategy("MA_50_200_CROSS", overlay=true, margin_long=100, margin_short=100) EMA21 = ta.ema(close, 21) EMA100 = ta.ema(close, 100) [macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) plot(EMA21) plot(EMA100, color = color.orange) openLong = ta.crossover(EMA21, EMA100) and macdLine > signalLine openShort = ta.crossunder(EMA21, EMA100) and ta.rsi(close, 14) <= 33 crossunderMACD = ta.crossunder(macdLine, signalLine) if (strategy.opentrades < 1) if openLong strategy.entry("L",strategy.long, 1) if openShort strategy.entry("S",strategy.short, 1) // slose long // if ((strategy.opentrades.entry_price(0) + strategy.opentrades.entry_price(0)*0.03) <= open) // strategy.exit("profit L", "L", limit = close) // else if strategy.opentrades.entry_price(0) - strategy.opentrades.entry_price(0)*0.01 >= open or crossunderMACD // strategy.exit("loss L", "L", stop = close) // slose short // if (strategy.opentrades.entry_price(0) - strategy.opentrades.entry_price(0)*0.03) >= open // strategy.exit("profit S", "S", limit = (strategy.opentrades.entry_price(0) - strategy.opentrades.entry_price(0)*0.03)) // else if strategy.opentrades.entry_price(0) + strategy.opentrades.entry_price(0)*0.01 <= open // strategy.exit("loss S", "S", stop = (strategy.opentrades.entry_price(0) + strategy.opentrades.entry_price(0)*0.01))