
Esta estrategia utiliza el cruce de dos medias móviles como señal de negociación y se filtra en combinación con el indicador de amplitud BB y el indicador de energía dinámica personalizado, con el objetivo de mejorar la fiabilidad de la señal de cruce MA y reducir la señal falsa.
Se utiliza una EMA de 50 ciclos y una SMA de 200 ciclos para formar la señal de la horca de oro.
Cuando el precio está en tendencia ascendente, se requiere que el precio esté por encima de la línea de 200 días y que el valor del indicador de energía dinámica personalizado sea menor a 25 para generar una señal de compra.
Cuando el precio está en una tendencia descendente, se requiere que el precio esté por debajo de la línea de 200 días y que el valor del indicador de energía dinámica personalizado sea mayor a 75 para generar una señal de venta.
Los indicadores de energía dinámica personalizados se mapean en el rango de 0-100 en función de la distancia entre la línea media BB y la línea ascendente y descendente. Se realiza un procesamiento de regresión mediante el valor de la distancia estadística máxima y mínima de retroceso.
El indicador de energía dinámica puede reflejar la información de la posición de la amplitud de onda relativa de los precios, configurar los valores de límite para filtrar, lo que reduce efectivamente el falso cruce.
Utiliza la ventaja de las EMA y SMA para capturar tendencias de línea media y larga.
Aumentar los indicadores de energía dinámica para filtrar, mayor fiabilidad y reducción de señales falsas.
La distancia de subida y bajada de BB refleja la fuerza de oscilación, combinada con estadísticas retrospectivas para un procesamiento estandarizado, evitando la dependencia de parámetros.
Se pueden personalizar los ciclos EMA y SMA y los valores mínimos del indicador de energía dinámica para adaptarse a diferentes entornos de mercado.
La estrategia es clara y fácil de entender, los parámetros de ajuste son amplios y prácticos.
La EMA y la SMA en sí mismas están retrasadas y pueden haber perdido oportunidades de corto plazo.
El cruce de dos líneas es una estrategia de seguimiento de tendencias que no es adecuada para una situación de crisis.
Los valores mínimos del indicador de energía dinámica requieren una y otra vez para determinar los parámetros adecuados, y existe el riesgo de optimización de la curva.
La estrategia de la línea media de gran ciclo, con ganancias relativamente estables pero con ganancias absolutas limitadas.
Se pueden reducir los ciclos de medias, según proceda, o añadir otros indicadores que ayuden a la evaluación y mejoran la adaptabilidad de las estrategias.
Prueba diferentes combinaciones de líneas uniformes para encontrar el parámetro óptimo.
Añadir otros indicadores de juicio, como el MACD, KD y otros juicios auxiliares.
Optimización de los parámetros de los indicadores de energía dinámica, como el ciclo de retroceso, el rango de mapeo, etc.
Añadir un mecanismo de suspensión de pérdidas para controlar el riesgo.
Si los parámetros de las diferentes variedades no son consistentes, se puede considerar la extracción de características de aprendizaje automático.
Se añaden indicadores de potencia para evitar señales cruzadas irrazonables.
Esta estrategia integra el seguimiento de tendencias en el ciclo y el doble filtrado de indicadores de energía dinámica personalizados en una sola estrategia, de alta fiabilidad y gran valor en el campo. Se espera obtener un mejor rendimiento a través de la optimización de parámetros y el refuerzo de indicadores de tecnología auxiliar. La idea de la estrategia es novedosa y puede servir de referencia para otras estrategias de seguimiento de tendencias, es un complemento valioso en la biblioteca de estrategias de comercio cuantitativo.
/*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