¿Cómo trazar Nubes de Ichimoku con Python?

0
8
Nube Ichimoku de TSLA en Python

La Nube Ichimoku es una herramienta poderosa para el análisis técnico. Ayuda a los operadores a identificar tendencias y posibles niveles de soporte o resistencia. En este artículo vamos a mostrar como calcular este indicador con Python.

¿Qué es la Nube Ichimoku?

La Nube Ichimoku, también conocida como Ichimoku Kinko Hyo, es un indicador versátil. Muestra niveles de soporte y resistencia, momento y dirección de la tendencia todo al mismo tiempo. Los operadores la usan para obtener una visión rápida de las tendencias del mercado.

Ejemplo de nube Ichimoku

Pueden obtener más información sobre este indicador técnico en: ¿Que es la Nube Ichimoku?

Fórmula de la Nube Ichimoku

La Nube Ichimoku consta de cinco componentes principales:

  • Línea de Conversión (Tenkan-sen) = (Máximo de 9 días + Mínimo de 9 días) / 2
  • Línea Base (Kijun-sen) = (Máximo de 26 días + Mínimo de 26 días) / 2
  • Span Principal A (Senkou Span A) = (Línea de Conversión + Línea Base) / 2
  • Span Principal B (Senkou Span B) = (Máximo de 52 días + Mínimo de 52 días) / 2
  • Span Retrasado (Chikou Span) = Precio de cierre proyectado 26 días atrás

La “Nube” se forma entre el Span Principal A y el Span Principal B.

Función en Python para la Nube Ichimoku

El siguiente es un código completo en Python para calcular y graficar la Nube Ichimoku usando datos históricos de TSLA (Tesla), con la librería yfinance para obtener los datos y matplotlib para la visualización:

import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
# 1. Descargar datos históricos de TSLA
ticker = "TSLA"
data = yf.download(ticker, start="2023-01-01", end="2024-01-01")
# 2. Función para calcular la Nube Ichimoku
def calcular_ichimoku(high, low, close, periodo_tenkan=9, periodo_kijun=26, periodo_senkou_b=52, desplazamiento=26):
    # Componentes principales
    tenkan_sen = (high.rolling(periodo_tenkan).max() + low.rolling(periodo_tenkan).min()) / 2
    kijun_sen = (high.rolling(periodo_kijun).max() + low.rolling(periodo_kijun).min()) / 2
    senkou_span_a = ((tenkan_sen + kijun_sen) / 2).shift(desplazamiento)
    senkou_span_b = ((high.rolling(periodo_senkou_b).max() + low.rolling(periodo_senkou_b).min()) / 2).shift(desplazamiento)
    chikou_span = close.shift(-desplazamiento)
    return tenkan_sen, kijun_sen, senkou_span_a, senkou_span_b, chikou_span

# 3. Calcular los componentes
data['tenkan_sen'], data['kijun_sen'], data['senkou_span_a'], data['senkou_span_b'], data['chikou_span'] = calcular_ichimoku(data['High'], data['Low'], data['Close'])

# 4. Graficado del indicador
plt.figure(figsize=(14, 7))
plt.plot(data.index, data['Close'], label='Precio de TSLA', color='black', alpha=0.7)
plt.plot(data.index, data['tenkan_sen'], label='Tenkan-sen (Línea de Conversión)', color='blue', linestyle='--')
plt.plot(data.index, data['kijun_sen'], label='Kijun-sen (Línea Base)', color='red', linestyle='--')
plt.plot(data.index, data['chikou_span'], label='Chikou Span (Span Retrasado)', color='green', linestyle=':')

# 5. Relleno de la Nube (Senkou Span A y B)
plt.fill_between(data.index, data['senkou_span_a'], data['senkou_span_b'], where=data['senkou_span_a'] >= data['senkou_span_b'], color='lightgreen', alpha=0.5, label='Nube Alcista')
plt.fill_between(data.index, data['senkou_span_a'], data['senkou_span_b'], where=data['senkou_span_a'] < data['senkou_span_b'], color='lightcoral', alpha=0.5, label='Nube Bajista')

plt.title(f'Nube Ichimoku para {ticker}')
plt.xlabel('Fecha')
plt.ylabel('Precio (USD)')
plt.legend()
plt.grid(True)
plt.show()

¿Qué hace este código?

  1. Datos históricos: Usamos yfinance para descargar precios de TSLA (2023-2024).
  2. Cálculo Ichimoku:
    • Tenkan-sen (Línea de Conversión): Promedio de máximos y mínimos de 9 días.
    • Kijun-sen (Línea Base): Promedio de máximos y mínimos de 26 días.
    • Senkou Span A/B: Forman la “nube” (proyectada 26 días adelante).
    • Chikou Span: Precio de cierre desplazado 26 días atrás.
  3. Visualización:
    • Líneas: Precio de TSLA, Tenkan-sen, Kijun-sen y Chikou Span.

Nube: Relleno verde (alcista) o rojo (bajista) entre Senkou Span A y B.

Veamos como se muestra el indicador en el siguiente ejemplo:

Nube Ichimoku de TSLA en Python

Nube Ichimoku de TSLA en Python

Explicación del código

Ahora vamos a desglosar paso a paso el código para calcular y graficar la Nube Ichimoku en Python, explicando cada bloque y su lógica. Usaremos el ejemplo de TSLA (Tesla) para hacerlo concreto.

Importación de librerías de Python

