bugfixing

This commit is contained in:
MuslemRahimi 2025-02-19 22:48:51 +01:00
parent 52420a61cf
commit 437fb98b98

View File

@ -4,11 +4,10 @@ import aiohttp
import sqlite3 import sqlite3
from datetime import datetime from datetime import datetime
from ml_models.prophet_model import PricePredictor from ml_models.prophet_model import PricePredictor
import yfinance as yf
import pandas as pd import pandas as pd
from tqdm import tqdm from tqdm import tqdm
import concurrent.futures import concurrent.futures
import orjson
def convert_symbols(symbol_list): def convert_symbols(symbol_list):
converted_symbols = [] converted_symbols = []
@ -27,22 +26,37 @@ async def save_json(symbol, data):
with open(f"json/price-analysis/{symbol}.json", 'w') as file: with open(f"json/price-analysis/{symbol}.json", 'w') as file:
ujson.dump(data, file) ujson.dump(data, file)
async def download_data(ticker, start_date, end_date): async def download_data(ticker: str, start_date: str, end_date: str):
try: try:
df = yf.download(ticker, start=start_date, end=end_date, interval="1d") with open(f"json/historical-price/max/{ticker}.json", "r") as file:
df = df.reset_index() data = orjson.loads(file.read())
df = df[['Date', 'Adj Close']]
df = df.rename(columns={"Date": "ds", "Adj Close": "y"}) df = pd.DataFrame(data)
if len(df) > 252*2: #At least 2 years of history is necessary
q_high= df["y"].quantile(0.99) # Rename columns to ensure consistency
df = df.rename(columns={"Date": "ds", "Adj Close": "y", "time": "ds", "close": "y"})
# Ensure correct data types
df["ds"] = pd.to_datetime(df["ds"])
df["y"] = df["y"].astype(float)
# Convert start_date and end_date from string to datetime
start_date = pd.to_datetime(start_date, format="%Y-%m-%d")
end_date = pd.to_datetime(end_date, format="%Y-%m-%d")
# Filter data based on start_date and end_date
df = df[(df["ds"] >= start_date) & (df["ds"] <= end_date)]
# Apply filtering logic if enough data exists
if len(df) > 252 * 2: # At least 2 years of history is necessary
q_high = df["y"].quantile(0.99)
q_low = df["y"].quantile(0.01) q_low = df["y"].quantile(0.01)
df = df[(df["y"] > q_low)] df = df[(df["y"] > q_low) & (df["y"] < q_high)]
df = df[(df["y"] < q_high)]
#df['y'] = df['y'].rolling(window=10).mean() return df
#df = df.dropna()
return df
except Exception as e: except Exception as e:
print(e) print(f"Error processing {ticker}: {e}")
return None
async def process_symbol(ticker, start_date, end_date): async def process_symbol(ticker, start_date, end_date):
try: try: