A estratégia de negociação de média móvel dupla gera sinais de negociação calculando médias móveis rápidas e lentas e observando cruzes. Quando a média móvel rápida cruza acima da média móvel lenta, uma posição longa é tomada. Quando a média móvel rápida cruza abaixo da média móvel lenta, uma posição curta é tomada.
A estratégia define primeiro os comprimentos da média móvel rápida maFastLength e da média móvel lenta maSlowLength. Em seguida, calcula a média móvel rápida fastMA e a média móvel lenta slowMA. A média móvel rápida reage mais rapidamente às mudanças de preço e é usada para julgar a tendência atual, enquanto a média móvel lenta reage mais lentamente e é usada para determinar a direção da tendência.
Quando a média móvel rápida cruza acima da média móvel lenta, um sinal de entrada longo goLong() é gerado.
A estratégia pode ser definida como apenas longa, apenas curta ou permitir tanto negociações longas como curtas.
No modo longo, as posições longas são inseridas no sinal goLong() e retiradas no sinal killLong().
No modo apenas curto, as posições curtas são inseridas no sinal killLong() e saem no sinal goLong().
No modo de troca, as posições longas são inseridas no goLong ((), fechadas e revertidas para curto no killLong (().
A estratégia também inclui stop loss, trailing stop, mensagens e outros recursos opcionais.
Simples e fáceis de implementar.
Flexibilidade para ir longo, curto ou ambos.
Funções opcionais de stop loss e trailing stop.
Mensagens personalizáveis para alertar negócios.
Sensível às alterações de tendência no mercado.
Os parâmetros ajustáveis adaptam-se aos diferentes mercados.
Pode gerar trocas excessivas em mercados agitados ou variáveis.
Lento para reagir a notícias repentinas.
A selecção de parâmetros afeta o desempenho da estratégia.
Deve seguir os sinais estritamente, evitar negociações discricionárias.
Os custos de negociação podem corroer os lucros se não forem considerados.
Adicione filtros como o RSI para evitar sinais falsos.
Implementar a otimização de parâmetros para encontrar as melhores configurações.
Use paradas dinâmicas para bloquear lucros e ajustar.
Incorporar aprendizado de máquina para ajudar a previsão de tendências.
Otimizar a mensagem para os hábitos comerciais individuais.
A estratégia de média móvel dupla é relativamente simples e útil para capturar tendências fortes. No entanto, deve-se tomar cuidado para evitar problemas em ambientes de baixa tendência. Parâmetros de ajuste fino e adição de indicadores ou melhorias auxiliares podem melhorar ainda mais a robustez e a adaptabilidade.
/*backtest start: 2022-10-20 00:00:00 end: 2023-10-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // === Inputs === // short ma maFastSource = input(defval=close, title="Fast MA Source") maFastLength = input(defval=3, title="Fast MA Period", minval=1) // long ma maSlowSource = input(defval=close, title="Slow MA Source") maSlowLength = input(defval=9, title="Slow MA Period", minval=1) // Trade direction shorting = input(defval=false, title="Short only?") longonly = input(defval=true, title="Long only?") swapping = input(defval=false, title="Swap orders?") // risk management useStop = input(defval=false, title="Use Initial Stop Loss?") slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1) useTS = input(defval=false, title="Use Trailing Stop?") tslPoints = input(defval=120, title="Trail Points", minval=1) useTSO = input(defval=false, title="Use Offset For Trailing Stop?") tslOffset = input(defval=20, title="Trail Offset Points", minval=1) // Messages for buy and sell message_long_entry = input("Long entry message", title="Long entry message") message_long_exit = input("Long exit message", title="Long exit message") message_short_entry = input("Short entry message", title="Short entry message") message_short_exit = input("Short exit message", title="Short exit message") // Calculate start/end date and time condition startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time) finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time) time_cond = true // === Vars and Series === fastMA = sma(maFastSource, maFastLength) slowMA = sma(maSlowSource, maSlowLength) plot(fastMA, color=color.blue) plot(slowMA, color=color.purple) goLong() => crossover(fastMA, slowMA) killLong() => crossunder(fastMA, slowMA) // Long only if longonly strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit) // Short only if shorting strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit) // Order Swapping if swapping strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) if useStop strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit) strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)