A estratégia de cruzamento de média móvel dupla é uma estratégia de análise técnica muito clássica e comumente usada. Esta estratégia utiliza o cruzamento de uma média móvel mais rápida e uma média móvel mais lenta como os sinais de negociação para compra e venda. Quando a média móvel mais rápida cruza acima da média móvel mais lenta de baixo, um sinal de compra é gerado. Quando a média móvel mais rápida cruza abaixo da média móvel mais lenta de cima, um sinal de venda é gerado.
As partes-chave do código de estratégia incluem:
Definir o comprimento e o tipo das médias móveis rápidas e lentas: a média móvel rápida tem um período de 5 anos, a média móvel lenta tem um período de 21 anos, ambas utilizando a média móvel simples.
Calcular as MAs rápidas e lentas: utilizando a função sma para calcular as médias móveis simples de 5 e 21 períodos.
Traçar o gráfico: traçar as linhas de tendência dos MA rápidos e lentos.
Definir as regras de entrada e saída: comprar quando a MA rápida ultrapassa a MA lenta, vender quando a MA rápida ultrapassa a MA lenta.
Execução de transacções: utilizar as funções longa e curta da estratégia para executar automaticamente transacções quando as condições forem cumpridas.
A chave desta estratégia é usar médias móveis de diferentes períodos para formar os MAs rápidos e lentos, e usar seus crossovers como sinais de negociação. O MA rápido capta as mudanças de preço mais rapidamente, enquanto o MA lento reflete melhor a tendência de longo prazo. O crossover do MA rápido acima do MA lento indica uma ruptura ascendente, que é um sinal de compra. E o crossover abaixo é um sinal de venda. A lógica desta estratégia é simples e fácil de implementar.
A estratégia dupla de cruzamento das médias móveis tem as seguintes vantagens:
Princípio simples, fácil de entender, adequado para iniciantes.
Segue a tendência do preço, um pequeno recuo.
Frequência de negociação moderada, evitando o excesso de negociação.
Parâmetros personalizáveis, flexíveis para se adaptarem às alterações do mercado.
Fácil de otimizar e encontrar conjuntos de parâmetros pessoais adequados.
Pode definir o stop loss para controlar o risco.
Pode ser utilizado em vários mercados, alta aplicabilidade.
Pode ser combinado com outros indicadores para melhorar o desempenho.
Há também alguns riscos com esta estratégia:
A reação retardada quando a tendência é forte, pode perder o melhor momento de entrada.
Mais sinais falsos durante os mercados limitados ao intervalo, podem adicionar filtros para evitar trocas erradas.
Muitos negócios podem afetar a rentabilidade, podem alargar a distância de MA para reduzir os crossovers.
Difícil de determinar a tendência, risco de negociação contra-tendência.
A otimização de parâmetros requer dados históricos suficientes, risco de sobreajuste com novos produtos.
Indicador único suscetível a factores externos, o desempenho pode ser instável, pode ser combinado com outros indicadores para verificação.
Existem algumas formas de otimizar ainda mais a estratégia de dupla MA:
Teste diferentes comprimentos de MA rápidos e lentos para encontrar os parâmetros ideais para produtos comerciais específicos.
Adicione filtros como volumes de negociação, ATR stop loss para reduzir oportunidades inferiores.
Combinar indicadores de impulso para confirmar sinais de negociação e evitar falhas.
Otimizar as estratégias de stop loss para evitar saídas prematuras ou tardias.
Incorporar indicadores de tendência e onda para permitir a negociação de tendência e contra-tendência.
Usar MAs adaptativas para ajustar parâmetros com base nas condições do mercado e não em períodos fixos.
Utilizar combinações de parâmetros para diferentes sessões e características de mercado.
Realizar otimização em tempo real através de algoritmos de aprendizagem de máquina para melhorar continuamente os parâmetros.
Com sua lógica simples e facilidade de implementação, a estratégia de cruzamento de média móvel dupla tornou-se uma das estratégias de análise técnica mais essenciais e amplamente utilizadas. Segue a tendência de preço com retração controlada e risco aceitável. Mas também há um enorme potencial de otimização, por ajuste de parâmetros, incorporando outros indicadores e algoritmos automatizados, sua aplicabilidade e desempenho podem ser melhorados.
/*backtest start: 2023-09-26 00:00:00 end: 2023-10-26 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // strategy("Stochastic Strategy of BiznesFilosof", shorttitle="SS of BiznesFilosof", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.15, pyramiding=0) //Period startY = input(title="Start Year", defval = 2011) startM = input(title="Start Month", defval = 1, minval = 1, maxval = 12) startD = input(title="Start Day", defval = 1, minval = 1, maxval = 31) finishY = input(title="Finish Year", defval = 2050) finishM = input(title="Finish Month", defval = 12, minval = 1, maxval = 12) finishD = input(title="Finish Day", defval = 31, minval = 1, maxval = 31) //finish = input(2019, 02, 28, 00, 00) timestart = timestamp(startY, startM, startD, 00, 00) timefinish = timestamp(finishY, finishM, finishD, 23, 59) window = true // Lenghth strategy length1 = input(21, minval=1), smoothK1 = input(3, minval=1), smoothD1 = input(3, minval=1) //length2 = input(5, minval=1), smoothK2 = input(1, minval=1), smoothD2 = input(1, minval=1) inh0 = input(title="Bottom Line", defval = 14, minval=0), inh1 = input(title="Upper Line", defval = 86, minval=0) k1 = sma(stoch(close, high, low, length1), smoothK1) d1 = sma(k1, smoothD1) plot(k1, color=blue) plot(d1, color=red) //k2 = sma(stoch(close, high, low, length2), smoothK2) //d2 = sma(k2, smoothD2) //plot(k2, color=orange) h1 = hline(inh1) h0 = hline(inh0) fill(h0, h1, color = aqua, transp=90) //open strategy.entry("LongEntryID", strategy.long, comment="LONG", when = crossover(k1, d1) and crossover(k1, inh0) and window) strategy.entry("ShortEntryID", strategy.short, comment="SHORT", when = crossunder(k1, d1) and crossunder(k1, inh1) and window) if crossunder(k1, d1) and crossunder(k1, inh1) and strategy.position_size > 0 strategy.close_all() if crossover(k1, d1) and crossover(k1, inh0) and strategy.position_size < 0 strategy.close_all()