Estrategia de inversión de impulso de cuatro indicadores

El autor:¿ Qué pasa?, Fecha: 2023-11-27 15:51:01
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

  1. Utilizar cruces entre la EMA de 4 y 8 períodos para determinar el impulso de los precios la EMA de 4 períodos más rápida para reaccionar rápidamente y la EMA de 8 períodos más lenta para confirmar;

  2. 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;

  3. 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;

  4. 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.

Análisis de ventajas

  1. Los indicadores múltiples mitigan las señales falsas de los osciladores individuales.

  2. Las EMA determinan la tendencia principal, mientras que el RSI y el CCI evitan las zonas sobrecalentadas para mejorar la tasa de ganancia;

  3. La configuración automática de stop loss y take profit limita las pérdidas en movimientos extremos;

  4. La naturaleza puramente técnica hace que esta estrategia sea fácilmente implementable en cualquier período de tiempo.

Análisis de riesgos

  1. Las principales noticias fundamentales pueden anular los niveles técnicos;

  2. Las operaciones de stop loss pueden realizarse mediante llamadas de volatilidad masiva para realizar paradas más amplias;

  3. El comercio frecuente genera mayores costos de transacción, por lo que es mejor dejarlo para algoritmos de alta frecuencia.

Oportunidades de mejora

  1. Incorporar modelos de aprendizaje automático para ajustar automáticamente los parámetros basados en los fundamentos;

  2. Construir paradas adaptativas que reaccionen a la volatilidad en lugar de distancias fijas.

Conclusión

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)



Más.