Este é um sistema de estratégia de negociação quantitativa baseado em cruzamento de média móvel e análise de volume. A estratégia toma decisões de negociação através de sinais de cruzamento de vários tipos de médias móveis (incluindo EMA, SMA e WMA), combinados com indicadores de volume. O sistema suporta configuração flexível de tipos e parâmetros de média móvel, ao mesmo tempo em que introduz a análise de volume como condição de confirmação de negociação para melhorar a confiabilidade.
A estratégia utiliza um sistema duplo de cruzamento de médias móveis como sinal de negociação principal, combinado com análise de volume como julgamento auxiliar:
Esta é uma estratégia de negociação quantitativa que combina teorias clássicas de análise técnica através de crossover de média móvel e análise de volume. O projeto da estratégia é razoável com forte praticidade e escalabilidade. Através da otimização de parâmetros e melhoria do módulo, a estabilidade e lucratividade da estratégia podem ser melhoradas. Recomenda-se realizar um backtesting completo antes da negociação ao vivo e ajustar os parâmetros de acordo com as características específicas do instrumento de negociação.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Cruzamento de Médias com Volume ☾︎ 𝔇𝔞𝔯𝔎 ✞︎ 𝔗𝔯𝔞𝔡𝔢𝔯 ☽︎", overlay=true) // Criação de opções no editor para selecionar o tipo de média móvel maType1 = input.string(title="Tipo de Média Móvel 1", defval="EMA", options=["SMA", "EMA", "WMA"]) maType2 = input.string(title="Tipo de Média Móvel 2", defval="EMA", options=["SMA", "EMA", "WMA"]) // Função para selecionar a média móvel de acordo com o tipo escolhido getMovingAverage(maType, src, length) => if maType == "SMA" ta.sma(src, length) else if maType == "EMA" ta.ema(src, length) else if maType == "WMA" ta.wma(src, length) else na // Parâmetros para o cálculo das médias móveis length1 = input.int(9, title="Período da Média 1") length2 = input.int(21, title="Período da Média 2") // Cálculo das médias móveis escolhidas ma1 = getMovingAverage(maType1, close, length1) ma2 = getMovingAverage(maType2, close, length2) // Parâmetro editável para o período da média de volume volLength = input.int(20, title="Período da Média de Volume") // Cálculo da média móvel do volume com período ajustável volSMA = ta.sma(volume, volLength) // Média móvel simples do volume // Cálculo da EMA de 200 períodos para visualizar a tendência primária ema200 = ta.ema(close, 200) // Condições para compra: ma1 cruza acima da ma2 + Volume acima da média de volume ajustável longCondition = ta.crossover(ma1, ma2) and volume > volSMA // Condições para venda: ma1 cruza abaixo da ma2 + Volume acima da média de volume ajustável shortCondition = ta.crossunder(ma1, ma2) and volume > volSMA // Executa a operação de compra if (longCondition) strategy.entry("Compra", strategy.long) // Executa a operação de venda if (shortCondition) strategy.entry("Venda", strategy.short) // Plotando as médias móveis no gráfico de preços plot(ma1, color=color.green, title="Média Móvel 1", linewidth=2) plot(ma2, color=color.red, title="Média Móvel 2", linewidth=2) // Plotando a EMA de 200 períodos para visualização da tendência de longo prazo plot(ema200, color=color.orange, title="EMA 200", linewidth=2) // Plotando a média de volume para visualização no painel inferior plot(volSMA, color=color.blue, title="Média de Volume", linewidth=2)