Почему мой скрипт Python иногда работает, а иногда нет? Кажется, есть задержка, чтобы это сработалоPython

Программы на Python
Ответить
Anonymous
 Почему мой скрипт Python иногда работает, а иногда нет? Кажется, есть задержка, чтобы это сработало

Сообщение Anonymous »

Привет, я соединил приведенный ниже код, чтобы просмотреть максимумы и минимумы предыдущих дней, а затем сравнить их с предыдущим днем, чтобы увидеть, какой это день с точки зрения фондового рынка.
Однако у меня возникли проблемы с его стабильной работой, и я могу понять, почему.
Ошибка, которая возвращается, находится ниже, после кода, однако примерно через 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»