Simulación de líneas de tendencia en Euro/dolar con Python
Ultimamente estoy probando vibe coding con geminy para aplicar la teoría de Dow al trading:
Se intenta detectar las tendencias primaria de más de dos años, secundaria de meses, y terciaria de días del mercado.
Es importante revisar el volumen, una rotura de tendencia con poco volumen suele ser falsa y fallar.
A continuación, se presenta el script utilizando yfinance para obtener datos reales y matplotlib para la visualización logarítmica.
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
1. Obtención de datos del cruce Euro/Dólar (Forex)
Usamos un periodo largo para detectar la tendencia primaria adecuadamente
ticker = "EURUSD=X"
data = yf.download(ticker, start="2018-01-01", interval="1d")
2. Definición de ventanas temporales según las fuentes
Primaria: > 1 año (~252 días bursátiles)
Secundaria: 2-6 meses (~88 días promedio)
Terciaria: 10-30 días (~20 días promedio)
window_primaria = 252 * 2 # Aproximadamente 2 años
window_secundaria = 88 # Aproximadamente 4 meses
window_terciaria = 20 # Aproximadamente 1 mes
3. Detección de máximos y mínimos (Teoría Dow)
El autor sugiere mirar picos y valles para identificar la dirección
data['Min_Primaria'] = data['Close'].rolling(window=window_primaria, center=True).min()
data['Max_Primaria'] = data['Close'].rolling(window=window_primaria, center=True).max()
data['Min_Secundaria'] = data['Close'].rolling(window=window_secundaria, center=True).min()
data['Max_Secundaria'] = data['Close'].rolling(window=window_secundaria, center=True).max()
data['Min_Terciaria'] = data['Close'].rolling(window=window_terciaria, center=True).min()
data['Max_Terciaria'] = data['Close'].rolling(window=window_terciaria, center=True).max()
4. Visualización en Escala Logarítmica
plt.figure(figsize=(15, 8))
ax = plt.gca()
IMPORTANTE: Escala logarítmica/porcentual como exigen las fuentes
ax.set_yscale('log')
Dibujar el precio de cierre
plt.plot(data.index, data['Close'], label='Precio EUR/USD (Cierre)', color='gray', alpha=0.4)
Dibujar Tendencia Primaria (Largo Plazo)
plt.plot(data.index, data['Min_Primaria'], label='Soporte Primaria (Años)', color='red', linewidth=2)
plt.plot(data.index, data['Max_Primaria'], color='red', linewidth=1, linestyle='--')
Dibujar Tendencia Secundaria (Meses)
plt.plot(data.index, data['Min_Secundaria'], label='Soporte Secundaria (Meses)', color='blue', alpha=0.6)
Dibujar Tendencia Terciaria (Días)
plt.plot(data.index, data['Min_Terciaria'], label='Soporte Terciaria (Días)', color='green', alpha=0.5)
Configuración del gráfico
plt.title('Análisis de Tendencias EUR/USD - Escala Logarítmica (Metodología Llinares/Dow)', fontsize=14)
plt.xlabel('Fecha')
plt.ylabel('Precio (Escala Logarítmica)')
plt.legend(loc='best')
plt.grid(True, which="both", ls="-", alpha=0.2)
Mostrar el gráfico
plt.show()
Consideraciones sobre el script basadas en las fuentes:
Precisión de la escala: El uso de ax.set_yscale('log') cumple con el requisito de que "cada centímetro de altura represente el mismo porcentaje"
. Esto es vital para que las directrices no den "señales falsas" como ocurre en los gráficos lineales
.
Identificación Dow: El script utiliza ventanas móviles para resaltar los soportes (mínimos) y resistencias (máximos). Las fuentes indican que una tendencia es alcista solo si los mínimos se suceden en sentido creciente
.
Uso del volumen: Aunque el script se centra en el precio, las fuentes recuerdan que el volumen debe ser "concordante": aumentar en las subidas y disminuir en las correcciones para confirmar la salud de la tendencia
.
Estrategia: Recuerde que, según el "Decálogo de inversión", nunca se debe operar contra la tendencia primaria detectada por este script
.
