03-Ichimoku-1

Sat 17 May 2025
# Created: 20250103
import pyutil as pyu
pyu.get_local_pyinfo()
'conda env: ml312-2024; pyv: 3.12.7 | packaged by Anaconda, Inc. | (main, Oct  4 2024, 13:27:36) [GCC 11.2.0]'
print(pyu.ps2("requests"))
requests==2.32.3

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# Step 1: Download historical data
symbol = "^GSPC"  # S&P 500 as an example
start = "2020-01-01"
end = "2023-12-31"
data = yf.download(symbol, start=start, end=end)

# Step 2: Calculate Ichimoku Cloud components
def ichimoku_cloud(data):
    # Conversion Line (Tenkan-sen): (9-period high + 9-period low) / 2
    data['Tenkan-sen'] = (data['High'].rolling(window=9).max() + data['Low'].rolling(window=9).min()) / 2

    # Base Line (Kijun-sen): (26-period high + 26-period low) / 2
    data['Kijun-sen'] = (data['High'].rolling(window=26).max() + data['Low'].rolling(window=26).min()) / 2

    # Leading Span A (Senkou Span A): (Tenkan-sen + Kijun-sen) / 2
    data['Senkou Span A'] = ((data['Tenkan-sen'] + data['Kijun-sen']) / 2).shift(26)

    # Leading Span B (Senkou Span B): (52-period high + 52-period low) / 2
    data['Senkou Span B'] = (data['High'].rolling(window=52).max() + data['Low'].rolling(window=52).min()) / 2
    data['Senkou Span B'] = data['Senkou Span B'].shift(26)

    # Lagging Span (Chikou Span): Close price shifted 26 periods back
    data['Chikou Span'] = data['Close'].shift(-26)

    return data

# Apply Ichimoku Cloud calculation
data = ichimoku_cloud(data)

# Step 3: Plot the Ichimoku Cloud
plt.figure(figsize=(14, 7))

# Plot Close Price
plt.plot(data['Close'], label='Close Price', color='blue')

# Plot Tenkan-sen and Kijun-sen
plt.plot(data['Tenkan-sen'], label='Tenkan-sen (Conversion Line)', color='red', linestyle='--')
plt.plot(data['Kijun-sen'], label='Kijun-sen (Base Line)', color='green', linestyle='--')

# Fill the cloud (Senkou Span A and 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='Bullish Cloud')
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='Bearish Cloud')

# Plot Chikou Span
plt.plot(data['Chikou Span'], label='Chikou Span (Lagging Line)', color='purple', linestyle='-.')

# Customize the plot
plt.title(f'Ichimoku Cloud for {symbol}')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend(loc='best')
plt.grid(True)
plt.show()
[*********************100%***********************]  1 of 1 completed

png



Score: 5

Category: stockmarket