
Esta estratégia usa o cruzamento de duas médias móveis como sinal de negociação e filtra em combinação com o indicador de amplitude BB e o indicador de energia dinâmica personalizado, com o objetivo de aumentar a confiabilidade do sinal de cruzamento MA e reduzir o falso sinal.
O EMA de 50 ciclos e o SMA de 200 ciclos são usados para formar o sinal de forquilha.
Quando o preço está em alta, o requisito de que o preço esteja acima da linha de 200 dias e o valor do indicador de energia dinâmica personalizado seja menor que 25 gera um sinal de compra.
Quando o preço está em uma tendência de queda, solicite que o preço esteja abaixo da linha de 200 dias e o valor do indicador de energia dinâmica personalizado seja maior que 75 para gerar um sinal de venda.
O indicador de energia elétrica personalizado é mapeado para a faixa de 0 a 100 de acordo com a distância entre a linha central do BB e a linha ascendente e descendente.
O indicador de energia dinâmica pode refletir informações sobre a posição do preço em relação à amplitude de onda, filtrando os valores de limiar, reduzindo efetivamente o falso cruzamento.
A EMA e a SMA são usadas para capturar as tendências de linha média e longa.
Aumentar os indicadores de energia dinâmica para filtragem, maior confiabilidade e redução de falsos sinais.
A distância entre o BB e o BB reflete a intensidade de oscilação, combinada com estatísticas retrospectivas para processamento padronizado, evitando a dependência de parâmetros.
Pode-se personalizar os ciclos EMA e SMA e os limites do indicador de energia dinâmica para adaptar-se a diferentes condições de mercado.
A estratégia é clara e fácil de entender, os parâmetros de ajuste são amplos e práticos.
A EMA e a SMA estão atrasadas e podem ter perdido oportunidades de curta duração.
O cruzamento de duas linhas é essencialmente uma estratégia de acompanhamento de tendências e não é adequado para situações de choque.
O valor-limite do indicador de energia dinâmica precisa ser repetidamente testado para determinar os parâmetros apropriados, existindo o risco de otimização da curva.
A estratégia de linha média de grande ciclo, com ganhos relativamente estáveis, mas com ganhos absolutos provavelmente limitados.
Pode ser apropriadamente reduzido o ciclo da linha média, ou adicionar outros indicadores auxiliares de julgamento, para melhorar a adaptabilidade da estratégia.
Teste diferentes combinações de equilíbrio para encontrar o melhor parâmetro.
Adicionar outros critérios de avaliação, como MACD, KD e outros critérios auxiliares
Parâmetros de otimização de indicadores de energia dinâmica, como ciclo de retrocesso, alcance de mapeamento, etc.
Adição de um mecanismo de stop loss para controlar o risco.
Os parâmetros de diferentes variedades não são consistentes, então pode ser considerada a extração de características de aprendizado de máquina.
Adicionar indicadores de potência para evitar sinais de cruzamento desnecessários.
Esta estratégia integra o acompanhamento de tendências de ciclo e o duplo filtro de indicadores de energia personalizados em um só, com alta confiabilidade e grande valor no campo. Otimizando os parâmetros e reforçando os indicadores de tecnologia auxiliar, espera-se um desempenho melhor. A estratégia é nova e pode fornecer exemplos para outras estratégias de acompanhamento de tendências, sendo uma adição valiosa ao arsenal de estratégias de negociação quantitativa.
/*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