import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
  • yfinance: Descarga datos históricos de Yahoo Finance (precios de acciones como TSLA).
  • matplotlib.pyplot: Para graficar los componentes de Ichimoku.
  • pandas: Manipula los datos en formato de DataFrame (similar a Excel).

Obtención de datos de precios históricos

ticker = "TSLA"
data = yf.download(ticker, start="2023-01-01", end="2024-01-01")
  • ticker: Símbolo de la acción (en este caso, Tesla).
  • yf.download(): Descarga los precios (Open, High, Low, Close) entre las fechas especificadas.
  • Salida: Un DataFrame data con columnas como High, Low, Close, etc.

Función para el cálculo de la nube Ichimoku

def calcular_ichimoku(high, low, close, periodo_tenkan=9, periodo_kijun=26, periodo_senkou_b=52, desplazamiento=26):
    # Componentes principales
    tenkan_sen = (high.rolling(periodo_tenkan).max() + low.rolling(periodo_tenkan).min()) / 2
    kijun_sen = (high.rolling(periodo_kijun).max() + low.rolling(periodo_kijun).min()) / 2
    senkou_span_a = ((tenkan_sen + kijun_sen) / 2).shift(desplazamiento)
    senkou_span_b = ((high.rolling(periodo_senkou_b).max() + low.rolling(periodo_senkou_b).min()) / 2).shift(desplazamiento)
    chikou_span = close.shift(-desplazamiento)
    return tenkan_sen, kijun_sen, senkou_span_a, senkou_span_b, chikou_span

Explicación de cada componente:

  • Tenkan-sen (Línea de Conversión):
    • Fórmula: Promedio del máximo y mínimo de los últimos 9 días.
    • Código: high.rolling(9).max() + low.rolling(9).min()) / 2.
  • Kijun-sen (Línea Base):
    • Fórmula: Promedio del máximo y mínimo de los últimos 26 días.
    • Código: Similar al Tenkan-sen, pero con rolling(26).
  • Senkou Span A:
    • Fórmula: Promedio del Tenkan-sen y Kijun-sen, desplazado 26 días adelante.
    • Código: ((tenkan_sen + kijun_sen) / 2).shift(26).
  • Senkou Span B:
    • Fórmula: Promedio del máximo y mínimo de los últimos 52 días, desplazado 26 días adelante.
    • Código: rolling(52).max() + rolling(52).min()) / 2).shift(26).
  • Chikou Span (Span Retrasado):
    • Fórmula: Precio de cierre actual, pero graficado 26 días atrás en el tiempo.
    • Código: close.shift(-26).

Aplicación de la función de la nube Ichimoku en los datos de TSLA

data['tenkan_sen'], data['kijun_sen'], data['senkou_span_a'], data['senkou_span_b'], data['chikou_span'] = calcular_ichimoku(data['High'], data['Low'], data['Close'])
  • Se añaden 5 nuevas columnas al DataFrame data con los componentes de Ichimoku.

Graficación de los resultados

plt.figure(figsize=(14, 7))
plt.plot(data.index, data['Close'], label='Precio de TSLA', color='black', alpha=0.7)
plt.plot(data.index, data['tenkan_sen'], label='Tenkan-sen', color='blue', linestyle='--')
plt.plot(data.index, data['kijun_sen'], label='Kijun-sen', color='red', linestyle='--')
plt.plot(data.index, data['chikou_span'], label='Chikou Span', color='green', linestyle=':')

Detalles del gráfico:

  • Precio de TSLA: Línea negra.
  • Tenkan-sen: Línea azul discontinua.
  • Kijun-sen: Línea roja discontinua.
  • Chikou Span: Línea verde punteada.

Código para el llenado de la Nube Ichimoku

plt.fill_between(data.index, data['senkou_span_a'], data['senkou_span_b'], 
                 where=data['senkou_span_a'] >= data['senkou_span_b'], 
                 color='lightgreen', alpha=0.5, label='Nube Alcista')
plt.fill_between(data.index, data['senkou_span_a'], data['senkou_span_b'], 
                 where=data['senkou_span_a'] < data['senkou_span_b'], 
                 color='lightcoral', alpha=0.5, label='Nube Bajista')
  • Nube Alcista (verde): Cuando el Senkou Span A está por encima del Senkou Span B.
  • Nube Bajista (rojo): Cuando el Senkou Span A está por debajo.

Personalización y trazado del gráfico

plt.title(f'Nube Ichimoku para {ticker}')
plt.xlabel('Fecha')
plt.ylabel('Precio (USD)')
plt.legend()
plt.grid(True)
plt.show()
  • Título, ejes y leyenda: Para claridad visual.
  • plt.grid(True): Añade una cuadrícula.
  • plt.show(): Muestra el gráfico.

¿Cómo Interpretar el Gráfico?

  1. Tendencia Alcista:
    • Precio por encima de la nube (verde).
    • Chikou Span por encima del precio pasado.
  2. Tendencia Bajista:
    • Precio por debajo de la nube (roja).
    • Chikou Span por debajo del precio pasado.
  3. Señales de Cruce:
    • Si la Tenkan-sen cruza arriba la Kijun-sen, es señal de compra.

Posibles Mejoras

  • Actualización en Tiempo Real: Usar yfinance con interval=’1d’ para datos más recientes.
  • Backtesting: Integrar con librerías como backtrader para probar estrategias.

 


 

Leave a reply