Warum funktioniert mein Python-Skript manchmal, andere jedoch nicht? Es scheint eine Verzögerung zu geben, bis es funktiPython

Python-Programme
Guest
 Warum funktioniert mein Python-Skript manchmal, andere jedoch nicht? Es scheint eine Verzögerung zu geben, bis es funkti

Post by Guest »

Hallo, ich habe den folgenden Code zusammengestellt, um mir die Höchst- und Tiefststände der vergangenen Tage anzusehen und ihn dann mit dem Vortag zu vergleichen, um zu sehen, was für ein Tag es im Hinblick auf die Börse ist.
Ich habe jedoch Probleme damit, dass es dauerhaft funktioniert, und kann herausfinden, warum.
Der Fehler, der zurückkommt, ist unten, nach dem Code, aber nach etwa 5 Minuten funktioniert es dann , es ist sehr seltsam und ich kann nicht herausfinden, wo das Problem liegt.
Ich verwende Visual Studio und ich muss zugeben, dass dies das erste Mal ist, dass ich Python verwende. Es kann also sein, dass etwas offensichtlich ist, aber ich würde mich sehr über Ratschläge von denen freuen, die mehr wissen.

Code: Select all

import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta
import requests
from bs4 import BeautifulSoup

# Function to fetch S&P 500 tickers from Wikipedia
def fetch_sp500_tickers():
url = "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table', {'class': 'wikitable'})
tickers = []
for row in table.find_all('tr')[1:]:
ticker = row.find_all('td')[0].text.strip()
tickers.append(ticker)
return tickers

# List of known bank holidays
bank_holidays = [
datetime(2025, 1, 1).date(),
datetime(2025, 1, 20).date(),
datetime(2025, 2, 17).date(),
datetime(2025, 4, 18).date(),
datetime(2025, 5, 26).date(),
datetime(2025, 6, 19).date(),
datetime(2025, 7, 4).date(),
datetime(2025, 9, 1).date(),
datetime(2025, 11, 27).date(),
datetime(2025, 12, 25).date()
]

# Calculate last three unique market open days excluding today
today = datetime.now().date()
last_three_days = []
for i in range(1, 4):
day = today - timedelta(days=i)
while day.weekday() >= 5 or day in bank_holidays:
day -= timedelta(days=1)
last_three_days.append(day)

# Fetch S&P 500 tickers
tickers = fetch_sp500_tickers()

# Processing each ticker
for ticker in tickers:
try:
# Fetch data from the last 3 days
start_date = last_three_days[2]
end_date = today
data_full = yf.download(ticker, start=start_date, end=end_date)

# Ensure there are at least two days of data
if len(data_full) < 2:
print(f"{ticker} - Not enough data")
continue

# Get the high values for the two closest days to today
high_day_1 = data_full['High'].iloc[-2] if len(data_full) >= 2 else None
high_day_2 = data_full['High'].iloc[-1] if len(data_full) >= 1 else None

# Get the low values for the two closest days to today
low_day_1 = data_full['Low'].iloc[-2] if len(data_full) >= 2 else None
low_day_2 = data_full['Low'].iloc[-1] if len(data_full) >= 1 else None

# Calculate differences
difference_high = float(high_day_2.iloc[0]) - float(high_day_1.iloc[0]) if high_day_1 is not None and high_day_2 is not None else None
difference_low = float(low_day_2.iloc[0]) - float(low_day_1.iloc[0]) if low_day_1 is not None and low_day_2 is not None else None

# Check condition
if difference_high is not None and difference_low is not None:
if difference_high < 0 and difference_low > 0:
result = "Inside Day"
elif difference_high > 0 and difference_low < 0:
result = "Outside Day"
elif difference_high > 0 and difference_low > 0:
result = "2 Up"
elif difference_high < 0 and difference_low < 0:
result = "2 Down"
else:
result = "No Pattern"
print(f"{ticker} - High difference: {difference_high:.2f}, Low difference: {difference_low:.2f}, Pattern: {result}")
else:
print(f"{ticker} - Insufficient data for pattern recognition")

except Exception as e:
print(f"{ticker} - Error: {e}")
Der Fehler ist:

1 Fehler beim Herunterladen:
['ABT']: JSONDecodeError(' Erwarteter Wert: Zeile 1 Spalte 1 (Zeichen 0)')
ABT – Nicht genügend Daten
[100 % **] 1 von 1 abgeschlossen

Idealerweise würde ich das Skript am liebsten einfach ausführen, aber die Verzögerung macht dies sehr schwierig.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post