Esta estratégia utiliza os crossovers da média móvel como sinais de negociação, combinados com o indicador de volatilidade BB e um indicador de momento personalizado para filtragem, com o objetivo de melhorar a fiabilidade dos sinais de crossover da MA e reduzir os falsos sinais.
Use a EMA de 50 períodos e a SMA de 200 períodos para formar sinais de cruz de ouro e cruz de morte.
Quando o preço estiver em uma tendência de alta, exigir que o preço esteja acima da linha de 200 dias e o valor do indicador de impulso personalizado abaixo de 25 para gerar sinais de compra.
Quando o preço estiver em uma tendência de queda, exigir que o preço esteja abaixo da linha de 200 dias e o valor do indicador de impulso personalizado acima de 75 para gerar sinais de venda.
Indicador de momento personalizado mapeia a linha média e a distância da banda BB na faixa de 0-100 com base em máximos e mínimos históricos.
O indicador de impulso reflete a volatilidade relativa dos preços, a filtragem do limiar ajuda a reduzir os falsos crossovers.
Utilizar os pontos fortes da EMA e da SMA para captar tendências de médio e longo prazo.
O aumento da filtragem com indicador de momento melhora a fiabilidade e reduz os falsos sinais.
A distância de banda BB reflete a intensidade de volatilidade, a normalização histórica evita a dependência de parâmetros.
Períodos EMA, SMA e limiar de dinâmica personalizáveis, adaptáveis a diferentes ambientes de mercado.
Lógica simples com flexibilidade de otimização, forte praticidade.
A EMA e a SMA têm um efeito de atraso, podendo perder oportunidades de curto prazo.
A tendência segue uma natureza inadequada para os mercados de gama.
O limiar de momento requer backtesting iterativo para o parâmetro ideal, riscos de sobreajuste.
Os sistemas de longo prazo oferecem rendimentos absolutos constantes, mas potencialmente limitados.
Pode reduzir os períodos de MA ou adicionar indicadores complementares para melhorar a adaptabilidade.
Ensaiar diferentes combinações de MA para obter parâmetros ideais.
Adicionar indicadores complementares como MACD, KD para validação adicional.
Otimizar os parâmetros do indicador de impulso, como o período de retrospecção, o intervalo de mapeamento.
Incorporar o stop loss para controlar os riscos.
Ajustar os parâmetros específicos do símbolo utilizando a extração de recursos de aprendizagem automática.
Adicionar indicadores de volume para evitar sinais de cruzamento não razoáveis.
Esta estratégia combina os pontos fortes do seguimento de tendências de longo prazo e filtragem de limiar de impulso duplo para alta confiabilidade e valor prático. Outras melhorias são possíveis através da otimização de parâmetros e técnicas complementares. O conceito inovador fornece insights valiosos para outros sistemas de tendências. Uma adição valiosa à biblioteca de estratégias de negociação algorítmica.
/*backtest start: 2023-10-26 00:00:00 end: 2023-10-27 13:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false) // Inputs emaLength = input(20, "EMA Length") stdDevLength = input(2, "Standard Deviation Length") priceSource = close takeProfitPoints = input(1000, title="Take Profit (in Points)") stopLossPoints = input(2500, title="Stop Loss (in Points)") // Calculate EMA ema = ema(priceSource, emaLength) // Calculate Standard Deviation stdDev = stdev(priceSource, stdDevLength) // Calculate differences diff1 = (ema + stdDev) - ema diff2 = ema - (ema - stdDev) // Calculate min and max differences from last year lookbackPeriod = 504 // Number of trading days in a year minDiff1 = lowest(diff1, lookbackPeriod) maxDiff1 = highest(diff1, lookbackPeriod) minDiff2 = lowest(diff2, lookbackPeriod) maxDiff2 = highest(diff2, lookbackPeriod) // Map differences based on requirements mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1)) mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2)) // Combine mapped differences into a single line mappedLine = if close > ema mappedDiff1 else mappedDiff2 // Plot 'mappedLine' in the main chart area conditionally plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2) // Calculate the 50EMA and 200SMA ema50 = ema(close, 50) sma200 = sma(close, 200) // Plot the 50EMA and 200SMA on the main chart plot(ema50, color=color.blue, title="50 SMA", linewidth=2) plot(sma200, color=color.red, title="200 SMA", linewidth=2) // Initialize trade variables var bool waitingForBuy = na var bool waitingForSell = na var bool buyConditionMet = false var bool sellConditionMet = false if not sellConditionMet and crossunder(ema50, sma200) sellConditionMet := true waitingForBuy := false if sellConditionMet waitingForSell := true sellConditionMet := false if waitingForSell and close < sma200 and mappedLine > 75 strategy.entry("Sell", strategy.short) strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints) waitingForSell := false // Define the strategy conditions and execute trades if not buyConditionMet and crossover(ema50, sma200) buyConditionMet := true waitingForSell := false if buyConditionMet waitingForBuy := true buyConditionMet := false if waitingForBuy and close > sma200 and mappedLine < 25 strategy.entry("Buy", strategy.long) strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints) waitingForBuy := false