Wall Street
Jornada negativa y de cautela, con foco en bonos, petróleo y geopolítica. El mercado sigue en niveles altos históricamente (S&P cerca de máximos recientes), pero con corrección técnica en curso.
Cierres principales:
- Dow Jones: 49,363.88 (-322.24 / -0.65%)
- S&P 500: 7,353.61 (-49.44 / -0.67%)
- Nasdaq Composite: 25,870.71 (-220.02 / -0.84%)
- Russell 2000 (small caps): ≈2,747 (-1.01%)
Los tres índices principales cerraron a la baja por segundo día consecutivo, con el Nasdaq liderando las pérdidas debido a la debilidad en tecnología y semiconductores.
Principales razones del movimiento
- Subida de rendimientos de bonos: El Treasury a 10 años subió a su nivel más alto en más de un año (alrededor de 4.66-4.67%), por preocupaciones inflacionarias persistentes.
- Precios del petróleo elevados: El WTI se mantuvo cerca de $104 y el Brent en $111, por tensiones geopolíticas. Esto alimenta temores de inflación.
- Presión en tech: Continuó la consolidación en semiconductores y tecnología (anticipando earnings de Nvidia mañana). Sectores defensivos como energía, staples y financieros resistieron mejor.
MERVAL y BYMA
El Merval hoy ha retrocedido un -1,47%, en una jornada cercana a los 500 mil millones de pesos negociados sumando los ADRs, en nuestro índice unos 53 millones de BigMacs o el 14,3% del Día después de Santilli.

El rally de ayer de YPF fue rápidamente absorbido y también volvió a ser los más negociado por cerca de 37 mil millones de $ en el BYMA. La suba de GGAL y BBAR de ayer hoy retrocedió de igual modo y magnitud. En el Panel General la moda de volumen ha estado en torno a los 8 millones de $, pauperrimo excepto por A3 mercados que negocio cerca de 800 millones. BHIP y BPAT usualmente tiene negociado en torno a algo menos que un cero kilómetro. Ese panel tiene 20 papales negociando por menos de 10 millones de $.
En el programa CEDEAR el dinero Argentino se oriento a MU que subió un 2% tras perder 16% en pocos días, negocio casi 13 mil millones de $. Otros números fuertes han estado en NVDA, VIST, MELI y MSFT. Entre los ETF fuerte movimiento de volumen en EWZ (BRASIL) con 500% más volumen del habitual, cerca de unos 19 mil millones de $, el ruido político y el rally reciente ha indicado la toma de ganancias de manos grandes.
Ahora un par de desarrollos:

44*BATS:GGAL+17*BATS:BMA+70*BATS:BBAR+37*BATS:YPF+13*BATS:PAM+23*BATS:TGS+96*BATS:CEPU+47*BATS:EDN
En el gráfico vemos esta formula para TradingView que se asemeja al Merval en proporción de cada sector y de activos. Desde su máximo en enero 2025 hasta hoy ha bajado un 30%.
También hemos desarrollado un indicador para TradingView que toma el dato de inflación argentina para el índice Merval y activos Argentinos que cotizan en el país. El indicador abarca entreel presente y cualquier día posterior al 1/1/24, aquello que entre en el gráfico será calculado en pocos segundos:


