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}")
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.