From 8929bcf74ccfa87139321e871386be0f5260f04b Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Mon, 10 Feb 2025 22:58:09 +0100 Subject: [PATCH] update price reaction page --- .../statistics/price-reaction/+page.svelte | 145 +++++++++++++++++- 1 file changed, 143 insertions(+), 2 deletions(-) diff --git a/src/routes/stocks/[tickerID]/statistics/price-reaction/+page.svelte b/src/routes/stocks/[tickerID]/statistics/price-reaction/+page.svelte index 31a7fa33..8f5015a3 100644 --- a/src/routes/stocks/[tickerID]/statistics/price-reaction/+page.svelte +++ b/src/routes/stocks/[tickerID]/statistics/price-reaction/+page.svelte @@ -6,7 +6,40 @@ export let data; - let rawData = data?.getData || []; + let rawData = data?.getData?.history || []; + let earningsData = data?.getData?.stats || {}; + + // Calculate metrics + function calculateMetrics(data) { + if (!data || data.length === 0) + return { avgPriceImpact: 0, volatilityImpact: 0 }; + + const nextDayChanges = data + ?.map((item) => item?.forward_2_days_change_percent) + ?.filter((change) => change !== undefined); + + // Average price impact + const avgPriceImpact = + nextDayChanges?.reduce((sum, change) => sum + change, 0) / + nextDayChanges?.length; + + // Volatility impact (average absolute range) + const volatilityImpact = + data.reduce((sum, item) => { + if (item?.high && item?.low && item?.close) { + const range = ((item.high - item.low) / item.close) * 100; + return sum + range; + } + return sum; + }, 0) / data.length; + + return { + avgPriceImpact: avgPriceImpact?.toFixed(1), + volatilityImpact: volatilityImpact?.toFixed(1), + }; + } + + const metrics = calculateMetrics(rawData); function checkTime(timeString) { if (!timeString) { @@ -53,11 +86,119 @@ {#if rawData?.length !== 0 && rawData?.at(0)?.high !== undefined} -
+
+
+
+ EPS Beats Estimate + +
+
+ {earningsData.positiveEpsPercent}% +
+ {`${earningsData?.positiveEpsSurprises}/${earningsData?.totalReports}`} + quarters + + {earningsData?.positiveEpsSurprises > + earningsData?.totalReports / 2 + ? "Above Average" + : "Below Average"} + +
+
+
+ +
+
+ Revenue Beats Estimate + +
+
+ {earningsData.positiveRevenuePercent}% +
+ {`${earningsData?.positiveRevenueSurprises}/${earningsData?.totalReports}`} + quarters + + {earningsData?.positiveRevenueSurprises > + earningsData?.totalReports / 2 + ? "Above Average" + : "Below Average"} + +
+
+
+ +
+
+ Avg. Price Impact + +
+
+ {metrics.avgPriceImpact >= 0 + ? "+" + : ""}{metrics.avgPriceImpact}% +
+ Next Day + + {metrics.avgPriceImpact >= 0 ? "Positive" : "Negative"} Trend + +
+
+
+ +
+
+ Volatility Impact + +
+
+ ±{metrics.volatilityImpact}% +
+ Range + + {Number(metrics.volatilityImpact) > 3 ? "High" : "Normal"} + Impact + +
+
+
+
+ +
+