El presente taller tiene como objetivo aplicar conceptos fundamentales de la teoría del riesgo mediante el uso de herramientas de análisis técnico. A través del estudio de promedios móviles y bandas de Bollinger, se busca interpretar el comportamiento de los precios, la volatilidad del mercado y su impacto en la toma de decisiones financieras.
El análisis se complementa con una reflexión crítica sobre las limitaciones de los indicadores técnicos y la importancia de la gestión del riesgo en contextos de incertidumbre.
Esta postura se apoya directamente en el principio de que el mercado descuenta toda la información, según el cual los precios reflejan toda la información disponible, incluyendo noticias, expectativas y percepciones de los inversionistas. Desde esta perspectiva, analizar los precios sería suficiente para la toma de decisiones.
Sin embargo, esta visión es limitada cuando se analiza desde la teoría del riesgo. Aunque el mercado incorpora información rápidamente, no toda la información es conocida, ni toda es interpretada correctamente al mismo tiempo por todos los participantes. Además, este enfoque ignora los otros dos principios del análisis técnico: los precios se mueven en tendencias y la historia tiende a repetirse, los cuales dependen fuertemente del contexto del mercado. En mercados altamente volátiles o ante eventos inesperados, confiar exclusivamente en este principio puede aumentar el riesgo de decisiones erróneas.
La posición del Analista B reconoce correctamente que los patrones gráficos no garantizan resultados futuros y que su interpretación puede ser subjetiva, lo cual es una crítica válida desde el punto de vista del riesgo. Además, el análisis fundamental permite evaluar el valor intrínseco de un activo, lo que es clave para decisiones de largo plazo.
No obstante, descartar completamente el análisis técnico ignora el principio de que los precios se mueven en tendencias. Incluso si un activo está correctamente valorado desde el punto de vista fundamental, el mercado puede tardar en reflejar ese valor, y durante ese tiempo los precios pueden seguir tendencias claras que ofrecen información relevante para el momento de entrada o salida. Por tanto, negar la utilidad del análisis técnico implica perder señales importantes sobre el comportamiento real del mercado.
La postura del Analista C es la más consistente con la teoría del riesgo. Reconoce que ningún enfoque es infalible y que tanto el análisis técnico como el fundamental aportan información valiosa, pero incompleta. Esta visión se alinea con los tres principios del análisis técnico, aceptando que el mercado descuenta información, que los precios siguen tendencias y que ciertos patrones tienden a repetirse, sin asumir que estos principios funcionen perfectamente en todo momento.
Desde una perspectiva de gestión del riesgo, la integración de enfoques permite compensar las debilidades de cada uno y tomar decisiones más informadas según el contexto específico del mercado.
Un ejemplo concreto donde este principio puede fallar es antes de un evento inesperado, como un cambio regulatorio abrupto, un escándalo corporativo o una crisis geopolítica. En estos casos, la información simplemente no existe aún, por lo que no puede estar reflejada en el precio.
Asimismo, incluso cuando la información es pública, el mercado puede reaccionar de forma exagerada o tardía debido a factores emocionales, lo que demuestra que el precio no siempre refleja de manera eficiente el valor real del activo en el corto plazo.
Para evaluar una acción tecnológica que acaba de reportar pérdidas, pero muestra una tendencia alcista en el gráfico de precios, se propone una estrategia híbrida:
Desde el análisis fundamental, se debe evaluar si las pérdidas son temporales y están asociadas a inversión en innovación, expansión o desarrollo tecnológico, o si reflejan problemas estructurales del modelo de negocio. También es clave analizar la liquidez, el nivel de endeudamiento y las perspectivas del sector.
Desde el análisis técnico, se puede utilizar la tendencia alcista del precio como señal de confianza del mercado, evaluando promedios móviles y niveles de soporte para definir un punto de entrada con riesgo controlado.
La decisión final se basaría en la coherencia entre ambos enfoques: si los fundamentos sugieren viabilidad a largo plazo y el análisis técnico confirma una tendencia positiva, la inversión sería justificable. En caso contrario, la tendencia alcista podría interpretarse como especulativa, aumentando el riesgo de corrección.
Este ejercicio evidencia que los principios del análisis técnico no deben interpretarse como verdades absolutas. Desde la teoría del riesgo, la clave no es elegir entre análisis técnico o fundamental, sino comprender sus limitaciones y utilizarlos de manera complementaria según el contexto del mercado.
set.seed(123)
# Activo A: tendencia alcista y volatilidad moderada
activo_A <- cumprod(1 + rnorm(120, mean = 0.001, sd = 0.015)) * 100
# Activo B: alta volatilidad sin tendencia clara
activo_B <- cumprod(1 + rnorm(120, mean = 0.0002, sd = 0.03)) * 100
datos <- tibble(
dia = 1:120,
Activo_A = activo_A,
Activo_B = activo_B
)
datos <- datos %>%
mutate(
SMA10_A = SMA(Activo_A, 10),
SMA20_A = SMA(Activo_A, 20),
SMA50_A = SMA(Activo_A, 50),
EMA10_A = EMA(Activo_A, 10),
EMA20_A = EMA(Activo_A, 20),
EMA50_A = EMA(Activo_A, 50),
SMA10_B = SMA(Activo_B, 10),
SMA20_B = SMA(Activo_B, 20),
SMA50_B = SMA(Activo_B, 50),
EMA10_B = EMA(Activo_B, 10),
EMA20_B = EMA(Activo_B, 20),
EMA50_B = EMA(Activo_B, 50)
)
ggplot(datos, aes(dia)) +
geom_line(aes(y = Activo_A, color = "Precio")) +
geom_line(aes(y = SMA20_A, color = "SMA 20")) +
geom_line(aes(y = EMA20_A, color = "EMA 20")) +
labs(
title = "Activo A: Precio y Promedios Móviles",
x = "Dia",
y = "Precio"
) +
theme_minimal()
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Removed 19 rows containing missing values or values outside the scale range
## (`geom_line()`).
ggplot(datos, aes(dia)) +
geom_line(aes(y = Activo_B, color = "Precio")) +
geom_line(aes(y = SMA20_B, color = "SMA 20")) +
geom_line(aes(y = EMA20_B, color = "EMA 20")) +
labs(
title = "Activo B – Promedios Móviles",
x = "Día",
y = "Precio"
) +
theme_minimal()
## Warning: Removed 19 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Removed 19 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Interpretación del gráfico
El gráfico muestra el comportamiento del precio del Activo A junto con los promedios móviles simple (SMA) y exponencial (EMA) de 20 periodos. Se observa que el precio presenta una tendencia general creciente, lo que indica un comportamiento alcista del activo durante el periodo analizado.
El promedio móvil exponencial (EMA) reacciona con mayor rapidez a los cambios recientes del precio, acercándose más al comportamiento del activo. Esto permite identificar señales tempranas de posibles cambios en la tendencia. Por su parte, el promedio móvil simple (SMA) presenta una respuesta más lenta, suavizando las fluctuaciones del precio y reduciendo el ruido del mercado.
Cuando el precio se mantiene por encima de ambos promedios móviles, se interpreta como una señal de fortaleza del activo. En contraste, los cruces del precio por debajo de los promedios móviles pueden interpretarse como señales de debilitamiento o posibles correcciones.
El EMA proporciona señales más útiles en el Activo A. Esto se debe a que dicho activo presenta una tendencia más definida y una volatilidad moderada. Al asignar mayor peso a los datos más recientes, el EMA responde con mayor rapidez a los cambios en el precio, permitiendo identificar de forma más oportuna posibles continuaciones o correcciones de la tendencia.
En contraste, el Activo B exhibe una alta volatilidad y ausencia de una tendencia clara, lo que provoca que tanto el EMA como el SMA generen señales frecuentes y poco confiables. En este caso, la ventaja del EMA frente al SMA se reduce considerablemente.
Para el Activo A, los periodos de 20 y 50 días resultan más apropiados. Estos periodos suavizan las fluctuaciones de corto plazo y permiten capturar mejor la tendencia general del activo, reduciendo el ruido sin perder completamente capacidad de reacción.
En el caso del Activo B, ningún periodo resulta completamente adecuado debido a su elevada volatilidad. No obstante, el periodo de 50 días ofrece una señal relativamente más estable, ya que filtra parte de los movimientos erráticos que predominan en periodos más cortos como 10 días.
Si se debiera tomar una decisión de compra o venta en el momento actual, para el Activo A se utilizaría el EMA de 20 días, ya que combina una buena sensibilidad a los cambios recientes con una adecuada estabilidad, lo que lo hace útil para seguir la tendencia sin reaccionar excesivamente al ruido del mercado.
Para el Activo B, no se recomienda basar una decisión de compra o venta únicamente en promedios móviles. En caso de ser necesario, se preferiría un SMA de 50 días como referencia general, complementándolo con otros indicadores que ayuden a confirmar la señal.
El uso exclusivo de promedios móviles presenta varias limitaciones importantes. En primer lugar, se trata de indicadores rezagados, por lo que las señales se generan después de que el movimiento del precio ya ha ocurrido. Esto puede provocar entradas tardías o salidas poco oportunas.
Además, en contextos de alta volatilidad o mercados laterales, los promedios móviles generan múltiples señales falsas, incrementando el riesgo de decisiones incorrectas. Por esta razón,
Se analizan los valores del Índice de Fuerza Relativa (RSI) de una acción durante 10 días consecutivos, con el fin de identificar señales de sobrecompra y evaluar decisiones de venta.
dia <- 1:10
RSI <- c(45, 52, 58, 67, 75, 82, 78, 85, 82, 79)
datos_RSI <- data.frame(dia, RSI)
datos_RSI
## dia RSI
## 1 1 45
## 2 2 52
## 3 3 58
## 4 4 67
## 5 5 75
## 6 6 82
## 7 7 78
## 8 8 85
## 9 9 82
## 10 10 79
Según el criterio tradicional, un activo entra en zona de sobrecompra cuando el RSI supera el nivel de 70.
A partir de los datos observados, el activo se encuentra en zona de sobrecompra en los siguientes días:
datos_RSI %>%
filter(RSI > 70)
## dia RSI
## 1 5 75
## 2 6 82
## 3 7 78
## 4 8 85
## 5 9 82
## 6 10 79
Los días en los que el RSI supera el nivel de 70 son los días 5, 6, 7, 8, 9 y 10, lo que indica una presión compradora elevada durante este periodo.
Un trader principiante decide vender toda su posición el día 6 debido a que el RSI supera el nivel de 80. Si bien esta decisión se basa en un criterio comúnmente utilizado, no puede considerarse completamente correcta ni incorrecta por sí sola.
El RSI puede permanecer en niveles elevados durante un periodo prolongado cuando el activo se encuentra en una tendencia alcista fuerte. En este contexto, vender inmediatamente al superar 80 puede llevar a perder ganancias adicionales.
Antes de tomar una decisión de venta, sería necesario analizar: - La tendencia general del precio. - El volumen de negociación. - La presencia de divergencias entre el RSI y el precio. - Otros indicadores técnicos que confirmen un posible agotamiento del movimiento.
Al día 10, el RSI es de 79, lo que sigue indicando un nivel elevado. Sin embargo, el significado de un RSI alto depende del contexto del mercado.
En una tendencia alcista sólida, un RSI alto refleja fuerza del movimiento, no necesariamente una señal inmediata de venta. En estos casos, el RSI puede mantenerse en niveles elevados sin que se produzca una corrección significativa.
Un RSI alto puede anticipar una corrección cuando se observa: - Pérdida de momentum. - Divergencias bajistas (el precio sube y el RSI no). - Disminución del volumen. En este escenario, el RSI alto sí puede interpretarse como una señal de advertencia.
Una estrategia más robusta que el uso exclusivo del umbral de 70 podría incluir los siguientes criterios:
Esta combinación de factores permite reducir la probabilidad de señales falsas y mejora la toma de decisiones en contextos reales de mercado.
El RSI es un indicador útil para identificar condiciones de sobrecompra y sobreventa, pero su interpretación debe realizarse dentro del contexto de la tendencia y otros factores del mercado. El uso exclusivo de umbrales fijos puede llevar a decisiones apresuradas, por lo que es fundamental complementar el análisis con otras herramientas técnicas.
Se analizan dos acciones utilizando el oscilador estocástico (%K y %D) con una ventana de 14 días.
# Datos
TECH <- list(precio = 150, max = 152, min = 130)
ENERGY <- list(precio = 45, max = 58, min = 42)
# Cálculo de %K manual
K_TECH <- (TECH$precio - TECH$min) / (TECH$max - TECH$min) * 100
K_ENERGY <- (ENERGY$precio - ENERGY$min) / (ENERGY$max - ENERGY$min) * 100
K_TECH
## [1] 90.90909
K_ENERGY
## [1] 18.75
Los resultados obtenidos muestran que la acción TECH presenta una posición cercana al extremo superior del rango, mientras que la acción ENERGY se encuentra cerca del extremo inferior. Estos valores son consistentes con los %K proporcionados en el enunciado, considerando que el oscilador suele aplicarse con suavizamientos adicionales.
En la acción TECH, %K se encuentra por encima de %D y ambos valores están en niveles elevados (superiores a 80). Esto indica una condición de sobrecompra y sugiere un posible agotamiento del movimiento alcista, aunque no constituye una señal inmediata de venta.
En la acción ENERGY, %K se encuentra por debajo de %D y ambos valores están en niveles bajos (inferiores a 30). Esto indica una condición de sobreventa y sugiere la posibilidad de un rebote, sin garantizar un cambio de tendencia.
Ante la orden de “comprar la acción en sobreventa y vender la de sobrecompra de inmediato”, no se recomienda ejecutar la decisión sin cuestionamiento.
Desde el punto de vista del contexto de mercado, la acción TECH podría encontrarse en una tendencia alcista fuerte, mientras que la acción ENERGY podría estar en una tendencia bajista prolongada. El oscilador estocástico no distingue entre mercados tendenciales y laterales.
Adicionalmente, el estocástico presenta limitaciones importantes, ya que puede permanecer largos periodos en zonas de sobrecompra o sobreventa, generando señales falsas. Ejecutar decisiones mecánicas aumenta el riesgo de pérdidas por salidas prematuras o entradas anticipadas.
Para confirmar las señales del oscilador estocástico, se recomienda utilizar un indicador de tendencia, como el MACD o promedios móviles. Estos indicadores permiten validar si la señal del estocástico coincide con un cambio real en la dirección del mercado, reduciendo el riesgo de decisiones incorrectas.
El oscilador estocástico es una herramienta útil para identificar la posición relativa del precio dentro de un rango, pero no debe utilizarse de forma aislada. La integración con otros indicadores y el análisis del contexto del mercado son fundamentales para una adecuada gestión del riesgo.
Se construye una serie temporal con tres fases diferenciadas: 1. Tendencia alcista (días 1–40) 2. Lateralización (días 41–70) 3. Tendencia bajista (días 71–100)
set.seed(789)
fase1 <- cumprod(1 + rnorm(40, mean = 0.002, sd = 0.01)) * 100
fase2 <- fase1[40] + cumsum(rnorm(30, mean = 0, sd = 0.5))
fase3 <- cumprod(1 + rnorm(30, mean = -0.0015, sd = 0.01)) * fase2[30]
precios <- c(fase1, fase2, fase3)
dias <- 1:length(precios)
set.seed(789)
fase1 <- cumprod(1 + rnorm(40, mean = 0.002, sd = 0.01)) * 100
fase2 <- fase1[40] + cumsum(rnorm(30, mean = 0, sd = 0.5))
fase3 <- cumprod(1 + rnorm(30, mean = -0.0015, sd = 0.01)) * fase2[30]
precios <- c(fase1, fase2, fase3)
dias <- 1:length(precios)
library(TTR)
ema12 <- EMA(precios, n = 12)
ema26 <- EMA(precios, n = 26)
macd <- ema12 - ema26
signal <- EMA(macd, n = 9)
histograma <- macd - signal
compras <- which(diff(sign(macd - signal)) == 2)
ventas <- which(diff(sign(macd - signal)) == -2)
df_precios <- data.frame(
dia = dias,
precio = precios,
fase = case_when(
dias <= 40 ~ "Alcista",
dias <= 70 ~ "Lateral",
TRUE ~ "Bajista"
)
)
p_precio <- plot_ly(df_precios, x = ~dia, y = ~precio,
type = "scatter", mode = "lines",
line = list(color = "black"),
name = "Precio") %>%
add_trace(x = compras, y = precios[compras],
type = "scatter", mode = "markers",
marker = list(symbol = "triangle-up", size = 10, color = "green"),
name = "Compra") %>%
add_trace(x = ventas, y = precios[ventas],
type = "scatter", mode = "markers",
marker = list(symbol = "triangle-down", size = 10, color = "red"),
name = "Venta") %>%
layout(
title = "Evolución del Precio (Interactivo)",
xaxis = list(title = "Días"),
yaxis = list(title = "Precio"),
shapes = list(
list(type = "rect", x0 = 0, x1 = 40, y0 = 0, y1 = 1,
xref = "x", yref = "paper",
fillcolor = "rgba(0,255,0,0.1)", line = list(width = 0)),
list(type = "rect", x0 = 40, x1 = 70, y0 = 0, y1 = 1,
xref = "x", yref = "paper",
fillcolor = "rgba(0,0,255,0.1)", line = list(width = 0)),
list(type = "rect", x0 = 70, x1 = 100, y0 = 0, y1 = 1,
xref = "x", yref = "paper",
fillcolor = "rgba(255,0,0,0.1)", line = list(width = 0))
)
)
p_precio
## A line object has been specified, but lines is not in the mode
## Adding lines to the mode...
## A line object has been specified, but lines is not in the mode
## Adding lines to the mode...
df_macd <- data.frame(
dia = dias,
macd = macd,
signal = signal,
hist = histograma
)
p_macd <- plot_ly(df_macd, x = ~dia) %>%
add_lines(y = ~macd, name = "MACD", line = list(color = "blue")) %>%
add_lines(y = ~signal, name = "Señal", line = list(color = "red")) %>%
add_bars(y = ~hist, name = "Histograma",
marker = list(color = ifelse(df_macd$hist > 0, "darkgreen", "darkred")),
opacity = 0.5) %>%
add_markers(x = compras, y = macd[compras],
marker = list(symbol = "triangle-up", size = 10, color = "green"),
name = "Compra") %>%
add_markers(x = ventas, y = macd[ventas],
marker = list(symbol = "triangle-down", size = 10, color = "red"),
name = "Venta") %>%
layout(
title = "MACD Interactivo",
xaxis = list(title = "Días"),
yaxis = list(title = "Valor")
)
p_macd
## Warning: Ignoring 33 observations
Las señales de compra se identifican cuando la línea MACD cruza al
alza la línea de señal.
Las señales de venta ocurren cuando la MACD cruza a la baja la línea de
señal.
En la fase alcista se observan al menos dos cruces alcistas
claros.
En la fase bajista se presentan cruces bajistas que actúan como señales
de venta.
Durante la lateralización aparecen cruces frecuentes que no generan movimientos sostenidos, constituyendo señales falsas.
El MACD genera señales más confiables, ya que los cruces coinciden con una tendencia clara. El histograma se mantiene positivo y creciente, confirmando el impulso alcista.
Se observan múltiples señales falsas. El MACD cruza repetidamente la línea de señal sin una dirección definida. El histograma oscila cerca de cero, indicando ausencia de momentum.
Las señales de venta son más efectivas. El histograma permanece negativo y se amplía, confirmando presión vendedora.
El histograma permite visualizar la fuerza del movimiento: - Valores crecientes indican aceleración de la tendencia. - Valores decrecientes señalan pérdida de momentum. - Oscilaciones cercanas a cero advierten mercados laterales.
Este componente aporta información adicional que no es evidente solo observando las líneas del MACD. ## Reflexión avanzada: MACD como indicador retardado
El MACD es un indicador retardado porque se basa en medias móviles, las cuales responden con retraso a los cambios en el precio. En los gráficos se observa que las señales aparecen después de que el movimiento ya ha comenzado.
Para un trader en tiempo real, esto implica: - Entradas tardías en el inicio de tendencias - Salidas retrasadas ante cambios bruscos - Necesidad de complementar el MACD con indicadores adelantados o análisis de precio
Por tanto, el MACD es más efectivo para confirmar tendencias que para anticiparlas.
HACE 5 DÍAS: -1.2 HOY: 2.5 LINEA DE SEÑAL HACE 5 DÍAS: -0.5 HOY: 1.8 HISTOGRAMA HACE 5 DÍAS: -0.7 HACE 2 DÍAS: +0.9 HOY: +0.7
Entre hace 5 días y hoy ocurrió un cambio de momentum de bajista a alcista. Hace 5 días el MACD (−1.2) estaba por debajo de la señal (−0.5) y el histograma era −0.7, indicando impulso bajista. Hoy el MACD (2.5) está por encima de la señal (1.8) y el histograma es +0.7, reflejando impulso alcista.
Se generó una señal de trading de cruce alcista (MACD cruzando por encima de la señal). El cruce ocurrió cuando el histograma se hizo 0; como pasó de −0.7 (hace 5 días) a +0.9 (hace 2 días), el cruce debió ocurrir entre hace 5 y hace 2 días, aproximadamente entre hace 4 y 3 días.
Aunque el histograma es positivo (sesgo alcista), su disminución en los últimos 2 días (+0.9 → +0.7) advierte que el momentum alcista se está debilitando (menor separación entre MACD y señal). Esto sugiere posible desaceleración/consolidación y aumenta el riesgo de un cruce bajista si la tendencia continúa.
Durante 20 días, el precio promedio (SMA) de una acción fue $80 con una desviación estándar de $5.
Datos: - \(SMA(20)=80\) - \(\sigma=5\) - \(k=2\)
\[ \text{Banda Superior} = 80 + 2(5) = 80 + 10 = 90 \] \[ \text{Banda Inferior} = 80 - 2(5) = 80 - 10 = 70 \]
Banda superior = 90 Banda inferior = 70
Como \(91 > 90\), el precio cerró por encima de la banda superior.
¿Qué indica esto?
Impulso / ruptura (breakout): si hay tendencia alcista y aumento de volatilidad, cerrar por encima puede ser señal de fortaleza y continuidad.
Sobreextensión y posible retroceso a la media: si el precio venía lateral o sin confirmación, puede haber reversión hacia la banda media.
Sin embargo la información es escasa, podemos decir que es un evento de breakout, pero la dirección que pueda tomar el activo no es segura.
Razonamiento del estudiante:
“Está en 91 arriba de la banda superior (90), entonces debo vender porque está garantizado que bajará”.
Errores principales
Ningún indicador técnico garantiza un movimiento. Las bandas describen distribución/volatilidad, no una ley física.
En tendencias fuertes, el precio puede caminar por la banda superior (“walk the band”) y seguir subiendo. Vender “por tocar” puede sacarte de una tendencia ganadora.
No evalúa si las bandas se están expandiendo (volatilidad creciente, típico de continuación) o si el movimiento es un “spike” aislado.
Decisiones de trading deben incluir criterio de entrada/salida, stop-loss, tamaño de posición, no solo “vendo ya”.
¿Qué análisis adicional haría antes de decidir?
Confirmación de tendencia: ¿la SMA(20) está subiendo? ¿máximos/mínimos crecientes?
Ancho de banda (Bandwidth) y %B:
Volumen y velas: un cierre fuera de banda con volumen alto y vela fuerte suele apoyar breakout; una vela de rechazo (mecha superior grande) puede sugerir agotamiento.
Indicadores complementarios: RSI/MACD para ver si hay divergencias o desaceleración.
Bollinger Squeeze: revisar si antes hubo contracción fuerte de bandas (squeeze).
Conclusión: “Cerrar por encima de la banda superior es una señal de evento extremo, puede ser fortaleza (breakout) o sobreextensión. Antes de vender, se debe evaluar tendencia, expansión o contracción de bandas (squeeze), volumen y señales de agotamiento.”
Considere el siguiente fragmento:
sma_20 <- SMA(precios, n = 20)
ema_20 <- EMA(precios, n = 20)
Objetivo: explicar conceptualmente qué hace cada función, recomendar el indicador más adecuado para detectar cambios rápidos de tendencia y proponer una modificación del código para múltiples ventanas (10, 20 y 50 días), con interpretación práctica.
library(TTR)
library(ggplot2)
library(plotly)
# Simulamos precios de acciones para 100 días
set.seed(123)
dias <- 1:100
precios <- cumsum(runif(100, min = -2, max = 2)) + 100
# Indicadores
sma_20 <- SMA(precios, n = 20)
ema_20 <- EMA(precios, n = 20)
# Dataframe
datos <- data.frame(Dia = dias, Precio = precios, SMA20 = sma_20, EMA20 = ema_20)
# Gráfico base (ggplot)
p <- ggplot(datos, aes(x = Dia)) +
geom_line(aes(y = Precio, colour = "Precio")) +
geom_line(aes(y = SMA20, colour = "SMA 20 dias"), linewidth = 1, na.rm = TRUE) +
geom_line(aes(y = EMA20, colour = "EMA 20 dias"), linewidth = 1, linetype = "dashed", na.rm = TRUE) +
labs(
title = "Precio de Acciones, SMA y EMA de 20 días",
x = "Dia",
y = "Precio"
) +
scale_colour_manual(
"",
values = c("Precio" = "blue", "SMA 20 dias" = "red", "EMA 20 dias" = "green")
) +
theme_minimal()
# Convertir a gráfico interactivo (clic en leyenda para seleccionar líneas)
ggplotly(p, tooltip = c("x", "y", "colour")) |>
layout(
legend = list(
itemclick = "toggle", # clic: muestra/oculta la línea
itemdoubleclick = "toggleothers" # doble clic: aísla una línea
)
)
La gráfica comparativa muestra tres comportamientos claramente diferenciados:
Precio (azul): presenta oscilaciones rápidas y mayor “ruido”.
SMA(20) (rojo): es la curva más “suavizada” y suele ir más retrasada respecto a giros bruscos del precio.
EMA(20) (verde punteada): se acerca más al precio y cambia de dirección con mayor rapidez que la SMA.
Como la SMA trata por igual a todos los datos de la ventana, el impacto de un cambio reciente se diluye entre 20 observaciones, generando mayor rezago.
Como la EMA pondera más lo reciente, incorpora los cambios nuevos con mayor fuerza y por eso muestra menor rezago, ajustándose antes cuando el precio cambia de trayectoria.
La diferencia fundamental entre SMA(20) y EMA(20) es el esquema de ponderación de los datos históricos:
La SMA promedia los últimos 20 precios con pesos iguales, produciendo una serie más suave pero con mayor rezago frente a cambios rápidos; en contraste, la EMA asigna mayor peso a los precios recientes, lo que le permite reaccionar más rápido y seguir más de cerca la dinámica del precio. Esto se observa en la salida del código: ambas series presentan NA al inicio por falta de 20 observaciones y, en la gráfica, la EMA (verde) responde antes que la SMA (roja) ante los movimientos del precio.
Para detectar cambios de tendencia lo más rápido posible en trading de alta frecuencia, se recomienda la EMA porque asigna mayor peso a los precios recientes, lo que reduce el rezago (lag) y hace que la señal reaccione antes que la SMA, la cual promedia con pesos iguales y por eso “llega tarde” a los giros. Como punto operativo clave, la EMA también es más sensible al ruido intradía y puede generar señales falsas en mercados laterales, por lo que conviene acompañarla de otros indicadores para lograr un equilibrio entre la velocidad de detección y precisión en escenarios de trading de alta frecuencia.
library(TTR)
library(ggplot2)
library(dplyr)
library(tidyr)
library(plotly)
# Simulamos precios de acciones para 100 días
set.seed(123)
dias <- 1:100
precios <- cumsum(runif(100, min = -2, max = 2)) + 100
# Períodos solicitados
periodos <- c(10, 20, 50)
# Calculamos SMA y EMA para cada período
sma_list <- lapply(periodos, function(n) SMA(precios, n = n))
ema_list <- lapply(periodos, function(n) EMA(precios, n = n))
# Construimos el dataframe con nombres claros
datos <- data.frame(Dia = dias, Precio = precios) %>%
bind_cols(setNames(as.data.frame(sma_list), paste0("SMA", periodos))) %>%
bind_cols(setNames(as.data.frame(ema_list), paste0("EMA", periodos)))
# Pasamos a formato largo (incluimos también Precio para que sea una línea seleccionable en la leyenda)
datos_long <- datos %>%
pivot_longer(
cols = -Dia,
names_to = "Indicador",
values_to = "Valor"
) %>%
mutate(
Tipo = case_when(
Indicador == "Precio" ~ "Precio",
grepl("^EMA", Indicador) ~ "EMA",
grepl("^SMA", Indicador) ~ "SMA",
TRUE ~ "Otro"
)
)
# Gráfico base (ggplot)
p <- ggplot(datos_long, aes(x = Dia, y = Valor, colour = Indicador)) +
geom_line(aes(linetype = Tipo), linewidth = 1, na.rm = TRUE) +
scale_linetype_manual(values = c("Precio" = "solid", "SMA" = "solid", "EMA" = "dashed")) +
labs(
title = "Precio de Acciones, SMA y EMA (10, 20 y 50 días)",
x = "Día",
y = "Precio",
colour = "",
linetype = ""
) +
theme_minimal()
# Convertir a interactivo: clic en leyenda para mostrar/ocultar líneas, doble clic para aislar una
ggplotly(p, tooltip = c("x", "y", "colour")) |>
layout(
legend = list(
itemclick = "toggle",
itemdoubleclick = "toggleothers"
)
)
Comparar SMA y EMA con períodos de 10, 20 y 50 días permite analizar el precio en corto, medio y largo plazo. La ventana de 10 días reacciona rápido a cambios recientes pero es más sensible al ruido; la de 20 días ofrece un balance entre rapidez y suavizado; y la de 50 días muestra la tendencia estructural con mayor estabilidad, aunque con más rezago. Al observar las tres simultáneamente, se puede distinguir si un movimiento es solo de corto plazo (afecta sobre todo a 10) o si corresponde a una tendencia más consistente (cuando también se refleja en 20 y 50). Además, al comparar EMA vs SMA, se evidencia que la EMA suele ajustarse antes (más sensible a lo reciente), mientras que la SMA suaviza más y confirma tendencias con mayor estabilidad.
Indicadores usados: MACD(12, 26, 9), Bandas de Bollinger \(\big(SMA(20)\pm 2\sigma\big)\) y RSI(14).
La estrategia busca operar un activo volátil identificando extremos de precio (Bandas de Bollinger), confirmando condición de sobreventa/sobrecompra (RSI) y validando que exista un cambio real de momentum (MACD). La entrada se realiza solo cuando las tres señales coinciden, con el objetivo de reducir señales falsas.
Se abre una posición larga (compra) cuando se cumplan simultáneamente:
Bandas de Bollinger (condición de
extremo):
El precio toca o cierra por debajo de la banda
inferior, lo cual sugiere una caída fuerte respecto a la
volatilidad reciente (posible sobreventa relativa).
RSI(14) (confirmación de sobreventa y
giro):
El RSI se encuentra en sobreventa \((RSI <
30)\) y posteriormente cruza hacia arriba el
nivel 30, lo que indica que la presión vendedora empieza a perder
fuerza.
MACD(12,26,9) (confirmación de momentum):
La línea MACD cruza por encima de la línea de señal,
confirmando que el momentum cambia a favor del alza.
Regla de robustez (opcional, recomendable en activos muy volátiles): exigir que el precio vuelva a cerrar dentro de las bandas después de haber tocado/cerrado por debajo de la banda inferior. Esto ayuda a evitar compras en plena caída (“knife catching”).
Se cierra la posición (venta) si ocurre al menos una de las siguientes condiciones:
RSI (zona de sobrecompra):
Si el RSI alcanza \(RSI > 70\), lo
cual sugiere un nivel relativamente alto y posible agotamiento del
movimiento.
MACD (pérdida de momentum):
Si el MACD realiza un cruce bajista (MACD cae por
debajo de la señal), indicando debilitamiento del impulso
alcista.
Salida por tiempo (control adicional): si después de la entrada el precio no muestra recuperación (por ejemplo, no alcanza la banda media) dentro de un número razonable de velas, se recomienda cerrar para evitar quedar atrapado en rango lateral.
La gestión del riesgo se basa en adaptar el stop a la volatilidad (Bandas) y al momentum (MACD/RSI).
Ubicar el stop por debajo de la banda inferior,
dejando un margen adicional acorde al nivel de volatilidad.
Una forma práctica es calcular el ancho de banda:
\[ \text{Ancho}=\text{Banda Superior}-\text{Banda Inferior} \]
y colocar el stop algunos puntos por debajo de la banda inferior (por ejemplo, un porcentaje del ancho de banda).
Definir un porcentaje máximo de pérdida por operación (ej.: 1% del capital), calculando el tamaño de la posición según la distancia entre entrada y stop. Esto evita que una sola operación afecte de forma significativa el portafolio.
En una tendencia alcista fuerte, el precio puede permanecer cerca de la banda superior y el RSI puede mantenerse elevado durante varios periodos. En este caso, “sobrecompra” no implica reversión inmediata.
Mitigación: - Operar a favor de la tendencia: por ejemplo, solo tomar compras si el precio está por encima de la \(SMA(20)\) o si la \(SMA(20)\) tiene pendiente positiva. - Exigir confirmación adicional del MACD (por ejemplo, que el MACD se mantenga positivo o que el histograma aumente).
En rangos laterales con alta volatilidad intradía, el MACD puede cruzar repetidamente (whipsaws) y generar entradas/salidas poco eficientes.
Mitigación: - Evitar operar cuando no hay dirección clara: por ejemplo, cuando la \(SMA(20)\) está plana. - Exigir confirmación con cierre dentro de bandas y/o expansión de volatilidad tras un período de baja volatilidad.
En activos volátiles, eventos externos pueden provocar movimientos bruscos que invalidan señales técnicas.
Mitigación: - Usar stop-loss disciplinado y limitar exposición. - Evitar operar en momentos de anuncios relevantes o aumentar los filtros de confirmación.
La estrategia integra:
Al exigir que las tres condiciones se cumplan conjuntamente, se busca reducir entradas impulsivas y mejorar la calidad de las señales en un activo volátil.
El documento menciona diversas limitaciones de los indicadores técnicos.
Desarrolle un ensayo breve (máximo 300 palabras) que aborde:
¿Por qué los indicadores técnicos son herramientas “retardadas” (lagging indicators)? Explique con un ejemplo concreto.
En mercados con “saltos de precio” (gaps) causados por noticias inesperadas (ej: aprobación de un medicamento, cambio regulatorio), ¿por qué fallan los indicadores técnicos tradicionales?
Proponga dos estrategias complementarias que un analista de riesgo podría implementar para compensar estas limitaciones (no puede ser simplemente “usar análisis fundamental”).
Los indicadores técnicos se clasifican como herramientas retardadas (lagging) porque se calculan a partir de datos históricos y, al incorporar promedios y suavizados, confirman los cambios después de que el precio ya se ha desplazado. Un ejemplo representativo es el MACD, cuya línea de señal se obtiene mediante una EMA aplicada al propio indicador; dicho suavizado reduce ruido, pero introduce rezago en los cruces de compra/venta.En términos prácticos, si el precio gira hoy (p. ej., tras una caída, rebota con fuerza), el cruce alcista puede aparecer varios periodos más tarde, cuando parte del rebote ya ocurrió, generando entradas menos eficientes y salidas tardías.
En presencia de saltos de precio (gaps) por noticias inesperadas, la limitación se intensifica porque el salto rompe la continuidad del proceso: los indicadores recalculan “a posteriori” con observaciones que ya incorporan el evento, sin capacidad predictiva intrínseca. En mercados direccionales, el RSI puede permanecer en zonas extremas durante periodos prolongados, por lo que una lectura aislada de sobrecompra o sobreventa puede inducir señales engañosas. De forma análoga, el Bollinger Squeeze anticipa expansión de volatilidad, pero no determina la dirección; un gap puede producir lecturas extremas sin una señal concluyente por sí sola.
Para compensar estas restricciones, se recomienda realizar gestión cuantitativa del riesgo como el dimensionamiento por volatilidad, reglas explícitas de stop-loss/take-profit, límites de pérdida y protocolos de pausa ante gaps, dado que el análisis técnico apoya decisiones de entrada/salida y control del riesgo. Además se recomienda realizar filtros de régimen y confirmación (Tendencia–volatilidad–momentum), evitando conclusiones deterministas, ya que la interpretación es parcialmente subjetiva y no existe garantía de repetición perfecta.