Heim >Backend-Entwicklung >Python-Tutorial >Python-Code, der ein Aktienkursdiagramm für die letzten n Tage generiert.

Python-Code, der ein Aktienkursdiagramm für die letzten n Tage generiert.

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-21 14:47:02728Durchsuche

Python code that generates a stock price chart for the last n days.

Hier ist eine detaillierte Beschreibung der einzelnen Teile des Codes:

Bibliotheken importieren:

matplotlib.pyplot wird zum Erstellen von Plots verwendet.
yahooquery.Ticker wird verwendet, um historische Aktiendaten von Yahoo Finance abzurufen.
datetime und timedelta werden zur Datumsmanipulation verwendet.
Pandas wird für die Datenverarbeitung verwendet.
pytz wird für die Arbeit mit Zeitzonen verwendet.
os wird für Dateisystemoperationen verwendet.

Funktion plot_stock_last_n_days:

Funktionsparameter:
Symbol: der Börsenticker (z. B. „NVDA“).
n_days: die Anzahl der Tage, für die historische Daten angezeigt werden.
Dateiname: der Name der Datei, in der der Plot gespeichert wird.
Zeitzone: die Zeitzone für die Anzeige der Daten.

der Datumsbereich:

Das aktuelle Datum und das Startdatum des Zeitraums werden basierend auf n_Tagen berechnet.

Daten abrufen:

yahooquery wird verwendet, um historische Bestandsdaten für den angegebenen Zeitraum abzurufen.

Datenverfügbarkeit prüfen:

Wenn keine Daten verfügbar sind, wird eine Meldung gedruckt und die Funktion beendet.

Datenverarbeitung:

Der Index der Daten wird in das Datum/Uhrzeit-Format konvertiert und die Zeitzone wird eingestellt.
Wochenenden (Samstage und Sonntage) werden herausgefiltert.
Es werden prozentuale Änderungen der Schlusskurse berechnet.

Erstellen und Konfigurieren des Plots:

Es wird ein Hauptgrundstück mit Schlusskursen erstellt.
Dem Diagramm werden Anmerkungen hinzugefügt, die Schlusskurse und prozentuale Änderungen anzeigen.
X- und Y-Achsen werden konfiguriert, Datumsangaben werden formatiert und Gitterlinien werden hinzugefügt.
Ein zusätzlicher Plot für das Handelsvolumen wurde hinzugefügt, mit unterschiedlichen Farben für positive und negative Änderungen der Schlusskurse.

Wasserzeichen hinzufügen:

Wasserzeichen werden in der unteren linken und oberen rechten Ecke des Diagramms hinzugefügt.

Plot speichern und anzeigen:

Der Plot wird als Bilddatei mit dem angegebenen Dateinamen gespeichert und angezeigt.

Beispielverwendung:

Die Funktion wird mit dem Ticker „NVDA“ (NVIDIA) aufgerufen, zeigt Daten für die letzten 14 Tage an, speichert das Diagramm als „output.png“ und verwendet die GMT-Zeitzone.

Zusammenfassend lässt sich sagen, dass der Code eine visuelle Darstellung historischer Aktiendaten generiert, einschließlich Schlusskursen und Handelsvolumina, mit Anmerkungen zu prozentualen Änderungen und Zeitzonenüberlegungen.

import matplotlib.pyplot as plt
from yahooquery import Ticker
from datetime import datetime, timedelta
import matplotlib.dates as mdates
import os
import pandas as pd
import pytz

def plot_stock_last_n_days(symbol, n_days=30, filename='stock_plot.png', timezone='UTC'):
    # Define the date range
    end_date = datetime.now(pytz.timezone(timezone))
    start_date = end_date - timedelta(days=n_days)

    # Convert dates to the format expected by Yahoo Finance
    start_date_str = start_date.strftime('%Y-%m-%d')
    end_date_str = end_date.strftime('%Y-%m-%d')

    # Fetch historical data for the last n days
    ticker = Ticker(symbol)
    historical_data = ticker.history(start=start_date_str, end=end_date_str, interval='1d')

    # Check if the data is available
    if historical_data.empty:
        print("No data available.")
        return

    # Ensure the index is datetime for proper plotting and localize to the specified timezone
    historical_data.index = pd.to_datetime(historical_data.index.get_level_values('date')).tz_localize('UTC').tz_convert(timezone)

    # Filter out weekends
    historical_data = historical_data[historical_data.index.weekday < 5]

    # Calculate percentage changes
    historical_data['pct_change'] = historical_data['close'].pct_change() * 100

    # Ensure the output directory exists
    output_dir = 'output'
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # Adjust the filename to include the output directory
    filename = os.path.join(output_dir, filename)

    # Plotting the closing price
    fig, ax1 = plt.subplots(figsize=(10, 5))
    ax1.plot(historical_data.index, historical_data['close'], label='Close Price', color='blue', marker='o')

    # Annotate each point with its value and percentage change
    for i in range(1, len(historical_data)):
        date = historical_data.index[i]
        close = historical_data['close'].iloc[i]
        pct_change = historical_data['pct_change'].iloc[i]
        color = 'green' if pct_change > 0 else 'red'
        ax1.text(date, close, f'{close:.2f}\n({pct_change:.2f}%)', fontsize=9, ha='right', color=color)

    # Set up daily gridlines and print date for every day
    ax1.xaxis.set_major_locator(mdates.DayLocator(interval=1))
    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))

    ax1.set_xlabel('Date')
    ax1.set_ylabel('Price (USD)')
    ax1.set_title(f'{symbol} Stock Price - Last {n_days} Days')
    ax1.legend(loc='upper left')
    ax1.grid(True)
    ax1.tick_params(axis='x', rotation=80)
    fig.tight_layout()

    # Adding the trading volume plot
    ax2 = ax1.twinx()
    calm_green = (0.6, 1, 0.6)  # Calm green color
    calm_red = (1, 0.6, 0.6)    # Calm red color
    colors = [calm_green if historical_data['close'].iloc[i] > historical_data['open'].iloc[i] else calm_red for i in range(len(historical_data))]
    ax2.bar(historical_data.index, historical_data['volume'], color=colors, alpha=0.5, width=0.8)
    ax2.set_ylabel('Volume')
    ax2.tick_params(axis='y')

    # Format y-axis for volume in millions
    def millions(x, pos):
        'The two args are the value and tick position'
        return '%1.0fM' % (x * 1e-6)

    ax2.yaxis.set_major_formatter(plt.FuncFormatter(millions))

    # Adjust the visibility and spacing of the volume axis
    fig.subplots_adjust(right=0.85)
    ax2.spines['right'].set_position(('outward', 60))
    ax2.yaxis.set_label_position('right')
    ax2.yaxis.set_ticks_position('right')

    # Add watermarks
    plt.text(0.01, 0.01, 'medium.com/@dmitry.romanoff', fontsize=12, color='grey', ha='left', va='bottom', alpha=0.5, transform=plt.gca().transAxes)
    plt.text(0.99, 0.99, 'medium.com/@dmitry.romanoff', fontsize=12, color='grey', ha='right', va='top', alpha=0.5, transform=plt.gca().transAxes)

    # Save the plot as an image file
    plt.savefig(filename)
    plt.show()

# Example usage
plot_stock_last_n_days('NVDA', n_days=14, filename='output.png', timezone='GMT')

Das obige ist der detaillierte Inhalt vonPython-Code, der ein Aktienkursdiagramm für die letzten n Tage generiert.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn