Simulación de líneas de tendencia en Euro/dolar con Python

in #spanish19 hours ago

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
.

image.png