diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 5cb6f0fa..c2883e96 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -44,6 +44,7 @@ import Menu from "lucide-svelte/icons/menu"; import Stock from "lucide-svelte/icons/chart-candlestick"; import Calendar from "lucide-svelte/icons/calendar"; + import Analyst from "lucide-svelte/icons/chart-no-axes-column"; import Flow from "lucide-svelte/icons/tornado"; import HandShake from "lucide-svelte/icons/handshake"; import Layers from "lucide-svelte/icons/layers"; @@ -353,29 +354,9 @@ >
- + - +
+
+ + + + + Analyst + + + + + + + + +
+
@@ -574,6 +610,7 @@
+
@@ -1026,6 +1063,43 @@
+
+ + + + + Analyst + + + + + + +
+ +
@@ -1065,19 +1139,7 @@ class="text-[1rem] text-muted dark:text-white ml-4 mt-4" >Economic Calendar - +
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 0c1e0b00..f05309ef 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -106,12 +106,12 @@ class="text-center mb-10 relative w-fit flex justify-center m-auto text-white" >
-
- Option Contract Lookup + Analysts Realtime Flow
{ + const getData = async () => { + const { apiURL, apiKey, user } = locals; + + const response = await fetch(apiURL + "/analyst-flow", { + method: "GET", + headers: { + "Content-Type": "application/json", + "X-API-KEY": apiKey, + }, + }); + + let output = await response.json(); + + output = !["Pro", "Plus"]?.includes(user?.tier) ? output?.slice(0, 6) : output; + + return output; + }; + + // Make sure to return a promise + return { + getData: await getData(), + }; +}; diff --git a/src/routes/analysts/analyst-flow/+page.svelte b/src/routes/analysts/analyst-flow/+page.svelte new file mode 100644 index 00000000..070e94ed --- /dev/null +++ b/src/routes/analysts/analyst-flow/+page.svelte @@ -0,0 +1,427 @@ + + + + +
+ + +
+
+
+
+
+

+ Wallstreet Analyst Live Flow +

+
+ + + +
+
+ + + + + + {#each stockList as item, index} + + + + + + + + + + + + + + + + + + {/each} + +
+
{item?.analystScore?.toFixed(1)}
+ +
+ {item?.analystName} + + {item?.symbol} + + {item?.name?.length > charNumber + ? item?.name?.slice(0, charNumber) + "..." + : item?.name} + +
+ {item?.action}: + + {item?.rating_current} + +
+
+
+ {#if Math?.ceil(item?.adjusted_pt_prior) !== 0} + {Math?.ceil(item?.adjusted_pt_prior)} + + {Math?.ceil(item?.adjusted_pt_current)} + {:else if Math?.ceil(item?.adjusted_pt_current) !== 0} + {Math?.ceil(item?.adjusted_pt_current)} + {:else} + n/a + {/if} +
+
+ {item?.upside !== null ? item?.upside + "%" : "n/a"} + + {new Date(item?.date).toLocaleString("en-US", { + month: "short", + day: "numeric", + year: "numeric", + daySuffix: "2-digit", + })} +
+
+
+ + +
+
+
+

+ Analyst Star Rankings +

+

+ Our analyst star rankings are based on these four factors +

+
+
+
+
+
+
+ +
+ Success Rate +
+
+ The percentage of ratings that are profitable. +
+
+
+
+
+ +
+ Average Return +
+
+ The average percentage return within one year of the + rating. +
+
+
+
+
+ +
+ Rating Count +
+
+ The more ratings the analyst has provided, the higher the + score. +
+
+
+
+
+ +
+ Recency +
+
+ Ratings provided within the past year contribute to a + higher score. +
+
+
+
+
+
+
+
+
+
+
diff --git a/src/routes/sitemaps/[slug]/+server.ts b/src/routes/sitemaps/[slug]/+server.ts index 54c9891a..4cfd8ff6 100644 --- a/src/routes/sitemaps/[slug]/+server.ts +++ b/src/routes/sitemaps/[slug]/+server.ts @@ -65,6 +65,7 @@ const pages = [ { title: "/politicians/flow-data" }, { title: "/analysts" }, { title: "/analysts/top-stocks" }, + { title: "/analysts/analyst-flow" }, { title: "/heatmap" }, { title: "/market-flow" }, { title: "/market-flow/sector-flow" },