Aquí el código:
//@version=6
indicator("Brecha de Inflación Argentina vs Activo",
shorttitle="Brecha IPC AR",
overlay=false,
precision=2)
// ============================================================
// INPUTS
// ============================================================
src = input.source(close, "Fuente del activo")
ipc_simbolo = input.symbol("ECONOMICS:ARCPI", "Símbolo del IPC",
tooltip="IPC argentino (INDEC) provisto por el feed de TradingView Economics. " +
"Pine Script no puede consultar directamente la API del BCRA, pero este " +
"feed refleja el mismo dato oficial mensual del INDEC.")
mostrar_activo = input.bool(true, "Mostrar variación nominal del activo", group="Series")
mostrar_ipc = input.bool(true, "Mostrar variación del IPC", group="Series")
mostrar_brecha = input.bool(true, "Mostrar brecha (activo − IPC)", group="Series")
mostrar_real = input.bool(false, "Mostrar retorno real (activo / IPC)", group="Series")
col_activo = input.color(#2962FF, "Activo", group="Colores")
col_ipc = input.color(#FF6D00, "IPC", group="Colores")
col_brecha_p= input.color(#26A69A, "Brecha positiva", group="Colores")
col_brecha_n= input.color(#EF5350, "Brecha negativa", group="Colores")
col_real = input.color(#AB47BC, "Retorno real", group="Colores")
mostrar_tabla = input.bool(true, "Mostrar tabla resumen", group="Tabla")
pos_tabla = input.string("Arriba derecha", "Posición de la tabla",
options=["Arriba derecha","Arriba izquierda","Abajo derecha","Abajo izquierda"], group="Tabla")
// ============================================================
// DATOS DEL IPC
// ============================================================
// El IPC es mensual: pedimos en diario y dejamos que el último valor se sostenga
// entre publicaciones. lookahead_off evita sesgo a futuro.
ipc = request.security(ipc_simbolo, "D", close,
ignore_invalid_symbol=true,
lookahead=barmerge.lookahead_off)
// ============================================================
// ANCLA EN EL INICIO DEL RANGO VISIBLE
// ============================================================
// chart.left_visible_bar_time devuelve el timestamp de la barra más a la izquierda
// visible en pantalla. Cuando el usuario hace zoom/pan, Pine re-ejecuta el script
// completo, así que el ancla se reposiciona automáticamente.
inicio_visible = chart.left_visible_bar_time
var float precio_ref = na
var float ipc_ref = na
var int bar_ref = na
var int time_ref = na
if na(precio_ref) and not na(inicio_visible) and time >= inicio_visible
precio_ref := src
ipc_ref := ipc
bar_ref := bar_index
time_ref := time
// ============================================================
// CÁLCULOS (valores en %)
// ============================================================
var_activo = na(precio_ref) or precio_ref == 0 ? na : (src - precio_ref) / precio_ref * 100
var_ipc = na(ipc_ref) or ipc_ref == 0 ? na : (ipc - ipc_ref) / ipc_ref * 100
brecha = na(var_activo) or na(var_ipc) ? na : var_activo - var_ipc
ret_real = na(var_activo) or na(var_ipc) or (1 + var_ipc/100) == 0 ? na :
((1 + var_activo/100) / (1 + var_ipc/100) - 1) * 100
// ============================================================
// PLOTS
// ============================================================
plot(mostrar_activo ? var_activo : na, "Activo nominal (%)",
color=col_activo, linewidth=2)
plot(mostrar_ipc ? var_ipc : na, "IPC acumulado (%)",
color=col_ipc, linewidth=2)
col_b = brecha >= 0 ? col_brecha_p : col_brecha_n
plot(mostrar_brecha ? brecha : na, "Brecha (pp)",
color=col_b, linewidth=2, style=plot.style_areabr)
plot(mostrar_real ? ret_real : na, "Retorno real (%)",
color=col_real, linewidth=2)
hline(0, "Cero", color=color.new(color.gray, 50), linestyle=hline.style_dashed)
// Marca visual en la barra de inicio
if not na(bar_ref) and bar_index == bar_ref
label.new(bar_index, 0, "▲ Inicio rango",
color=color.new(color.gray, 70),
style=label.style_label_up,
textcolor=color.white,
size=size.small)
// ============================================================
// TABLA RESUMEN
// ============================================================
pos = pos_tabla == "Arriba izquierda" ? position.top_left :
pos_tabla == "Abajo derecha" ? position.bottom_right :
pos_tabla == "Abajo izquierda" ? position.bottom_left :
position.top_right
var table info = table.new(pos, 2, 6,
bgcolor=color.new(color.black, 75),
border_width=1,
border_color=color.new(color.gray, 60))
if mostrar_tabla and barstate.islast
fecha_inicio = na(time_ref) ? "—" : str.format_time(time_ref, "yyyy-MM-dd", syminfo.timezone)
table.cell(info, 0, 0, "Brecha IPC Argentina",
text_color=color.white, bgcolor=color.new(color.blue, 50),
text_size=size.small, text_halign=text.align_center)
table.cell(info, 1, 0, "desde " + fecha_inicio,
text_color=color.white, bgcolor=color.new(color.blue, 50),
text_size=size.small, text_halign=text.align_center)
table.cell(info, 0, 1, "Activo (nominal)", text_color=color.white, text_size=size.small)
table.cell(info, 1, 1, na(var_activo) ? "—" : str.tostring(var_activo, "#.##") + " %",
text_color=col_activo, text_size=size.small, text_halign=text.align_right)
table.cell(info, 0, 2, "IPC acumulado", text_color=color.white, text_size=size.small)
table.cell(info, 1, 2, na(var_ipc) ? "—" : str.tostring(var_ipc, "#.##") + " %",
text_color=col_ipc, text_size=size.small, text_halign=text.align_right)
table.cell(info, 0, 3, "Brecha (pp)", text_color=color.white, text_size=size.small)
table.cell(info, 1, 3, na(brecha) ? "—" : str.tostring(brecha, "+#.##;-#.##") + " pp",
text_color=brecha >= 0 ? col_brecha_p : col_brecha_n,
text_size=size.small, text_halign=text.align_right)
table.cell(info, 0, 4, "Retorno real", text_color=color.white, text_size=size.small)
table.cell(info, 1, 4, na(ret_real) ? "—" : str.tostring(ret_real, "+#.##;-#.##") + " %",
text_color=col_real, text_size=size.small, text_halign=text.align_right)
veredicto = na(brecha) ? "—" : brecha >= 0 ? "Le gana a la inflación" : "Pierde vs inflación"
table.cell(info, 0, 5, "Veredicto", text_color=color.white, text_size=size.small)
table.cell(info, 1, 5, veredicto,
text_color=brecha >= 0 ? col_brecha_p : col_brecha_n,
text_size=size.small, text_halign=text.align_right)
