En la carga de los recursos... Cargando...

Se aplican las siguientes medidas:

El autor:¿ Qué pasa?, Fecha: 2023-10-25 11:46:49
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el principio de cruce de la media móvil exponencial (EMA), combinado con el indicador RSI, para determinar la dirección de la tendencia para las entradas y salidas.

Estrategia lógica

La estrategia utiliza 3 líneas de EMA con diferentes períodos: líneas rápidas, medianas y lentas.

La estrategia también incorpora el indicador RSI para medir las condiciones de sobrecompra y sobreventa. El RSI calcula una relación de días promedio de subida a días promedio de baja durante un período para mostrar la fortaleza relativa de un activo.

Las condiciones de compra para la estrategia son:

  1. Cruce de precios por encima de las líneas de la EMA rápida, media y lenta
  2. El índice de variabilidad de las cotizaciones de los bancos centrales

Las condiciones de venta son:

  1. La EMA rápida cruzará por debajo de la EMA media
  2. RSI cruzando por debajo de la línea media

Utilizando los cruces de la EMA para determinar la dirección de la tendencia combinados con el RSI para identificar oportunidades de reversión a corto plazo, esta estrategia utiliza los conceptos de tendencia y reversión media.

Análisis de ventajas

Esta estrategia combina los cruces de la EMA y el RSI para medir tanto la tendencia como los niveles de sobrecompra / sobreventa, filtrando las rupturas falsas y las operaciones ruidosas.

Los ajustes del RSI permiten a la estrategia cronometrar entradas y salidas en áreas de sobrecompra/sobreventa ventajosas.

El requisito de que el precio rompa las 3 líneas EMA antes de entrar en operaciones ayuda a evitar ser golpeado.

Análisis de riesgos

Como todas las estrategias de backtest, esta estrategia se enfrenta al riesgo de sobreajuste de backtest.

En los mercados variados, la estrategia puede generar señales falsas y sufrir pérdidas.

La mala sintonización de los parámetros del RSI puede llevar a oportunidades perdidas o señales falsas.

Oportunidades de mejora

  1. Considere agregar validación en plazos más largos para evitar el ruido.

  2. Espera a que se vuelvan a probar las líneas EMA antes de entrar en operaciones para validar la señal.

  3. Incorporar otros indicadores como MACD, Bandas de Bollinger para la confirmación de la señal combinada.

  4. Utilice el aprendizaje automático para optimizar los parámetros de robustez.

  5. Considere la posibilidad de agregar un stop loss para salir rápidamente de tendencias inciertas.

Conclusión

Esta estrategia combina los cruces de la EMA y el RSI para identificar la tendencia mientras se aprovecha de las reversiones a corto plazo. Utiliza los conceptos de tendencia y reversión media de manera eficiente. Hay margen de optimización a través de validación de señales, ajuste de parámetros, stop losses, etc. Pero se debe considerar el sobreajuste de las pruebas de retroceso y se debe evaluar el rendimiento en vivo. En general, esto sirve como una referencia útil para el aprendizaje, pero requiere una mayor validación en los mercados en vivo.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
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/
// © chadsadachai

//@version=5
strategy("EMA Cross V1", overlay= true)

//rsi
length = input.int(title = "Rsi Lenght" , defval=26 , minval=1, maxval=50)
overS = input.int(title = "Rsi OVS line" , defval=30 , minval=1, maxval=40)
overB = input.int(title = "Rsi OVB line" , defval=70 , minval=1, maxval=100)
mLine = input.int(title = "Rsi Medium line" , defval=42 , minval=1, maxval=60)
price = close
vrsi = ta.rsi(price, length)
co = vrsi >= mLine and vrsi < overB 
cu = ta.crossunder(vrsi, overB)
//ema
F = input.int(title = "EMA Fast" , defval=17 , minval=1, maxval=50)
M = input.int(title = "EMA Medium" , defval=35, minval=1, maxval=100)
S = input.int(title = "EMA Slow" , defval=142, minval=1, maxval=200)
emaF = ta.ema(price , F)
emaM = ta.ema(price , M)
emaS = ta.ema(price , S)

//plot
plot(emaF , color = color.green , linewidth=1)
plot(emaM , color = color.yellow , linewidth=1)
plot(emaS , color = color.red , linewidth=1)

//Time Stamp
start = timestamp(input.int(title = "Start Year" , defval=2011 , minval=2011, maxval=2025), input.int(title = "Start Month" , defval=1 , minval=1, maxval=12), input.int(title = "Start Day" , defval=1 , minval=1, maxval=31), 0, 0)
end = timestamp(input.int(title = "End Year" , defval=2025 , minval=2011, maxval=2025), input.int(title = "End Month" , defval=1 , minval=1, maxval=12), input.int(title = "End Day" , defval=1 , minval=1, maxval=31), 0, 0)
// years = input.int(title = "Year" , defval=2018 , minval=2011, maxval=2025)
// months = input.int(title = "Month" , defval=1 , minval=1, maxval=12)
// days = input.int(title = "Day" , defval=1 , minval=1, maxval=31)

//longCondition Default
// longCondition1 = EMA_Fast >= EMA_Slow and EMA_Fast >= EMA_Medium//ta.crossover(EMA_Fast, EMA_Slow)  EMA_Fast > EMA_Slow and EMA_Medium > EMA_Slow
// longCondition3 = price >= EMA_Medium and price > EMA_Slow
// longCondition2 = vrsi >= overSold and vrsi <= overBought 

//longCondition & shortCondition ETHUSD
// 1.price > emaF > emaM > emaS
// 2.rsi overcross overS
longC1 = price > emaF and price > emaM and price > emaS 
// longC1 = ta.crossover(emaF, emaM)
longC2 = if longC1
    co
// shortC1 = EMA_Fast < EMA_Medium //and EMA_Fast < EMA_Slow and EMA_Medium < EMA_Slow //and cu
// shortC2 = overBought > vrsi //and vrsi < overBought //overSold < vrsi and vrsi < mediumLine

// exitLong Condition
// 1.price < emaF < emaM < emaS
// 2.rsi overcross mediumLine
exitLong1 = ta.crossunder(emaF, emaM) //or emaF < emaM//and price < emaM and price < emaF
exitLong2 = ta.crossunder(vrsi,mLine)
//exitLong3 = price < emaM
//strategy.entry
if time >=start and time <=end
    strategy.entry("Buy", strategy.long , when = longC1 and longC2)

// if(exitLong1 or exitLong2)
strategy.close("Buy" , when = exitLong1 or exitLong2)
    
// exitShort1 = EMA_Fast > EMA_Medium
// //exitShort2 = ta.crossover(vrsi , mediumLine) 
// exitShort2 = ta.crossunder (vrsi,mediumLine)
// strategy.close("Short" , when = exitShort1 or exitShort2)
// //shortCondition = cu


// //if (shortCondition1 and shortCondition2)
//     //strategy.entry("My Short Entry Id", strategy.short)


Más.