Esta estrategia genera señales de negociación mediante el cálculo del cruce entre dos líneas de EMA de períodos diferentes para determinar las tendencias del mercado.
La estrategia aplica principalmente la teoría de la cruz de oro y la cruz de la muerte de las líneas EMA dobles. Las líneas EMA dobles consisten en una EMA larga y una EMA corta. El parámetro EMA corto se establece en 10 días y el parámetro EMA largo se establece en 21 días.
Cuando la EMA corta cruza la EMA larga, se genera una señal de compra. Cuando la EMA corta cruza por debajo de la EMA larga, se genera una señal de venta. La estrategia también establece umbrales de tasa de crecimiento, abriendo posiciones largas solo cuando el crecimiento excede un umbral positivo y cerrando posiciones solo cuando la disminución excede un umbral negativo.
Específicamente, la condición de compra es cuando la EMA corta es superior a la EMA larga y la tasa de crecimiento de las acciones excede el umbral positivo.
La estrategia general es relativamente simple y confiable, utilizando cruces dobles de la EMA para determinar las tendencias de precios y establecer umbrales de tasa de crecimiento para generar señales comerciales. En comparación con los cruces de una sola línea, puede filtrar algunas señales falsas. Pero las propias líneas de la EMA tienen problemas de retraso. La combinación de otros indicadores o el ajuste dinámico de parámetros puede mejorar aún más el rendimiento de la estrategia.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2) useTimeLimit = input(defval = false, title = "Use Start Time Limiter?") startYear = input(defval = 2016, title = "Start From Year", minval = 0, step = 1) startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1) startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1) startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1) startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1) startTimeOk() => true lenght0 = input(10) lenght1 = input(21) source = close EmaShort = ema(ema(source, lenght0), lenght0) EmaLong = ema(ema(source, lenght1),lenght1) plot(EmaShort, color=red) plot(EmaLong, color=purple) growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2) thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01) thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001) if( startTimeOk() ) buy_condition = EmaShort > EmaLong and growth > thresholdUp buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown strategy.entry("buy", strategy.long, comment="buy", when=buy_condition) strategy.close(id='buy', when=buy_exit_condition)