Esta estratégia é uma estratégia de negociação de seguimento de tendências e ruptura baseada em médias móveis exponenciais (EMA) de vários prazos.
Calcular 5 EMA com períodos de 12, 15, 18, 21 e 24 respectivamente.
Regra de classificação da EMA: EMA12 > EMA15 > EMA18 > EMA21 > EMA24 como sinal de compra; EMA12 < EMA15 < EMA18 < EMA21 < EMA24 como sinal de venda.
Ativar sinais de negociação apenas após a data de início definida pelo utilizador.
Entrada longa quando o sinal de compra é acionado; entrada curta quando o sinal de venda é acionado.
A estratégia forma um canal de tendência usando vários EMAs para determinar a direção da tendência com base na relação entre as faixas de canal. Os períodos EMA são definidos perto para serem mais sensíveis aos sinais de ruptura, evitando também ser enganado pelo ruído do mercado de curto prazo.
Forte capacidade de identificação de tendências utilizando múltiplos EMAs como canal de tendências.
A fixação do período EMA próximo torna-o sensível aos sinais de ruptura da tendência e capaz de detectar as tendências de médio a longo prazo em tempo útil.
A data de início personalizável proporciona flexibilidade na utilização.
Gestão de capital personalizável para controlo por tamanho da ordem.
Regras de negociação claras e simples, adequadas para seguir tendências.
As EMAs têm inerentemente um efeito de atraso, podendo perder as fortes oscilações de preços a curto prazo.
A negociação de breakout é propensa a ficar presa, exigindo um stop loss razoável.
Possíveis perdas enormes quando a tendência se inverter.
Precisa escolher produtos adequados, não aplicáveis a estoques extremamente voláteis.
Gestão e otimização dos riscos correspondentes:
Ajustar os parâmetros da EMA, otimizar a combinação de períodos.
Adicionar outros indicadores para validação da direção da tendência.
Configure o stop loss adequado para controlo por perda de ordem.
Adicione outros indicadores como MACD, KDJ para melhorar o desempenho da estratégia.
Adicionar condição de volume de negociação para evitar uma falha de ruptura.
Otimizar os períodos de EMA para encontrar a melhor combinação.
Parar a negociação num intervalo de tempo específico para evitar períodos de turbulência no mercado.
Usar métodos de aprendizagem de máquina para otimizar dinamicamente os períodos e parâmetros da EMA.
Em geral, esta é uma estratégia típica de seguir tendências. Capitaliza as vantagens das EMAs formando um canal de negociação usando várias EMAs e gerando sinais de negociação quando o preço sai do canal. Os prós são regras de negociação simples e claras que facilitam o seguimento de tendências de médio a longo prazo. As desvantagens são sensibilidade ao ruído do mercado de curto prazo e efeito de atraso inerente. Ajuste adequado de parâmetros e otimizações como adicionar outras ferramentas de assistência podem melhorar a estabilidade e o desempenho.
/*backtest start: 2024-01-26 00:00:00 end: 2024-02-25 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Scalping Strategy - EMA", shorttitle="EMA Scalp", overlay=true) // User input for start date startDateInput = input(title="Start Date", defval=timestamp("2024-02-01")) // Calculate EMAs ema_12 = ta.ema(close, 12) ema_15 = ta.ema(close, 15) ema_18 = ta.ema(close, 18) ema_21 = ta.ema(close, 21) ema_24 = ta.ema(close, 24) // Plot EMAs plot(ema_12, color=color.red, title="EMA 12") plot(ema_15, color=color.orange, title="EMA 15") plot(ema_18, color=color.yellow, title="EMA 18") plot(ema_21, color=color.green, title="EMA 21") plot(ema_24, color=color.blue, title="EMA 24") // Define a start date for the strategy based on user input isAfterStartDate = true // Visualize the isAfterStartDate condition bgcolor(isAfterStartDate ? color.new(color.green, 90) : na, title="After Start Date") // Entry conditions buy_condition = (ema_12 > ema_15) and (ema_15 > ema_18) and (ema_18 > ema_21) and (ema_21 > ema_24) and isAfterStartDate sell_condition = (ema_12 < ema_15) and (ema_15 < ema_18) and (ema_18 < ema_21) and (ema_21 < ema_24) and isAfterStartDate // Execute trades using conditional blocks if (buy_condition) strategy.entry("Buy", strategy.long) if (sell_condition) strategy.entry("Sell", strategy.short)