Однако у меня возникли проблемы с его стабильной работой, и я могу понять, почему.
Ошибка, которая возвращается, находится ниже, после кода, однако примерно через 5 минут она работает. , это очень странно, и я не могу понять, в чем проблема.
Я использую Visual Studio и должен признаться, что впервые использую Python, поэтому может быть что-то очевидное, но я бы очень признателен за советы тех, кто знает больше.
Код: Выделить всё
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 Не удалось загрузить:
['ABT']: JSONDecodeError(' Ожидаемое значение: строка 1, столбец 1 (символ 0)')
ABT – недостаточно данных
[100% **] 1 из 1 выполнено
В идеале я бы хотел просто запустить скрипт, однако из-за задержки это сделать очень сложно.
Подробнее здесь: https://stackoverflow.com/questions/793 ... to-be-a-de
Мобильная версия