Esta estrategia utiliza tres indicadores técnicos principales: el promedio móvil EMA, el índice de fuerza relativa RSI y el índice de canal de productos básicos CCI para identificar el impulso de los precios a través de cruces de EMA y otras entradas confirmadas por lecturas de sobreventa / sobrecompra de RSI y CCI.
Utilizar cruces entre la EMA de 4 y 8 períodos para determinar el impulso de los precios
Cuando las EMA se vuelvan al alza, es decir, cuando la EMA de 4 períodos se cruza por encima de la EMA de 8 períodos, comprobar que el RSI (superior a 65) y el CCI (superior a 0) no estén sobrecomprados para dar una señal larga;
Cuando las EMA cambien a la baja, es decir, cuando la EMA de 4 períodos cruce por debajo de la EMA de 8 períodos, comprobar que el RSI (por debajo de 35) y el CCI (por debajo de 0) están sobrevendidos para dar una señal corta;
Establezca los precios de stop loss y take profit basados en las distancias de entrada una vez que se activen las señales comerciales.
En resumen, esta estrategia considera que la tendencia a mediano plazo y los niveles de sobrecompra/sobreventa a corto plazo forman señales relativamente estables, mientras que el stop loss y el take profit limitan efectivamente las pérdidas por operación.
Los indicadores múltiples mitigan las señales falsas de los osciladores individuales.
Las EMA determinan la tendencia principal, mientras que el RSI y el CCI evitan las zonas sobrecalentadas para mejorar la tasa de ganancia;
La configuración automática de stop loss y take profit limita las pérdidas en movimientos extremos;
La naturaleza puramente técnica hace que esta estrategia sea fácilmente implementable en cualquier período de tiempo.
Las principales noticias fundamentales pueden anular los niveles técnicos;
Las operaciones de stop loss pueden realizarse mediante llamadas de volatilidad masiva para realizar paradas más amplias;
El comercio frecuente genera mayores costos de transacción, por lo que es mejor dejarlo para algoritmos de alta frecuencia.
Incorporar modelos de aprendizaje automático para ajustar automáticamente los parámetros basados en los fundamentos;
Construir paradas adaptativas que reaccionen a la volatilidad en lugar de distancias fijas.
Esta estrategia multifacética puede ofrecer ganancias constantes a mediano plazo bajo parámetros optimizados, por lo que es un sistema técnico accesible.
/*backtest start: 2023-11-19 00:00:00 end: 2023-11-26 00:00:00 period: 45m basePeriod: 5m 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/ // © SoftKill21 //@version=4 strategy(title="Moving Average Exponential", shorttitle="EMA", overlay=true) len4 = input(4, minval=1, title="Length_MA4") src4 = input(close, title="Source") offset4 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) out4 = ema(src4, len4) plot(out4, title="EMA", color=color.blue, offset=offset4) len8 = input(8, minval=1, title="Length_MA8") src8 = input(close, title="Source") offset8 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) out8 = ema(src8, len8) plot(out8, title="EMA", color=color.blue, offset=offset8) //rsioma src = close, len = input(14, minval=1, title="Length") up = rma(max(change(ema(src, len)), 0), len) down = rma(-min(change(ema(src, len)), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) //plot(rsi, color=color.blue) //band1 = hline(80) //band0 = hline(20) //fill(band1, band0, color=color.purple, transp=90) //hline(50, color=color.gray, linestyle=plot.style_line) sig = ema(rsi, 21) //plot(sig, color=color.purple) //woodie cciTurboLength = input(title="CCI Turbo Length", type=input.integer, defval=6, minval=3, maxval=14) cci14Length = input(title="CCI 14 Length", type=input.integer, defval=14, minval=7, maxval=20) source = close cciTurbo = cci(source, cciTurboLength) cci14 = cci(source, cci14Length) last5IsDown = cci14[5] < 0 and cci14[4] < 0 and cci14[3] < 0 and cci14[2] < 0 and cci14[1] < 0 last5IsUp = cci14[5] > 0 and cci14[4] > 0 and cci14[3] > 0 and cci14[2] > 0 and cci14[1] > 0 histogramColor = last5IsUp ? color.green : last5IsDown ? color.red : cci14 < 0 ? color.green : color.red // Exit Condition // Exit Condition a = input(12)*10 b = input(15)*10 c = a*syminfo.mintick d = b*syminfo.mintick longCondition = crossover(out4, out8) and (rsi >= 65 and cci14>=0) shortCondition = crossunder(out4, out8) and (rsi <=35 and cci14<=0) long_stop_level = float(na) long_profit_level1 = float(na) long_profit_level2 = float(na) long_even_level = float(na) short_stop_level = float(na) short_profit_level1 = float(na) short_profit_level2 = float(na) short_even_level = float(na) long_stop_level := longCondition ? close - c : long_stop_level [1] long_profit_level1 := longCondition ? close + d : long_profit_level1 [1] //long_profit_level2 := longCondition ? close + d : long_profit_level2 [1] //long_even_level := longCondition ? close + 0 : long_even_level [1] short_stop_level := shortCondition ? close + c : short_stop_level [1] short_profit_level1 := shortCondition ? close - d : short_profit_level1 [1] //short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1] //short_even_level := shortCondition ? close + 0 : short_even_level [1] //ha // === Input === //ma1_len = input(1, title="MA 01") //ma2_len = input(40, title="MA 02") // === MA 01 Filter === //o=ema(open,ma1_len) //cc=ema(close,ma1_len) //h=ema(high,ma1_len) //l=ema(low,ma1_len) // === HA calculator === //ha_t = heikinashi(syminfo.tickerid) //ha_o = security(ha_t, timeframe.period, o) //ha_c = security(ha_t, timeframe.period, cc) //ha_h = security(ha_t, timeframe.period, h) //ha_l = security(ha_t, timeframe.period, l) // === MA 02 Filter === //o2=ema(ha_o, ma2_len) //c2=ema(ha_c, ma2_len) //h2=ema(ha_h, ma2_len) //l2=ema(ha_l, ma2_len) // === Color def === //ha_col=o2>c2 ? color.red : color.lime // === PLOTITING=== //plotcandle(o2, h2, l2, c2, title="HA Smoothed", color=ha_col) tp=input(120) sl=input(96) strategy.entry("long", strategy.long, when = longCondition) //strategy.close("long", when = o2>c2 , comment="ha_long") strategy.entry("short", strategy.short , when =shortCondition ) //strategy.close("short", when = o2<=c2 , comment = "ha_short" ) //strategy.close("long",when=long_profit_level1 or long_stop_level , comment="tp/sl") //strategy.close("short",when=short_profit_level1 or short_stop_level , comment="tp/sl") strategy.exit("x_long","long",profit = tp, loss = sl) //when = o2>c2) strategy.exit("x_short","short",profit = tp, loss = sl) //when = o2<c2)