
La estrategia de seguimiento de tendencias de doble EMA es una estrategia de negociación cuantitativa que utiliza dos indicadores de EMA para determinar la dirección de la tendencia de los precios. La estrategia determina la tendencia de los precios mediante el cálculo de dos conjuntos de diferentes parámetros de indicadores de EMA, que combinan señales de bifurcación y bifurcación.
El indicador central de la estrategia son dos conjuntos de EMAs, un conjunto de EMA1 de períodos más largos y un conjunto de EMA2 de períodos más cortos. El parámetro EMA1 es 21 y el parámetro EMA2 es 10. La estrategia calcula los dos conjuntos de EMAs con una línea de 4 horas como período de referencia.
Cuando el ciclo más corto de EMA2 atraviesa el ciclo más largo de EMA1, se produce una señal de compra. Esto indica que la tendencia a corto plazo de los precios se fortalece y comienza a entrar en una tendencia alcista. Cuando el ciclo más corto de EMA2 atraviesa el ciclo más largo de EMA1, se produce una señal de venta.
Para filtrar las señales de error, la estrategia establece dos conjuntos de indicadores de la horca de oro. Sólo cuando los dos conjuntos de indicadores emiten señales al mismo tiempo, se desencadenan las operaciones de compra y venta correspondientes. Esto puede reducir eficazmente las transacciones erróneas causadas por la oscilación de los precios.
Estos riesgos pueden ser controlados por los siguientes métodos:
La estrategia tiene espacio para ser optimizada aún más:
Aumentar la combinación de modelos. Se pueden crear más combinaciones de diferentes parámetros para mejorar la estabilidad de la estrategia.
Aumentar los mecanismos de detención de pérdidas. Establecer un punto de detención razonable para controlar eficazmente las pérdidas individuales.
Optimización de parámetros dinámicos. Se pueden optimizar automáticamente los parámetros de la EMA en función de diferentes entornos de mercado.
Combinación de técnicas de aprendizaje automático. Utiliza un marco como Tensorflow para entrenar modelos que predicen tendencias de precios en tiempo real y clasifican.
La estrategia de seguimiento de tendencias de doble EMA es una estrategia de negociación de tendencias sencilla y práctica. Utiliza el indicador de doble EMA para determinar tendencias a corto plazo en los precios para capturar oportunidades de movimiento direccional. Al mismo tiempo, la combinación de dos indicadores de filtro de doble EMA puede reducir el error de negociación. La estrategia es de estructura simple, fácil de implementar y adecuada para aplicaciones de comercio cuantitativo.
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
// Component Code Stop
strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)
mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)
last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])
in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0
mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)
last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])
in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0
condlongx = in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)
condshortx = in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)
if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
strategy.entry("Long", strategy.long, comment="Long")
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0
strategy.close("Long",when = not Margin)
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
strategy.entry("Short", strategy.short, comment="Short", when = Margin)