remove outliers in price targets

This commit is contained in:
MuslemRahimi 2024-11-01 10:30:35 +01:00
parent 0b99b1a130
commit 6294627632

View File

@ -18,6 +18,7 @@ api_key = os.getenv('BENZINGA_API_KEY')
fin = financial_data.Benzinga(api_key)
query_template = """
SELECT date,close
FROM "{ticker}"
@ -60,11 +61,15 @@ def get_summary(res_list):
# Collect all pt_current values for each analyst
latest_pt_current[analyst_name].append(pt_current_value)
except (ValueError, TypeError):
print(f"Invalid pt_current value for analyst '{analyst_name}': {item['pt_current']}")
print(f"Invalid pt_current value for analyst '{analyst_name}': {item['adjusted_pt_current']}")
# Compute statistics for price targets
pt_current_values = [val for sublist in latest_pt_current.values() for val in sublist]
#remove outliers to keep high and low price target reasonable
q1, q3 = np.percentile(pt_current_values, [25, 75])
iqr = q3 - q1
pt_current_values = [x for x in pt_current_values if (q1 - 1.5 * iqr) <= x <= (q3 + 1.5 * iqr)]
# Compute different price target metrics if there are values, otherwise set to 0
if pt_current_values:
median_pt_current = statistics.median(pt_current_values)
@ -297,10 +302,10 @@ try:
with open(f"json/analyst/all-analyst-data.json", 'r') as file:
analyst_stats_list = ujson.load(file)
chunk_size = len(stock_symbols) // 40 # Divide the list into N chunks
chunk_size = len(stock_symbols) // 100 # Divide the list into N chunks
chunks = [stock_symbols[i:i + chunk_size] for i in range(0, len(stock_symbols), chunk_size)]
#chunks = [['CMG']]
#chunks = [['NVDA']]
for chunk in chunks:
run(chunk, analyst_stats_list, con)