diff --git a/src/lib/components/FailToDeliver.svelte b/src/lib/components/FailToDeliver.svelte index 9140675c..1ab63ee8 100644 --- a/src/lib/components/FailToDeliver.svelte +++ b/src/lib/components/FailToDeliver.svelte @@ -17,7 +17,6 @@ let config = null; - let isLoaded = false; let avgFailToDeliver; let weightedFTD; @@ -85,7 +84,7 @@ rawData?.sort((a, b) => new Date(a?.date) - new Date(b?.date)); rawData?.forEach((item) => { dates?.push(item?.date); - priceList?.push(item?.price); + priceList?.push(Number(item?.price)); failToDeliverList?.push(item?.failToDeliver); }); @@ -150,7 +149,6 @@ })}
${abbreviateNumber(this.y)}`; }, }, - xAxis: { categories: dates, labels: { @@ -167,12 +165,15 @@ }, yAxis: [ { + gridLineWidth: 1, + gridLineColor: "#111827", labels: { enabled: false, }, title: { text: null, }, + opposite: true, }, { gridLineWidth: 1, @@ -219,7 +220,6 @@ $: { const ticker = $assetType === "stock" ? $stockTicker : $etfTicker; if (ticker) { - isLoaded = false; if (rawData?.length > 0) { weightedFTD = ( (rawData?.slice(-1)?.at(0)?.failToDeliver / @@ -228,7 +228,6 @@ )?.toFixed(2); config = getPlotOptions(); } - isLoaded = true; } } @@ -239,166 +238,150 @@

FTD Chart

- {#if isLoaded} - {#if rawData?.length !== 0} -
-
- Over the past year, {$displayCompanyName} has seen a monthly average - of - {avgFailToDeliver?.toLocaleString("en-US")} - fail to deliver shares. -
+ {#if rawData?.length !== 0} +
+
+ Over the past year, {$displayCompanyName} has seen a monthly average of + {avgFailToDeliver?.toLocaleString("en-US")} + fail to deliver shares.
+
+ +
+ +
+

+ FTD History +

- -
-

- FTD History -

-
-
- {#each tabs as item, i} - {#if data?.user?.tier !== "Pro" && i > 0} - - {:else} - - {/if} - {/each} -
+ + + {:else} + + {/if} + {/each}
+
-
- - - - +
Date
+ + + + + + + + + + {#each tableList as item, index} + + + - - - - - - {#each tableList as item, index} - - - + {item?.date} + - + - + - - - {/each} - -
DatePriceFTD Shares% Change
- PriceFTD Shares% Change
- {item?.date} - - {item?.price} - + {item?.price} + - {abbreviateNumber(item?.failToDeliver)} - + {abbreviateNumber(item?.failToDeliver)} + - {#if index === tableList?.length - 1} - n/a - {:else if item?.failToDeliver > tableList[index + 1]?.failToDeliver} - - +{( - ((item?.failToDeliver - + + {#if index === tableList?.length - 1} + n/a + {:else if item?.failToDeliver > tableList[index + 1]?.failToDeliver} + + +{( + ((item?.failToDeliver - + tableList[index + 1]?.failToDeliver) / + tableList[index + 1]?.failToDeliver) * + 100 + )?.toFixed(2)}% + + {:else if item?.failToDeliver < tableList[index + 1]?.failToDeliver} + + -{( + Math.abs( + (item?.failToDeliver - tableList[index + 1]?.failToDeliver) / - tableList[index + 1]?.failToDeliver) * - 100 - )?.toFixed(2)}% - - {:else if item?.failToDeliver < tableList[index + 1]?.failToDeliver} - - -{( - Math.abs( - (item?.failToDeliver - - tableList[index + 1]?.failToDeliver) / - tableList[index + 1]?.failToDeliver, - ) * 100 - )?.toFixed(2)}% - - {:else} - n/a - {/if} -
-
- {/if} - {:else} -
-
- -
+ tableList[index + 1]?.failToDeliver, + ) * 100 + )?.toFixed(2)}% + + {:else} + n/a + {/if} + + + {/each} + +
{/if} diff --git a/src/routes/stocks/[tickerID]/statistics/fail-to-deliver/+page.svelte b/src/routes/stocks/[tickerID]/statistics/fail-to-deliver/+page.svelte index 51a6ea2b..d4d7983e 100644 --- a/src/routes/stocks/[tickerID]/statistics/fail-to-deliver/+page.svelte +++ b/src/routes/stocks/[tickerID]/statistics/fail-to-deliver/+page.svelte @@ -19,19 +19,19 @@ : "n/a"; function computeYearOverYearChange(rawData) { - if (rawData.length < 2) { + if (rawData?.length < 2) { return null; // Not enough rawData to compute change } // Step 1: Get the last entry in the list - const lastEntry = rawData[rawData.length - 1]; - const lastDate = new Date(lastEntry.date); - const lastValue = rawData?.slice(-1)?.at(0).failToDeliver; + const lastEntry = rawData[rawData?.length - 1]; + const lastDate = new Date(lastEntry?.date); + const lastValue = rawData?.slice(-1)?.at(0)?.failToDeliver; // Step 2: Find the entry closest to one year before the last date let closestEntry = null; for (let i = rawData.length - 2; i >= 0; i--) { - const entryDate = new Date(rawData[i].date); + const entryDate = new Date(rawData[i]?.date); const oneYearAgo = new Date(lastDate); oneYearAgo.setFullYear(lastDate.getFullYear() - 1);