From 797be0b88b4fd563a9ebe65b9e61cb63610d80ec Mon Sep 17 00:00:00 2001 From: MuslemRahimi Date: Sun, 29 Dec 2024 16:00:12 +0100 Subject: [PATCH] update dark pool page --- .../HistoricalVolume.svelte} | 8 +- .../components/DarkPool/HottestTrades.svelte | 282 ++++++++++++++++++ src/lib/components/DarkPool/PriceLevel.svelte | 211 +++++++++++++ src/lib/components/DarkPoolLevel.svelte | 270 ----------------- .../[tickerID]/dark-pool/+page.server.ts | 6 +- .../stocks/[tickerID]/dark-pool/+page.svelte | 263 ++-------------- 6 files changed, 526 insertions(+), 514 deletions(-) rename src/lib/components/{DarkPool.svelte => DarkPool/HistoricalVolume.svelte} (91%) create mode 100644 src/lib/components/DarkPool/HottestTrades.svelte create mode 100644 src/lib/components/DarkPool/PriceLevel.svelte delete mode 100644 src/lib/components/DarkPoolLevel.svelte diff --git a/src/lib/components/DarkPool.svelte b/src/lib/components/DarkPool/HistoricalVolume.svelte similarity index 91% rename from src/lib/components/DarkPool.svelte rename to src/lib/components/DarkPool/HistoricalVolume.svelte index 0583ae15..8339330e 100644 --- a/src/lib/components/DarkPool.svelte +++ b/src/lib/components/DarkPool/HistoricalVolume.svelte @@ -154,15 +154,15 @@
diff --git a/src/lib/components/DarkPool/HottestTrades.svelte b/src/lib/components/DarkPool/HottestTrades.svelte new file mode 100644 index 00000000..1c5e97fe --- /dev/null +++ b/src/lib/components/DarkPool/HottestTrades.svelte @@ -0,0 +1,282 @@ + + +
+
+
+ + +
+ + {#if isLoaded} + {#if rawData?.length !== 0} +
+
+ Get in realtime the latest hottest trades based on premium. +
+
+ +
+ + + + + + {#each stockList as item, index} + + + + + + + + + + + + + + + + + {/each} + +
+ {item?.rank} + + {formatToNewYorkTime(item?.date)} + + {item?.price} + + {@html abbreviateNumberWithColor(item?.size, false, true)} + + {@html abbreviateNumberWithColor(item?.volume, false, true)} + + {item?.sizeVolRatio?.toFixed(2)}% + + {item?.sizeAvgVolRatio?.toFixed(2)}% + + {@html abbreviateNumberWithColor( + item?.premium, + false, + true, + )} +
+
+ {/if} + {:else} +
+
+ +
+
+ {/if} +
+
diff --git a/src/lib/components/DarkPool/PriceLevel.svelte b/src/lib/components/DarkPool/PriceLevel.svelte new file mode 100644 index 00000000..07ebdc7c --- /dev/null +++ b/src/lib/components/DarkPool/PriceLevel.svelte @@ -0,0 +1,211 @@ + + +
+
+
+ + +
+ + {#if isLoaded} + {#if rawData?.length !== 0} +
+
+ Over the past week, GameStop Corp. has seen an average dark pool + trade size of {@html abbreviateNumberWithColor( + metrics?.avgTradeSize, + false, + true, + )}, a total volume of {@html abbreviateNumberWithColor( + metrics?.totalVolume, + false, + true, + )} and an average premium per trade of {@html abbreviateNumberWithColor( + metrics?.avgPremTrade, + false, + true, + )}, with a total premium of {@html abbreviateNumberWithColor( + metrics?.totalPrem, + false, + true, + )} +
+
+ +
+
+
+ {#each ["Size", "Premium"] as item} + + {/each} +
+ + +
+
+ {/if} + {:else} +
+
+ +
+
+ {/if} +
+
+ + diff --git a/src/lib/components/DarkPoolLevel.svelte b/src/lib/components/DarkPoolLevel.svelte deleted file mode 100644 index a2f0a3e6..00000000 --- a/src/lib/components/DarkPoolLevel.svelte +++ /dev/null @@ -1,270 +0,0 @@ - - -
-
-
- - -
- - {#if isLoaded} - {#if rawData?.length !== 0} - -
- Over the past 12 months, GameStop Corp. has experienced an average - dark pool trading volume of 8.55M shares. Out of this total, an - average of 3.81M shares, constituting approximately 44.52%, were short - volume. -
- -
-
-
- {#each ["Volume", "Size", "Premium"] as item} - - {/each} -
- - -
-
- - - {/if} - {:else} -
-
- -
-
- {/if} -
-
- - diff --git a/src/routes/stocks/[tickerID]/dark-pool/+page.server.ts b/src/routes/stocks/[tickerID]/dark-pool/+page.server.ts index 3398feca..eb017e42 100644 --- a/src/routes/stocks/[tickerID]/dark-pool/+page.server.ts +++ b/src/routes/stocks/[tickerID]/dark-pool/+page.server.ts @@ -10,10 +10,10 @@ export const load = async ({ params, locals }) => { ticker: params.tickerID, }; - const getStockDividend = async () => { + const getPriceLevel = async () => { - const response = await fetch(apiURL + "/stock-dividend", { + const response = await fetch(apiURL + "/dark-pool-level", { method: "POST", headers: { "Content-Type": "application/json", @@ -47,7 +47,7 @@ export const load = async ({ params, locals }) => { // Make sure to return a promise return { - getStockDividend: await getStockDividend(), + getPriceLevel: await getPriceLevel(), getHistoricalDarkPool: await getHistoricalDarkPool(), }; diff --git a/src/routes/stocks/[tickerID]/dark-pool/+page.svelte b/src/routes/stocks/[tickerID]/dark-pool/+page.svelte index 306b9fd5..918c73b3 100644 --- a/src/routes/stocks/[tickerID]/dark-pool/+page.svelte +++ b/src/routes/stocks/[tickerID]/dark-pool/+page.svelte @@ -4,120 +4,14 @@ displayCompanyName, stockTicker, } from "$lib/store"; - import { onMount } from "svelte"; - import { monthNames } from "$lib/utils"; - import DarkPool from "$lib/components/DarkPool.svelte"; - import DarkPoolLevel from "$lib/components/DarkPoolLevel.svelte"; - + import HistoricalVolume from "$lib/components/DarkPool/HistoricalVolume.svelte"; + import PriceLevel from "$lib/components/DarkPool/PriceLevel.svelte"; import InfoModal from "$lib/components/InfoModal.svelte"; - import { Chart } from "svelte-echarts"; - import { init, use } from "echarts/core"; - import { LineChart, BarChart } from "echarts/charts"; - import { GridComponent, TooltipComponent } from "echarts/components"; - import { CanvasRenderer } from "echarts/renderers"; import Infobox from "$lib/components/Infobox.svelte"; - use([LineChart, BarChart, TooltipComponent, GridComponent, CanvasRenderer]); + import HottestTrades from "$lib/components/DarkPool/HottestTrades.svelte"; export let data; - let isLoaded = false; - let dateDistance; - let rawData = data?.getStockDividend; let historicalDarkPool = data?.getHistoricalDarkPool || []; - - let optionsDividend; - - async function plotDividend() { - // Combine the data into an array of objects to keep them linked - const combinedData = rawData?.history?.map((item) => ({ - date: item?.paymentDate, - dividend: item?.adjDividend?.toFixed(3), - })); - - // Sort the combined data array based on the date - combinedData.sort((a, b) => new Date(a?.date) - new Date(b?.date)); - - // Separate the sorted data back into individual arrays - const dates = combinedData.map((item) => item.date); - const dividendList = combinedData?.map((item) => item.dividend); - - const options = { - animation: false, - grid: { - left: "3%", - right: "3%", - bottom: "10%", - top: "10%", - containLabel: true, - }, - xAxis: { - type: "category", - boundaryGap: false, - data: dates, - axisLabel: { - color: "#fff", - formatter: function (value) { - // Assuming dates are in the format 'yyyy-mm-dd' - // Extract the month and day from the date string and convert the month to its abbreviated name - const dateParts = value.split("-"); - const year = dateParts[0].substring(2); // Extracting the last two digits of the year - const monthIndex = parseInt(dateParts[1]) - 1; // Months are zero-indexed in JavaScript Date objects - return `${monthNames[monthIndex]} '${year} `; - }, - }, - }, - yAxis: [ - { - type: "value", - splitLine: { - show: false, // Disable x-axis grid lines - }, - - axisLabel: { - show: false, // Hide y-axis labels - }, - }, - ], - series: [ - { - name: "Dividend per Share", - data: dividendList, - type: "bar", - smooth: true, - itemStyle: { - color: "#fff", - }, - }, - ], - tooltip: { - trigger: "axis", - hideDelay: 100, - borderColor: "#969696", // Black border color - borderWidth: 1, // Border width of 1px - backgroundColor: "#313131", // Optional: Set background color for contrast - textStyle: { - color: "#fff", // Optional: Text color for better visibility - }, - formatter: function (params) { - const date = params[0].name; // Get the date from the x-axis value - const dateParts = date.split("-"); - const year = dateParts[0]; - const monthIndex = parseInt(dateParts[1]) - 1; - const day = dateParts[2]; - const formattedDate = `${monthNames[monthIndex]} ${day}, ${year}`; - - // Return the tooltip content - return `${formattedDate}
Dividend Per Share: ${params[0].value}`; - }, - }, - }; - - return options; - } - - onMount(async () => { - optionsDividend = await plotDividend(); - isLoaded = true; - }); @@ -164,136 +58,31 @@ class="w-full relative flex justify-center items-center overflow-hidden" >
-
-

- Dark Pool -

+
+
+ + +
+
- - - {#if rawData?.history?.length !== 0} -
-

Dividends History

-
- - {#if isLoaded} - {#if rawData?.history?.length !== 0 && optionsDividend} -
- -
- -
- - - - - - - - - - - {#each rawData?.history as item} - - - - - - - {/each} - -
- Ex-Divid. Date - - Cash Amount - - Record Date - - Pay Date -
- {new Date(item?.date)?.toLocaleString("en-US", { - month: "short", - day: "numeric", - year: "numeric", - daySuffix: "2-digit", - })} - - {item?.adjDividend?.toFixed(3)} - - {item?.recordDate?.length !== 0 - ? new Date(item?.recordDate)?.toLocaleString( - "en-US", - { - month: "short", - day: "numeric", - year: "numeric", - daySuffix: "2-digit", - }, - ) - : "n/a"} - - {item?.paymentDate?.length !== 0 - ? new Date(item?.paymentDate)?.toLocaleString( - "en-US", - { - month: "short", - day: "numeric", - year: "numeric", - daySuffix: "2-digit", - }, - ) - : "n/a"} -
-
- - * Dividend amounts are adjusted for stock splits when - applicable. - - {:else} -

- No history found -

- {/if} - {:else} -
-
- -
-
- {/if} - {/if} + + +