
La estrategia se basa en el cálculo de la doble dinámica EMA y la dinámica DEMA cruzada de los precios para identificar tendencias, y en combinación con el indicador de fluctuación ATR para filtrar brechas falsas, lo que permite una estrategia de negociación cuantificada de un indicador de doble dinámica y un filtro de fluctuación.
La estrategia incluye principalmente las siguientes partes:
El precio se calcula con EMA y DEMA como un indicador de doble dinámica. DEMA, que refleja una tendencia a largo plazo, y DEMA, que es un indicador de dinámica a corto plazo más sensible.
Calcula el índice de volatilidad ATR. La volatilidad y la liquidez del mercado se juzgan por el tamaño del ATR. Cuando la volatilidad es demasiado grande, se filtra la señal del índice de fluctuación para evitar falsas rupturas.
La fluctuación del ATR se determina mediante la parametrización de la media móvil. Cuando el ATR fluctúa por debajo de la media móvil, se permite el disparo de la señal del indicador de movimiento.
Control de parámetros para el ciclo de tiempo de ATR, la duración de ATR, el tipo y la duración de las medias móviles de ATR, etc.
Establecer las reglas de stop loss, stop-loss y tracking stop loss para las posiciones con múltiples titulares.
Esta estrategia de doble filtración de EMA puede reducir significativamente las señales falsas y el comercio frecuente en la estrategia de EMA común. Después de agregar el indicador de fluctuación de ATR, puede filtrar eficazmente las señales engañosas causadas por las fluctuaciones sutiles y evitar ser bloqueado.
En comparación con un solo indicador de movimiento, la estrategia utiliza un diseño de dos indicadores para mejorar la eficacia del juicio. DEMA es un indicador de movimiento a corto plazo más sensible, que se combina con un EMA de línea larga estable para formar una señal combinada más confiable.
Al ajustar los parámetros de ATR, se pueden establecer condiciones de fluctuación adecuadas para diferentes objetos de calificación, lo que mejora la aplicabilidad de la estrategia.
El mayor riesgo de esta estrategia es que la configuración inadecuada de los parámetros puede provocar que las señales de negociación sean demasiado escasas. La configuración demasiado larga de la longitud de DEMA y EMA, o la configuración demasiado alta de los límites de fluctuación de ATR, pueden debilitar el efecto operativo real de la estrategia. Esto requiere una prueba repetida para ajustarse a la combinación óptima de parámetros.
Otro riesgo potencial es que, en situaciones extremas, las fluctuaciones de los precios pueden romper los límites de los parámetros ATR y, por lo tanto, generar pérdidas. Esto requiere que la persona monitoree las anomalías del mercado y suspenda la operación de la estrategia.
Prueba diferentes combinaciones de parámetros de índices de movilidad para encontrar el mejor.
Intentar ajustar el indicador de la dinámica por el doble EMA al MACD u otros indicadores.
Prueba de los diferentes indicadores de volatilidad establecidos, como el ATR histórico general, el índice de volatilidad del mercado, etc.
Aumentar la filtración del volumen de transacciones para evitar el riesgo de que los precios no sean reales.
Optimizar el mecanismo de detención de pérdidas para que las ganancias sean mejores que las pérdidas.
La estrategia integra el indicador de dinámica con el análisis de la volatilidad y está diseñada sobre una base teórica sólida. A través del ajuste de parámetros y la optimización de reglas, puede convertirse en una estrategia de negociación cuantitativa estable y confiable. Su señal de negociación es clara, el riesgo es controlable y vale la pena verificar y aplicar.
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Qorbanjf
//@version=4
strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true)
// DEMA
length = input(10, minval=1, title="DEMA LENGTH")
src = input(close, title="Source")
e1 = ema(src, length)
e2 = ema(e1, length)
dema1 = 2 * e1 - e2
plot(dema1, "DEMA", color=color.yellow)
//EMA
len = input(25, minval=1, title="EMA Length")
srb = input(close, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
ema1 = ema(srb, len)
plot(ema1, title="EMA", color=color.blue, offset=offset)
// Inputs
atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution)
atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer)
useMA = input(title = "Show Moving Average?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type")
maLength = input(defval = 20, title = "Moving Average Period", minval = 1)
//longLossPerc = input(title="Long Stop Loss (%)",
// type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
longTrailPerc = input(title="Trail stop loss (%)",
type=input.float, minval=0.0, step=0.1, defval=50) * 0.01
longProfitPerc = input(title="Long Take Profit (%)",
type=input.float, minval=0.0, step=0.1, defval=3000) / 100
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30)
atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback))
atrp = (atrValue/close)*100
// Moving Average Logic
ma(maType, src, length) =>
maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))
// variables for enter position
enterLong = crossover(dema1, ema1) and atrp < maFilter
// variables for exit position
sale = crossunder(dema1, ema1)
// stop loss
//longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
// trail stop
// Determine trail stop loss prices
longStopTrail = 0.0
longStopTrail := if (strategy.position_size > 0)
stopValue = close * (1 - longTrailPerc)
max(stopValue, longStopTrail[1])
else
0
//Take profit Percentage
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
//Enter trades when conditions are met
strategy.entry(id="long",
long=strategy.long,
when=enterLong,
comment="long")
//
strategy.close("long", when = sale, comment = "Sell")
//place exit orders (only executed after trades are active)
strategy.exit(id="sell",
limit = longExitPrice,
stop = longStopTrail,
comment = "SL/TP")