Esta estrategia utiliza el principio de cruce de las medias móviles rápidas y las medias móviles lentas para determinar la dirección de la tendencia del mercado y emitir señales de compra y venta. La estrategia es simple, fácil de entender y fácil de implementar, y se aplica a las operaciones de línea corta y media.
La estrategia utiliza dos promedios móviles, una línea rápida y una línea lenta. La línea rápida tiene un EMA de 3 días y la línea lenta tiene un EMA de 15 días. La estrategia determina que cuando la línea rápida rompe la línea lenta desde abajo, se considera que está en una tendencia ascendente, momento en que se compra. Por el contrario, cuando la línea rápida cae desde arriba y rompe la línea lenta, se considera que está en una tendencia descendente, momento en que se vende.
La estrategia también establece un EMA de 3 días con un parámetro más rápido como la línea de salida rápida. Cuando el precio cae por debajo de esta línea de salida rápida, se determina una reversión de la tendencia y se debe salir de la posición original de múltiples cabezas. Del mismo modo, cuando el precio vuelve a romper la línea de salida, se vuelve a pasar a la venta, por lo tanto, es una señal de reentrada.
La configuración de la señal de operación específica es la siguiente:
Las líneas rápidas van de abajo hacia arriba, rompen las líneas lentas, hacen más.
Las líneas rápidas van de arriba hacia abajo, rompiendo las líneas lentas y haciendo espacio.
El precio se desplomó por debajo de la línea de salida rápida, y las acciones se cerraron.
Los precios vuelven a romper la línea de salida rápida y hacer más
Sencillo de usar, solo necesita configurar dos parámetros de media móvil y es muy fácil de implementar
Los datos de retroalimentación son abundantes y los indicadores utilizados son más comunes para evaluar la eficacia de las estrategias
Hay más parámetros configurables y se puede optimizar la estrategia ajustando los parámetros
El riesgo se controla mejor con un alto de pérdidas de movimiento rápido de la media
La estrategia es clara, las señales de compra y venta son muy claras.
Opere con una frecuencia moderada y evite las transacciones demasiado frecuentes
Como estrategia de seguimiento de tendencias, se generan más señales falsas cuando las tendencias no son evidentes.
Las medias móviles son retrasadas en sí mismas y pueden perder puntos de inflexión.
La configuración de parámetros fijos no puede adaptarse a los cambios en el mercado, y debe combinarse con el uso optimizado de los parámetros
La configuración para detener el daño puede ser demasiado débil para detener el daño a tiempo
Las señales estratégicas son frecuentes y los costos de las transacciones pueden ser altos.
Las señales de negociación pueden desviarse y deben confirmarse junto con otros indicadores.
El riesgo se puede controlar mediante la optimización de los parámetros, la confirmación auxiliar con otros indicadores, la flexibilización adecuada de los parámetros de pérdida y la actualización oportuna de los parámetros.
Se puede probar la optimización de los parámetros de las medias móviles para que se ajusten mejor a las características actuales del mercado
Se pueden introducir más indicadores para combinarlos en un sistema de estrategias más robusto.
Se puede configurar una configuración de parámetros de adaptación, ajustando los parámetros en tiempo real en función del mercado
La introducción de algoritmos de aprendizaje automático para una optimización de estrategias más inteligente
Se puede configurar un stop loss dinámico y un stop loss de seguimiento para controlar mejor el riesgo
Se puede combinar con indicadores de energía cuantitativa para evitar desviaciones que puedan causar errores en el motor.
La estrategia en su conjunto es una estrategia de cruce de dos medias móviles relativamente simple. Utiliza la relación cruzada entre la media rápida y la media lenta para determinar las tendencias del mercado y los momentos de compra y venta. La estrategia tiene la ventaja de tener una idea clara, fácil de implementar y puede adaptarse a diferentes mercados a través de la optimización de los parámetros.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © ehaarjee, ECHKAY, JackBauer007
//@version=4
//study(title="Tale_indicators", overlay=true)
strategy("Tale Indicators Strategy", overlay=true, precision=8, max_bars_back=200, pyramiding=0, initial_capital=20000, commission_type="percent", commission_value=0.1)
len_fast = input(3, minval=1, title="FAST EMA")
src_fast = input(close, title="Source for Fast")
fastMA = ema(src_fast, len_fast)
plot(fastMA, title="Slow EMA", color=color.orange)
len_slow = input(15, minval=1, title="SLOW EMA")
src_slow = input(close, title="Source for Slow")
slowMA = ema(src_slow, len_slow)
plot(slowMA, title="Fast EMA", color=color.blue)
len_fast_exit = input(3, minval=1, title="FAST EMA Exit")
src_fast_exit = input(close, title="Source for Fast Exit")
fastMAE = ema(src_fast_exit, len_fast_exit)
plot(fastMAE, title="Fast EMA Ex", color=color.red)
src_slow_enter_short = input(low, title="Source for Short Entry")
slowMASEn = ema(src_slow_enter_short, len_slow)
src_slow_enter_long = input(high, title="Source for Long Entry")
slowMALEn = ema(src_slow_enter_long, len_slow)
src_slow_exit_short = input(low, title="Source for Short Exit")
slowMASEx = ema(src_slow_enter_short, len_slow)
src_slow_exit_long = input(high, title="Source for Long Exit")
slowMALEx = ema(src_slow_enter_long, len_slow)
enter_long = crossover(fastMA, slowMALEn)
enter_short = crossunder(fastMA, slowMASEn)
exit_long = crossunder(fastMAE, slowMALEx)
exit_short = crossover(fastMAE, slowMALEx)
out_enter = iff(enter_long == true, 1, iff(enter_short == true, -1, 0))
plotarrow(out_enter, "Plot Enter Points", colorup=color.green, colordown=color.red, maxheight = 30)
bull = fastMA > slowMALEn
bear = fastMA < slowMASEn
c = bull ? color.green : bear ? color.red : color.white
bgcolor(c)
exit_tuner = input(0.005, title="Exit Tuner to touch slowEMA")
bull_exit = (bull and (low>(fastMAE*(1+exit_tuner)))) or exit_long or (not(bear) and (fastMAE>high))
bear_exit = (bear and ((fastMAE*(1-exit_tuner))>high)) or exit_short or (not(bull) and (low>fastMAE))
bull_r = (bull and ((bull_exit[1]) or (bull_exit[2] and bull_exit[1])) and (low<=fastMAE))
bear_r = (bear and ((bear_exit[1]) or (bull_exit[2] and bull_exit[1])) and (fastMAE<=high))
bull_re = (bull and (low<slowMALEn)) and not(enter_long)
bear_re = (bear and (high>slowMASEn)) and not(enter_short)
bull_ree = (bull and ((low<slowMALEn) and not(bull_re[1] or enter_long[1])))
bear_ree = (bear and ((high>slowMASEn) and not(bear_re[1] or enter_short[1])))
bull_reenter = (bull_r) and not(enter_long)
bear_reenter = (bear_r) and not(enter_short)
plotshape(bull_exit, "Plot Bull Exit", style = shape.arrowdown, color=color.green, size=size.small, text="ExL", location=location.abovebar)
plotshape(bear_exit, "Plot Bear Exit", style = shape.arrowup, color=color.red, size=size.small, text="ExS", location=location.belowbar)
plotshape(bull_reenter, "Plot Bull ReEnter", style = shape.arrowup, color=color.green, size=size.small, text="ReL", location=location.belowbar)
plotshape(bear_reenter, "Plot Bear ReEnter", style = shape.arrowdown, color=color.red, size=size.small, text="ReS", location=location.abovebar)
run_strategy = input(true, title="Run Strategy")
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 2000)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2100, title = "Thru Year", type = input.integer, minval = 2000)
// === INPUT SHOW PLOT ===
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
var long_position_open = false
var short_position_open = false
if (enter_long and not(bull_exit) and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=4)
long_position_open := true
if (short_position_open)
// strategy.close("SO")
short_position_open := false
if (bull_reenter and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=1)
long_position_open := true
if (bull_exit and long_position_open)
// strategy.close("LO")
long_position_open := false
if (enter_short and not(bear_exit) and not(short_position_open))
// strategy.entry("SO", strategy.short, qty=4)
short_position_open := true
if(long_position_open)
// strategy.close("LO")
long_position_open := false
if (bear_reenter and not(short_position_open))
// strategy.entry("SO", strategy.long, qty=1)
long_position_open := true
if (bear_exit and short_position_open)
// strategy.close("SO")
short_position_open := false
if(run_strategy)
strategy.entry("LO", strategy.long, when=(window() and enter_long), qty=4)
strategy.entry("LO", strategy.long, when=(window() and bull_reenter and not(long_position_open)), qty=1)
strategy.close("LO", when=(window() and bull_exit and long_position_open))
strategy.entry("SO", strategy.short, when=(window() and enter_short), qty=4)
strategy.entry("SO", strategy.short, when=(window() and bear_reenter and not(short_position_open)), qty=1)
strategy.close("SO", when=(window() and bear_exit and short_position_open))