diff --git a/src/routes/crypto/[tickerID]/stats/+page.svelte b/src/routes/crypto/[tickerID]/stats/+page.svelte index 90aeaa4e..4145379d 100644 --- a/src/routes/crypto/[tickerID]/stats/+page.svelte +++ b/src/routes/crypto/[tickerID]/stats/+page.svelte @@ -20,6 +20,8 @@ let currentPrice = 0; let previousClose = '-'; let volume = '-'; + let eps = '-'; + let pe = '-'; let alpha = '-'; let beta = '-'; @@ -84,6 +86,8 @@ currentPrice = '-'; previousClose = '-'; volume = '-'; + eps = '-'; + pe = '-'; alpha = '-'; beta = '-'; @@ -94,6 +98,8 @@ volume = abbreviateNumber(stockQuote?.volume); currentPrice = stockQuote?.price; previousClose = stockQuote?.previousClose; + eps = stockQuote?.eps; + pe = stockQuote?.pe; beta = stockQuote?.beta; @@ -124,7 +130,6 @@ - @@ -132,7 +137,6 @@ - @@ -140,7 +144,7 @@
-
+

Fundamental Data @@ -235,34 +239,41 @@
- + - - - - + + + + - - - - - + + + + + - - + - - + + + + + + + +
Mkt Cap ${marketCap}Volume{volume}Mkt Cap ${marketCap}Volume{volume}
Price${currentPrice}Prev. Close${previousClose?.toFixed(2)}
Price${currentPrice}Prev. Close${previousClose}
Alpha + Alpha {typeof alpha !== 'undefined' ? alpha : '-'} Beta + Beta {typeof beta !== 'undefined' && !isNaN(beta) ? beta?.toFixed(2) : '-'}
EPS{eps}PE{pe}
@@ -274,38 +285,40 @@

Worst 10 Drawdowns of {$cryptoTicker}

- - - - - - - - - - - {#each quantStats[$cryptoTicker?.toUpperCase()]['Worst 10 Drawdowns'] as item} - - - - - +
+
StartedRecoveredDrawdownDays
- {new Date(item['Started']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} - - {#if ongoingDD(item['Recovered']) === true} - continuing - {:else} - {new Date(item['Recovered']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} - {/if} - - {item['Drawdown']?.toFixed(2)}% - - {item['Days']} -
+ + + + + + - {/each} - -
StartedRecoveredDrawdownDays
+ + + {#each quantStats[$cryptoTicker?.toUpperCase()]['Worst 10 Drawdowns'] as item} + + + {new Date(item['Started']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} + + + {#if ongoingDD(item['Recovered']) === true} + continuing + {:else} + {new Date(item['Recovered']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} + {/if} + + + {item['Drawdown']?.toFixed(2)}% + + + {item['Days']} + + + {/each} + + +

@@ -313,11 +326,11 @@ S&P500

-

+

Comparison of company stats against the S&P500 Index.

- + Time Period between {new Date(quantStats[$cryptoTicker?.toUpperCase()]["Start Period"]).toLocaleString('en-US', { month: 'long', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} - {new Date(quantStats[$cryptoTicker?.toUpperCase()]["End Period"]).toLocaleString('en-US', { month: 'long', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} @@ -328,34 +341,34 @@ -
+
- - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -517,17 +530,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/routes/etf/[tickerID]/+page.svelte b/src/routes/etf/[tickerID]/+page.svelte index 505cffcb..3a160914 100644 --- a/src/routes/etf/[tickerID]/+page.svelte +++ b/src/routes/etf/[tickerID]/+page.svelte @@ -1,1396 +1,1162 @@ - observer = new ResizeObserver(([entry]) => { - width = entry.contentRect.width; - height = entry.contentRect.height; - }); - observer.observe(element); - } - - - - //===============================================// - - - - - - - - - - - const options = { - width: width, - height: height, - layout: { - background: { - color: '#09090B', - }, - - }, - grid: { - vertLines: { - color: '#09090B', - visible: false, - }, - horzLines: { - color: '#09090B', - visible: false, - }, - }, - crosshair: { - // hide the horizontal crosshair line - horzLine: { - visible: false, - labelVisible: false, - }, - // hide the vertical crosshair label - vertLine: { - labelVisible: false, - style: 0, - }, - }, - rightPriceScale: { - visible: false, - borderColor: 'rgba(197, 203, 206, 0.8)', - }, - leftPriceScale: { - visible: false, - borderColor: 'rgba(197, 203, 206, 0.8)', - }, - handleScale: { - mouseWheel: false, - }, - handleScroll: { - mouseWheel: false, - horzTouchDrag: false, - vertTouchDrag: false, - pressedMouseMove: false, - }, - timeScale: { - borderColor: '#FFFFFF', - textColor: '#FFFFFF', - visible: false, - fixLeftEdge: true, - fixRightEdge: true, - }, - }; - - - - onDestroy(async() => { - $priceIncrease = null; - }) - - function changeChartType() { - if(displayChartType === 'line') { - displayChartType = 'candlestick'; - } - else { - displayChartType = 'line'; - } - } - $: { + + + + + + {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} {$displayCompanyName} ({$etfTicker}) Statistics & Valuation Metrics · stocknear + + - if ($etfTicker && typeof window !== 'undefined') // add a check to see if running on client-side - { + + + + + + + + + + + + + - oneDayPrice = []; - oneWeekPrice = []; - oneMonthPrice = []; - oneYearPrice = []; - threeYearPrice = []; - - geographicList = []; - sectorList = []; - prePostData = {}; - output = null; - - - geographicList = data?.getCountryWeighting; - sectorList = data?.getETFProfile[0]?.sectorsList; - sectorList = sectorList?.sort(function(a,b) { - return b?.exposure - a?.exposure; - }) - etfProfile = data?.getETFProfile; - topHoldingList = data?.getETFHoldings; - dividendList = data?.getStockDividend; - similarTicker = data?.getSimilarETFs; - previousClose = data?.getStockQuote?.previousClose - - //stockDeck = data?.getStockDeckData; - - - - const asyncFunctions = [ - getPrePostQuote(), - ]; - - - - Promise.all(asyncFunctions) - .then((results) => { - initializePrice() - }) - .catch((error) => { - console.error('An error occurred:', error); - }); - - - } - - } - - - - $: { - if(form) - { - $globalForm = form; - } - } - - - - - - - - - - - {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} {$displayCompanyName} ({$etfTicker}) Stock Price, Quote & News · stocknear - - - - - - - - - - - - - - - - - - -
- -
- - -
- -
-
- - - - - -
-
- -
- {#if $isCrosshairMoveActive } - {$etfTicker?.includes('.DE') || $etfTicker?.includes('.F') ? `${displayLegend?.close}€` : ` $${displayLegend?.close}`} - {:else if !$isCrosshairMoveActive && $realtimePrice !== null} - {$etfTicker?.includes('.DE') || $etfTicker?.includes('.F') ? `${$realtimePrice}€` : ` $${$realtimePrice}`} - {:else} - {$etfTicker?.includes('.DE') || $etfTicker?.includes('.F') ? `${displayLegend?.close}€` : ` $${displayLegend?.close}`} - - {/if} - - {#if $priceIncrease === true} -
- {:else if $priceIncrease === false} -
- {/if} - -
- - - - -
- - {#if displayLegend?.change >= 0} - - +{displayLegend?.change}% - {:else if displayLegend?.change < 0} - - {displayLegend?.change}% - {/if} - - {displayLegend?.date} - - - -
- -
- - {#if Object?.keys(prePostData)?.length !== 0 && prePostData?.price !== 0} -
-
- - ${prePostData?.price} - - {#if prePostData?.changesPercentage >= 0} - ({prePostData?.changesPercentage}%) - {:else if prePostData?.changesPercentage < 0} - ({prePostData?.changesPercentage}%) - {/if} -
- {#if $isBeforeMarketOpen && !$isOpen && !$isWeekend} -
- Pre-market: - -
- {:else} -
- Post-market: - -
- {/if} - -
- {/if} - - -
- - - - -
+
Metric + {$cryptoTicker} + S&P500
+ Cumulative Return + {#if quantStats[$cryptoTicker?.toUpperCase()]["Cumulative Return %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Cumulative Return %"]}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Cumulative Return %"]}% {/if} + {#if quantStats['SPY']["Cumulative Return %"] >=0} +{quantStats['SPY']["Cumulative Return %"]}% {:else} @@ -365,17 +378,17 @@
+ Compound Annual Growth Rate (CAGR) + {#if quantStats[$cryptoTicker?.toUpperCase()]["CAGR %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["CAGR %"]}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["CAGR %"]}% {/if} + {#if quantStats['SPY']["CAGR %"] >=0} +{quantStats['SPY']["CAGR %"]}% {:else} @@ -385,41 +398,41 @@
+ Sharpe + {quantStats[$cryptoTicker?.toUpperCase()]["Sharpe"]?.toFixed(2)} + {quantStats['SPY']["Sharpe"]?.toFixed(2)}
+ Sortino + {quantStats[$cryptoTicker?.toUpperCase()]["Sortino"]?.toFixed(2)} + {quantStats['SPY']["Sortino"]?.toFixed(2)}
+ Max Drawdown + {#if quantStats[$cryptoTicker?.toUpperCase()]["Max Drawdown"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Max Drawdown"]}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Max Drawdown"]}% {/if} + {#if quantStats['SPY']["Max Drawdown"] >=0} +{quantStats['SPY']["Max Drawdown"]}% {:else} @@ -429,87 +442,87 @@
+ Longest Drawdown Days + {quantStats[$cryptoTicker?.toUpperCase()]["Longest DD Days"]} + {quantStats['SPY']["Longest DD Days"]}
+ Volatility (ann.) + {quantStats[$cryptoTicker?.toUpperCase()]["Volatility (ann.) %"]}% + {quantStats['SPY']["Volatility (ann.) %"]}%
+ Correlation + {quantStats[$cryptoTicker?.toUpperCase()]["Correlation"]}% + {quantStats['SPY']["Correlation"]}
+ R^2 + {quantStats[$cryptoTicker?.toUpperCase()]["R^2"]} + {quantStats['SPY']["R^2"]}
+ Calmar + {quantStats[$cryptoTicker?.toUpperCase()]["Calmar"]} + {quantStats['SPY']["Calmar"]}
+ Skew + {quantStats[$cryptoTicker?.toUpperCase()]["Skew"]?.toFixed(2)} + {quantStats['SPY']["Skew"]?.toFixed(2)}
+ Kurtosis + {quantStats[$cryptoTicker?.toUpperCase()]["Kurtosis"]?.toFixed(2)} + {quantStats['SPY']["Kurtosis"]?.toFixed(2)}
+ Expected Daily + {#if quantStats[$cryptoTicker?.toUpperCase()]["Expected Daily %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Expected Daily %"]}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Expected Daily %"]}% {/if} + {#if quantStats['SPY']["Expected Daily %"] >=0} +{quantStats['SPY']["Expected Daily %"]}% {:else} @@ -537,17 +550,17 @@
+ Expected Monthly + {#if quantStats[$cryptoTicker?.toUpperCase()]["Expected Monthly %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Expected Monthly %"]}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Expected Monthly %"]}% {/if} + {#if quantStats['SPY']["Expected Monthly %"] >=0} +{quantStats['SPY']["Expected Monthly %"]}% {:else} @@ -557,17 +570,17 @@
+ Expected Yearly + {#if quantStats[$cryptoTicker?.toUpperCase()]["Expected Yearly %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Expected Yearly %"]}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Expected Yearly %"]}% {/if} + {#if quantStats['SPY']["Expected Yearly %"] >=0} +{quantStats['SPY']["Expected Yearly %"]}% {:else} @@ -577,41 +590,41 @@
+ Kelly Criterion + {quantStats[$cryptoTicker?.toUpperCase()]["Kelly Criterion %"]}% + {quantStats['SPY']["Kelly Criterion %"]}%
+ Risk of Ruin + {quantStats[$cryptoTicker?.toUpperCase()]["Risk of Ruin %"]}% + {quantStats['SPY']["Risk of Ruin %"]}%
+ Daily Value-at-Risk + {#if quantStats[$cryptoTicker?.toUpperCase()]["Daily Value-at-Risk %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Daily Value-at-Risk %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Daily Value-at-Risk %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Daily Value-at-Risk %"] >=0} +{quantStats['SPY']["Daily Value-at-Risk %"]?.toFixed(2)}% {:else} @@ -621,17 +634,17 @@
+ Expected Shortfall (cVaR) + {#if quantStats[$cryptoTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Expected Shortfall (cVaR) %"] >=0} +{quantStats['SPY']["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {:else} @@ -642,104 +655,104 @@
+ Max Consecutive Wins {quantStats[$cryptoTicker?.toUpperCase()]["Max Consecutive Wins"]} + {quantStats['SPY']["Max Consecutive Wins"]}
+ Max Consecutive Losses {quantStats[$cryptoTicker?.toUpperCase()]["Max Consecutive Losses"]} + {quantStats['SPY']["Max Consecutive Losses"]}
+ Gain/Pain Ratio {quantStats[$cryptoTicker?.toUpperCase()]["Gain/Pain Ratio"]?.toFixed(2)} + {quantStats['SPY']["Gain/Pain Ratio"]?.toFixed(2)}
+ Gain/Pain (1M) + {quantStats[$cryptoTicker?.toUpperCase()]["Gain/Pain (1M)"]?.toFixed(2)} + {quantStats['SPY']["Gain/Pain (1M)"]?.toFixed(2)}
+ Payoff Ratio + {quantStats[$cryptoTicker?.toUpperCase()]["Payoff Ratio"]?.toFixed(2)} + {quantStats['SPY']["Payoff Ratio"]?.toFixed(2)}
+ Profit Factor + {quantStats[$cryptoTicker?.toUpperCase()]["Profit Factor"]?.toFixed(2)} + {quantStats['SPY']["Profit Factor"]?.toFixed(2)}
+ Outlier Win Ratio + {quantStats[$cryptoTicker?.toUpperCase()]["Outlier Win Ratio"]?.toFixed(2)} + {quantStats['SPY']["Outlier Win Ratio"]?.toFixed(2)}
+ Outlier Loss Ratio + {quantStats[$cryptoTicker?.toUpperCase()]["Outlier Loss Ratio"]?.toFixed(2)} + {quantStats['SPY']["Outlier Loss Ratio"]?.toFixed(2)}
+ MTD @@ -749,7 +762,7 @@ {quantStats[$cryptoTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["MTD %"] >=0} +{quantStats['SPY']["MTD %"]?.toFixed(2)}% {:else} @@ -759,17 +772,17 @@
+ 3M + {#if quantStats[$cryptoTicker?.toUpperCase()]["3M %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["3M %"] >=0} +{quantStats['SPY']["3M %"]?.toFixed(2)}% {:else} @@ -779,17 +792,17 @@
+ 6M + {#if quantStats[$cryptoTicker?.toUpperCase()]["6M %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["6M %"] >=0} +{quantStats['SPY']["6M %"]?.toFixed(2)}% {:else} @@ -799,17 +812,17 @@
+ YTD + {#if quantStats[$cryptoTicker?.toUpperCase()]["YTD %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["YTD %"] >=0} +{quantStats['SPY']["YTD %"]?.toFixed(2)}% {:else} @@ -819,17 +832,17 @@
+ 1Y + {#if quantStats[$cryptoTicker?.toUpperCase()]["1Y %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["1Y %"] >=0} +{quantStats['SPY']["1Y %"]?.toFixed(2)}% {:else} @@ -839,17 +852,17 @@
+ 3Y (ann.) + {#if quantStats[$cryptoTicker?.toUpperCase()]["3Y (ann.) %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["3Y (ann.) %"] >=0} +{quantStats['SPY']["3Y (ann.) %"]?.toFixed(2)}% {:else} @@ -859,7 +872,7 @@
+ Best Day @@ -869,7 +882,7 @@ {quantStats[$cryptoTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Best Day %"] >=0} +{quantStats['SPY']["Best Day %"]?.toFixed(2)}% {:else} @@ -879,17 +892,17 @@
+ Worst Day + {#if quantStats[$cryptoTicker?.toUpperCase()]["Worst Day %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Day %"] >=0} +{quantStats['SPY']["Worst Day %"]?.toFixed(2)}% {:else} @@ -899,17 +912,17 @@
+ Best Month + {#if quantStats[$cryptoTicker?.toUpperCase()]["Worst Day %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Day %"] >=0} +{quantStats['SPY']["Worst Day %"]?.toFixed(2)}% {:else} @@ -919,17 +932,17 @@
+ Worst Month + {#if quantStats[$cryptoTicker?.toUpperCase()]["Worst Month %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Month %"] >=0} +{quantStats['SPY']["Worst Month %"]?.toFixed(2)}% {:else} @@ -939,17 +952,17 @@
+ Best Year + {#if quantStats[$cryptoTicker?.toUpperCase()]["Best Year %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Best Year %"] >=0} +{quantStats['SPY']["Best Year %"]?.toFixed(2)}% {:else} @@ -959,17 +972,17 @@
+ Worst Year + {#if quantStats[$cryptoTicker?.toUpperCase()]["Worst Year %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Year %"] >=0} +{quantStats['SPY']["Worst Year %"]?.toFixed(2)}% {:else} @@ -979,7 +992,7 @@
+ Avg. Drawdown @@ -989,7 +1002,7 @@ {quantStats[$cryptoTicker?.toUpperCase()]["Avg. Drawdown"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Avg. Drawdown"] >=0} +{quantStats['SPY']["Avg. Drawdown"]?.toFixed(2)}% {:else} @@ -999,44 +1012,44 @@
+ Avg. Drawdown Days + {quantStats[$cryptoTicker?.toUpperCase()]["Avg. Drawdown Days"]} + {quantStats['SPY']["Avg. Drawdown Days"]}
+ Recovery Factor + {quantStats[$cryptoTicker?.toUpperCase()]["Recovery Factor"]?.toFixed(2)} + {quantStats['SPY']["Recovery Factor"]?.toFixed(2)}
+ Ulcer Index + {quantStats[$cryptoTicker?.toUpperCase()]["Ulcer Index"]?.toFixed(2)} + {quantStats['SPY']["Ulcer Index"]?.toFixed(2)}
+ Avg. Up Month @@ -1046,7 +1059,7 @@ {quantStats[$cryptoTicker?.toUpperCase()]["Avg. Up Month %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Avg. Up Month %"] >=0} +{quantStats['SPY']["Avg. Up Month %"]?.toFixed(2)}% {:else} @@ -1056,17 +1069,17 @@
+ Avg. Down Month + {#if quantStats[$cryptoTicker?.toUpperCase()]["Avg. Down Month %"] >=0} +{quantStats[$cryptoTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% {:else} {quantStats[$cryptoTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Avg. Down Month %"] >=0} +{quantStats['SPY']["Avg. Down Month %"]?.toFixed(2)}% {:else} @@ -1077,49 +1090,49 @@
+ Win Days + {quantStats[$cryptoTicker?.toUpperCase()]["Win Days %"]?.toFixed(2)}% + {quantStats['SPY']["Win Days %"]?.toFixed(2)}%
+ Win Month + {quantStats[$cryptoTicker?.toUpperCase()]["Win Month %"]?.toFixed(2)}% + {quantStats['SPY']["Win Month %"]?.toFixed(2)}%
+ Win Quarter + {quantStats[$cryptoTicker?.toUpperCase()]["Win Quarter %"]?.toFixed(2)}% + {quantStats['SPY']["Win Quarter %"]?.toFixed(2)}%
+ Win Year + {quantStats[$cryptoTicker?.toUpperCase()]["Win Year %"]?.toFixed(2)}% + {quantStats['SPY']["Win Year %"]?.toFixed(2)}%
+ + + + {#if $screenWidth <= 550} + + + {:else} + + + + + {/if} + + + + {#if $screenWidth < 640} + + + {:else} + + + + + {/if} + + +
+ 1-Day Range + +
+
+ {dayLow} + {dayHigh} +
+
+ +
+
+
+ 1-Day Range + + {dayLow} + + + + + {dayHigh} +
+ 1-Year Range + +
+
+ {yearLow} + {yearHigh} +
+
+ +
+
+
+ 1-Year Range + + {yearLow} + + + + {yearHigh} +
+
+ - - - -
- {#if CountrySegmentation} - - {/if} -
- - - - -
- {#if SectorSegmentation} - - {/if} -
- - - -
- {#await import('$lib/components/RetailVolume.svelte') then {default: Comp}} - - {/await} -
-
- +

+ Company Stats +

+ - -
- {#await import('$lib/components/TARating.svelte') then {default: Comp}} - - {/await} -
-
- +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Mkt Cap ${marketCap}Volume{volume}
Price${currentPrice}Prev. Close${previousClose}
Alpha + {typeof alpha !== 'undefined' ? alpha : '-'} + Beta + {typeof beta !== 'undefined' && !isNaN(beta) ? beta?.toFixed(2) : '-'} +
EPS{eps}PE{pe}
+
+ + + + {#if $etfTicker in quantStats && Object.keys(quantStats[$etfTicker]).length > 0} + +

+ Worst 10 Drawdowns of {$etfTicker} +

+
+ + + + + + + + + + + {#each quantStats[$etfTicker?.toUpperCase()]['Worst 10 Drawdowns'] as item} + + + + + + + {/each} + +
StartedRecoveredDrawdownDays
+ {new Date(item['Started']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} + + {#if ongoingDD(item['Recovered']) === true} + continuing + {:else} + {new Date(item['Recovered']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} + {/if} + + {item['Drawdown']?.toFixed(2)}% + + {item['Days']} +
+
+ + +

+ {$etfTicker} vs. + S&P500 +

+ +

+ Comparison of company stats against the S&P500 Index. +

+ + + Time Period between {new Date(quantStats[$etfTicker?.toUpperCase()]["Start Period"]).toLocaleString('en-US', { month: 'long', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} + - + {new Date(quantStats[$etfTicker?.toUpperCase()]["End Period"]).toLocaleString('en-US', { month: 'long', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Metric + + {$etfTicker} + + S&P500 +
+ Cumulative Return + + {#if quantStats[$etfTicker?.toUpperCase()]["Cumulative Return %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Cumulative Return %"]}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Cumulative Return %"]}% + {/if} + + {#if quantStats['SPY']["Cumulative Return %"] >=0} + +{quantStats['SPY']["Cumulative Return %"]}% + {:else} + {quantStats['SPY']["Cumulative Return %"]}% + {/if} +
+ Compound Annual Growth Rate (CAGR) + + {#if quantStats[$etfTicker?.toUpperCase()]["CAGR %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["CAGR %"]}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["CAGR %"]}% + {/if} + + {#if quantStats['SPY']["CAGR %"] >=0} + +{quantStats['SPY']["CAGR %"]}% + {:else} + {quantStats['SPY']["CAGR %"]}% + {/if} +
+ Sharpe + + {quantStats[$etfTicker?.toUpperCase()]["Sharpe"]?.toFixed(2)} + + {quantStats['SPY']["Sharpe"]?.toFixed(2)} +
+ Sortino + + {quantStats[$etfTicker?.toUpperCase()]["Sortino"]?.toFixed(2)} + + {quantStats['SPY']["Sortino"]?.toFixed(2)} +
+ Max Drawdown + + {#if quantStats[$etfTicker?.toUpperCase()]["Max Drawdown"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Max Drawdown"]}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Max Drawdown"]}% + {/if} + + {#if quantStats['SPY']["Max Drawdown"] >=0} + +{quantStats['SPY']["Max Drawdown"]}% + {:else} + {quantStats['SPY']["Max Drawdown"]}% + {/if} +
+ Longest Drawdown Days + + {quantStats[$etfTicker?.toUpperCase()]["Longest DD Days"]} + + {quantStats['SPY']["Longest DD Days"]} +
+ Volatility (ann.) + + {quantStats[$etfTicker?.toUpperCase()]["Volatility (ann.) %"]}% + + {quantStats['SPY']["Volatility (ann.) %"]}% +
+ Correlation + + {quantStats[$etfTicker?.toUpperCase()]["Correlation"]}% + + {quantStats['SPY']["Correlation"]} +
+ R^2 + + {quantStats[$etfTicker?.toUpperCase()]["R^2"]} + + {quantStats['SPY']["R^2"]} +
+ Calmar + + {quantStats[$etfTicker?.toUpperCase()]["Calmar"]} + + {quantStats['SPY']["Calmar"]} +
+ Skew + + {quantStats[$etfTicker?.toUpperCase()]["Skew"]?.toFixed(2)} + + {quantStats['SPY']["Skew"]?.toFixed(2)} +
+ Kurtosis + + {quantStats[$etfTicker?.toUpperCase()]["Kurtosis"]?.toFixed(2)} + + {quantStats['SPY']["Kurtosis"]?.toFixed(2)} +
+ Expected Daily + + {#if quantStats[$etfTicker?.toUpperCase()]["Expected Daily %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Expected Daily %"]}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Expected Daily %"]}% + {/if} + + {#if quantStats['SPY']["Expected Daily %"] >=0} + +{quantStats['SPY']["Expected Daily %"]}% + {:else} + {quantStats['SPY']["Expected Daily %"]}% + {/if} +
+ Expected Monthly + + {#if quantStats[$etfTicker?.toUpperCase()]["Expected Monthly %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Expected Monthly %"]}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Expected Monthly %"]}% + {/if} + + {#if quantStats['SPY']["Expected Monthly %"] >=0} + +{quantStats['SPY']["Expected Monthly %"]}% + {:else} + {quantStats['SPY']["Expected Monthly %"]}% + {/if} +
+ Expected Yearly + + {#if quantStats[$etfTicker?.toUpperCase()]["Expected Yearly %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Expected Yearly %"]}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Expected Yearly %"]}% + {/if} + + {#if quantStats['SPY']["Expected Yearly %"] >=0} + +{quantStats['SPY']["Expected Yearly %"]}% + {:else} + {quantStats['SPY']["Expected Yearly %"]}% + {/if} +
+ Kelly Criterion + + {quantStats[$etfTicker?.toUpperCase()]["Kelly Criterion %"]}% + + {quantStats['SPY']["Kelly Criterion %"]}% +
+ Risk of Ruin + + {quantStats[$etfTicker?.toUpperCase()]["Risk of Ruin %"]}% + + {quantStats['SPY']["Risk of Ruin %"]}% +
+ Daily Value-at-Risk + + {#if quantStats[$etfTicker?.toUpperCase()]["Daily Value-at-Risk %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Daily Value-at-Risk %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Daily Value-at-Risk %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Daily Value-at-Risk %"] >=0} + +{quantStats['SPY']["Daily Value-at-Risk %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Daily Value-at-Risk %"]?.toFixed(2)}% + {/if} +
+ Expected Shortfall (cVaR) + + {#if quantStats[$etfTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Expected Shortfall (cVaR) %"] >=0} + +{quantStats['SPY']["Expected Shortfall (cVaR) %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Expected Shortfall (cVaR) %"]?.toFixed(2)}% + {/if} +
+ Max Consecutive Wins + + {quantStats[$etfTicker?.toUpperCase()]["Max Consecutive Wins"]} + + {quantStats['SPY']["Max Consecutive Wins"]} +
+ Max Consecutive Losses + + {quantStats[$etfTicker?.toUpperCase()]["Max Consecutive Losses"]} + + {quantStats['SPY']["Max Consecutive Losses"]} +
+ Gain/Pain Ratio + + {quantStats[$etfTicker?.toUpperCase()]["Gain/Pain Ratio"]?.toFixed(2)} + + {quantStats['SPY']["Gain/Pain Ratio"]?.toFixed(2)} +
+ Gain/Pain (1M) + + {quantStats[$etfTicker?.toUpperCase()]["Gain/Pain (1M)"]?.toFixed(2)} + + {quantStats['SPY']["Gain/Pain (1M)"]?.toFixed(2)} +
+ Payoff Ratio + + {quantStats[$etfTicker?.toUpperCase()]["Payoff Ratio"]?.toFixed(2)} + + {quantStats['SPY']["Payoff Ratio"]?.toFixed(2)} +
+ Profit Factor + + {quantStats[$etfTicker?.toUpperCase()]["Profit Factor"]?.toFixed(2)} + + {quantStats['SPY']["Profit Factor"]?.toFixed(2)} +
+ Outlier Win Ratio + + {quantStats[$etfTicker?.toUpperCase()]["Outlier Win Ratio"]?.toFixed(2)} + + {quantStats['SPY']["Outlier Win Ratio"]?.toFixed(2)} +
+ Outlier Loss Ratio + + {quantStats[$etfTicker?.toUpperCase()]["Outlier Loss Ratio"]?.toFixed(2)} + + {quantStats['SPY']["Outlier Loss Ratio"]?.toFixed(2)} +
+ MTD + + {#if quantStats[$etfTicker?.toUpperCase()]["MTD %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["MTD %"] >=0} + +{quantStats['SPY']["MTD %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["MTD %"]?.toFixed(2)}% + {/if} +
+ 3M + + {#if quantStats[$etfTicker?.toUpperCase()]["3M %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["3M %"] >=0} + +{quantStats['SPY']["3M %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["3M %"]?.toFixed(2)}% + {/if} +
+ 6M + + {#if quantStats[$etfTicker?.toUpperCase()]["6M %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["6M %"] >=0} + +{quantStats['SPY']["6M %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["6M %"]?.toFixed(2)}% + {/if} +
+ YTD + + {#if quantStats[$etfTicker?.toUpperCase()]["YTD %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["YTD %"] >=0} + +{quantStats['SPY']["YTD %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["YTD %"]?.toFixed(2)}% + {/if} +
+ 1Y + + {#if quantStats[$etfTicker?.toUpperCase()]["1Y %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["1Y %"] >=0} + +{quantStats['SPY']["1Y %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["1Y %"]?.toFixed(2)}% + {/if} +
+ 3Y (ann.) + + {#if quantStats[$etfTicker?.toUpperCase()]["3Y (ann.) %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["3Y (ann.) %"] >=0} + +{quantStats['SPY']["3Y (ann.) %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["3Y (ann.) %"]?.toFixed(2)}% + {/if} +
+ Best Day + + {#if quantStats[$etfTicker?.toUpperCase()]["Best Day %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Best Day %"] >=0} + +{quantStats['SPY']["Best Day %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Best Day %"]?.toFixed(2)}% + {/if} +
+ Worst Day + + {#if quantStats[$etfTicker?.toUpperCase()]["Worst Day %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Worst Day %"] >=0} + +{quantStats['SPY']["Worst Day %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Worst Day %"]?.toFixed(2)}% + {/if} +
+ Best Month + + {#if quantStats[$etfTicker?.toUpperCase()]["Worst Day %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Worst Day %"] >=0} + +{quantStats['SPY']["Worst Day %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Worst Day %"]?.toFixed(2)}% + {/if} +
+ Worst Month + + {#if quantStats[$etfTicker?.toUpperCase()]["Worst Month %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Worst Month %"] >=0} + +{quantStats['SPY']["Worst Month %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Worst Month %"]?.toFixed(2)}% + {/if} +
+ Best Year + + {#if quantStats[$etfTicker?.toUpperCase()]["Best Year %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Best Year %"] >=0} + +{quantStats['SPY']["Best Year %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Best Year %"]?.toFixed(2)}% + {/if} +
+ Worst Year + + {#if quantStats[$etfTicker?.toUpperCase()]["Worst Year %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Worst Year %"] >=0} + +{quantStats['SPY']["Worst Year %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Worst Year %"]?.toFixed(2)}% + {/if} +
+ Avg. Drawdown + + {#if quantStats[$etfTicker?.toUpperCase()]["Avg. Drawdown"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Avg. Drawdown"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Avg. Drawdown"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Avg. Drawdown"] >=0} + +{quantStats['SPY']["Avg. Drawdown"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Avg. Drawdown"]?.toFixed(2)}% + {/if} +
+ Avg. Drawdown Days + + {quantStats[$etfTicker?.toUpperCase()]["Avg. Drawdown Days"]} + + {quantStats['SPY']["Avg. Drawdown Days"]} +
+ Recovery Factor + + {quantStats[$etfTicker?.toUpperCase()]["Recovery Factor"]?.toFixed(2)} + + {quantStats['SPY']["Recovery Factor"]?.toFixed(2)} +
+ Ulcer Index + + {quantStats[$etfTicker?.toUpperCase()]["Ulcer Index"]?.toFixed(2)} + + {quantStats['SPY']["Ulcer Index"]?.toFixed(2)} +
+ Avg. Up Month + + {#if quantStats[$etfTicker?.toUpperCase()]["Avg. Up Month %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Avg. Up Month %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Avg. Up Month %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Avg. Up Month %"] >=0} + +{quantStats['SPY']["Avg. Up Month %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Avg. Up Month %"]?.toFixed(2)}% + {/if} +
+ Avg. Down Month + + {#if quantStats[$etfTicker?.toUpperCase()]["Avg. Down Month %"] >=0} + +{quantStats[$etfTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% + {:else} + {quantStats[$etfTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% + {/if} + + {#if quantStats['SPY']["Avg. Down Month %"] >=0} + +{quantStats['SPY']["Avg. Down Month %"]?.toFixed(2)}% + {:else} + {quantStats['SPY']["Avg. Down Month %"]?.toFixed(2)}% + {/if} +
+ Win Days + + {quantStats[$etfTicker?.toUpperCase()]["Win Days %"]?.toFixed(2)}% + + {quantStats['SPY']["Win Days %"]?.toFixed(2)}% +
+ Win Month + + {quantStats[$etfTicker?.toUpperCase()]["Win Month %"]?.toFixed(2)}% + + {quantStats['SPY']["Win Month %"]?.toFixed(2)}% +
+ Win Quarter + + {quantStats[$etfTicker?.toUpperCase()]["Win Quarter %"]?.toFixed(2)}% + + {quantStats['SPY']["Win Quarter %"]?.toFixed(2)}% +
+ Win Year + + {quantStats[$etfTicker?.toUpperCase()]["Win Year %"]?.toFixed(2)}% + + {quantStats['SPY']["Win Year %"]?.toFixed(2)}% +
+ +
+ + + {:else} + +

+ +

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

+ No data available +

+ {/if} + +
+
\ No newline at end of file diff --git a/src/routes/etf/[tickerID]/stats/+page.svelte b/src/routes/etf/[tickerID]/stats/+page.svelte index b89d17a0..2f7778e8 100644 --- a/src/routes/etf/[tickerID]/stats/+page.svelte +++ b/src/routes/etf/[tickerID]/stats/+page.svelte @@ -239,7 +239,7 @@ -
+
diff --git a/src/routes/stocks/[tickerID]/analyst/+page.svelte b/src/routes/stocks/[tickerID]/analyst/+page.svelte index 42b144bf..d6c98408 100644 --- a/src/routes/stocks/[tickerID]/analyst/+page.svelte +++ b/src/routes/stocks/[tickerID]/analyst/+page.svelte @@ -223,7 +223,7 @@ changeTab(0) -
+
In previous years, Wall Street analysts have given {$displayCompanyName} a total of {data?.getAnalystTickerHistory?.length} ratings.
diff --git a/src/routes/stocks/[tickerID]/stats/+page.svelte b/src/routes/stocks/[tickerID]/stats/+page.svelte index a5aa023a..5d11402f 100644 --- a/src/routes/stocks/[tickerID]/stats/+page.svelte +++ b/src/routes/stocks/[tickerID]/stats/+page.svelte @@ -237,32 +237,32 @@ updateYearRange() -
+
- + - - - - + + + + - - - - - + + + + + - - + - - + @@ -289,29 +289,29 @@ updateYearRange()
Mkt Cap ${marketCap}Volume{volume}Mkt Cap ${marketCap}Volume{volume}
Price${currentPrice}Prev. Close${previousClose}
Price${currentPrice}Prev. Close${previousClose}
Alpha + Alpha {typeof alpha !== 'undefined' ? alpha : '-'} Beta + Beta {typeof beta !== 'undefined' && !isNaN(beta) ? beta?.toFixed(2) : '-'}
- - - - + + + + {#each quantStats[$stockTicker?.toUpperCase()]['Worst 10 Drawdowns'] as item} - - - - @@ -326,11 +326,11 @@ updateYearRange() S&P500 -

+

Comparison of company stats against the S&P500 Index.

- + Time Period between {new Date(quantStats[$stockTicker?.toUpperCase()]["Start Period"]).toLocaleString('en-US', { month: 'long', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} - {new Date(quantStats[$stockTicker?.toUpperCase()]["End Period"]).toLocaleString('en-US', { month: 'long', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} @@ -341,34 +341,34 @@ updateYearRange() -
+
StartedRecoveredDrawdownDaysStartedRecoveredDrawdownDays
+ {new Date(item['Started']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} + {#if ongoingDD(item['Recovered']) === true} continuing {:else} {new Date(item['Recovered']).toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', daySuffix: '2-digit' })} {/if} + {item['Drawdown']?.toFixed(2)}% + {item['Days']}
- - + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -530,17 +530,17 @@ updateYearRange() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
Metric + {$stockTicker} + S&P500
+ Cumulative Return + {#if quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"]}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"]}% {/if} + {#if quantStats['SPY']["Cumulative Return %"] >=0} +{quantStats['SPY']["Cumulative Return %"]}% {:else} @@ -378,17 +378,17 @@ updateYearRange()
+ Compound Annual Growth Rate (CAGR) + {#if quantStats[$stockTicker?.toUpperCase()]["CAGR %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["CAGR %"]}% {:else} {quantStats[$stockTicker?.toUpperCase()]["CAGR %"]}% {/if} + {#if quantStats['SPY']["CAGR %"] >=0} +{quantStats['SPY']["CAGR %"]}% {:else} @@ -398,41 +398,41 @@ updateYearRange()
+ Sharpe + {quantStats[$stockTicker?.toUpperCase()]["Sharpe"]?.toFixed(2)} + {quantStats['SPY']["Sharpe"]?.toFixed(2)}
+ Sortino + {quantStats[$stockTicker?.toUpperCase()]["Sortino"]?.toFixed(2)} + {quantStats['SPY']["Sortino"]?.toFixed(2)}
+ Max Drawdown + {#if quantStats[$stockTicker?.toUpperCase()]["Max Drawdown"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Max Drawdown"]}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Max Drawdown"]}% {/if} + {#if quantStats['SPY']["Max Drawdown"] >=0} +{quantStats['SPY']["Max Drawdown"]}% {:else} @@ -442,87 +442,87 @@ updateYearRange()
+ Longest Drawdown Days + {quantStats[$stockTicker?.toUpperCase()]["Longest DD Days"]} + {quantStats['SPY']["Longest DD Days"]}
+ Volatility (ann.) + {quantStats[$stockTicker?.toUpperCase()]["Volatility (ann.) %"]}% + {quantStats['SPY']["Volatility (ann.) %"]}%
+ Correlation + {quantStats[$stockTicker?.toUpperCase()]["Correlation"]}% + {quantStats['SPY']["Correlation"]}
+ R^2 + {quantStats[$stockTicker?.toUpperCase()]["R^2"]} + {quantStats['SPY']["R^2"]}
+ Calmar + {quantStats[$stockTicker?.toUpperCase()]["Calmar"]} + {quantStats['SPY']["Calmar"]}
+ Skew + {quantStats[$stockTicker?.toUpperCase()]["Skew"]?.toFixed(2)} + {quantStats['SPY']["Skew"]?.toFixed(2)}
+ Kurtosis + {quantStats[$stockTicker?.toUpperCase()]["Kurtosis"]?.toFixed(2)} + {quantStats['SPY']["Kurtosis"]?.toFixed(2)}
+ Expected Daily + {#if quantStats[$stockTicker?.toUpperCase()]["Expected Daily %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Expected Daily %"]}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Expected Daily %"]}% {/if} + {#if quantStats['SPY']["Expected Daily %"] >=0} +{quantStats['SPY']["Expected Daily %"]}% {:else} @@ -550,17 +550,17 @@ updateYearRange()
+ Expected Monthly + {#if quantStats[$stockTicker?.toUpperCase()]["Expected Monthly %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Expected Monthly %"]}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Expected Monthly %"]}% {/if} + {#if quantStats['SPY']["Expected Monthly %"] >=0} +{quantStats['SPY']["Expected Monthly %"]}% {:else} @@ -570,17 +570,17 @@ updateYearRange()
+ Expected Yearly + {#if quantStats[$stockTicker?.toUpperCase()]["Expected Yearly %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Expected Yearly %"]}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Expected Yearly %"]}% {/if} + {#if quantStats['SPY']["Expected Yearly %"] >=0} +{quantStats['SPY']["Expected Yearly %"]}% {:else} @@ -590,41 +590,41 @@ updateYearRange()
+ Kelly Criterion + {quantStats[$stockTicker?.toUpperCase()]["Kelly Criterion %"]}% + {quantStats['SPY']["Kelly Criterion %"]}%
+ Risk of Ruin + {quantStats[$stockTicker?.toUpperCase()]["Risk of Ruin %"]}% + {quantStats['SPY']["Risk of Ruin %"]}%
+ Daily Value-at-Risk + {#if quantStats[$stockTicker?.toUpperCase()]["Daily Value-at-Risk %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Daily Value-at-Risk %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Daily Value-at-Risk %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Daily Value-at-Risk %"] >=0} +{quantStats['SPY']["Daily Value-at-Risk %"]?.toFixed(2)}% {:else} @@ -634,17 +634,17 @@ updateYearRange()
+ Expected Shortfall (cVaR) + {#if quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Expected Shortfall (cVaR) %"] >=0} +{quantStats['SPY']["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {:else} @@ -655,104 +655,104 @@ updateYearRange()
+ Max Consecutive Wins {quantStats[$stockTicker?.toUpperCase()]["Max Consecutive Wins"]} + {quantStats['SPY']["Max Consecutive Wins"]}
+ Max Consecutive Losses {quantStats[$stockTicker?.toUpperCase()]["Max Consecutive Losses"]} + {quantStats['SPY']["Max Consecutive Losses"]}
+ Gain/Pain Ratio {quantStats[$stockTicker?.toUpperCase()]["Gain/Pain Ratio"]?.toFixed(2)} + {quantStats['SPY']["Gain/Pain Ratio"]?.toFixed(2)}
+ Gain/Pain (1M) + {quantStats[$stockTicker?.toUpperCase()]["Gain/Pain (1M)"]?.toFixed(2)} + {quantStats['SPY']["Gain/Pain (1M)"]?.toFixed(2)}
+ Payoff Ratio + {quantStats[$stockTicker?.toUpperCase()]["Payoff Ratio"]?.toFixed(2)} + {quantStats['SPY']["Payoff Ratio"]?.toFixed(2)}
+ Profit Factor + {quantStats[$stockTicker?.toUpperCase()]["Profit Factor"]?.toFixed(2)} + {quantStats['SPY']["Profit Factor"]?.toFixed(2)}
+ Outlier Win Ratio + {quantStats[$stockTicker?.toUpperCase()]["Outlier Win Ratio"]?.toFixed(2)} + {quantStats['SPY']["Outlier Win Ratio"]?.toFixed(2)}
+ Outlier Loss Ratio + {quantStats[$stockTicker?.toUpperCase()]["Outlier Loss Ratio"]?.toFixed(2)} + {quantStats['SPY']["Outlier Loss Ratio"]?.toFixed(2)}
+ MTD @@ -762,7 +762,7 @@ updateYearRange() {quantStats[$stockTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["MTD %"] >=0} +{quantStats['SPY']["MTD %"]?.toFixed(2)}% {:else} @@ -772,17 +772,17 @@ updateYearRange()
+ 3M + {#if quantStats[$stockTicker?.toUpperCase()]["3M %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["3M %"] >=0} +{quantStats['SPY']["3M %"]?.toFixed(2)}% {:else} @@ -792,17 +792,17 @@ updateYearRange()
+ 6M + {#if quantStats[$stockTicker?.toUpperCase()]["6M %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["6M %"] >=0} +{quantStats['SPY']["6M %"]?.toFixed(2)}% {:else} @@ -812,17 +812,17 @@ updateYearRange()
+ YTD + {#if quantStats[$stockTicker?.toUpperCase()]["YTD %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["YTD %"] >=0} +{quantStats['SPY']["YTD %"]?.toFixed(2)}% {:else} @@ -832,17 +832,17 @@ updateYearRange()
+ 1Y + {#if quantStats[$stockTicker?.toUpperCase()]["1Y %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["1Y %"] >=0} +{quantStats['SPY']["1Y %"]?.toFixed(2)}% {:else} @@ -852,17 +852,17 @@ updateYearRange()
+ 3Y (ann.) + {#if quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["3Y (ann.) %"] >=0} +{quantStats['SPY']["3Y (ann.) %"]?.toFixed(2)}% {:else} @@ -872,7 +872,7 @@ updateYearRange()
+ Best Day @@ -882,7 +882,7 @@ updateYearRange() {quantStats[$stockTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Best Day %"] >=0} +{quantStats['SPY']["Best Day %"]?.toFixed(2)}% {:else} @@ -892,17 +892,17 @@ updateYearRange()
+ Worst Day + {#if quantStats[$stockTicker?.toUpperCase()]["Worst Day %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Day %"] >=0} +{quantStats['SPY']["Worst Day %"]?.toFixed(2)}% {:else} @@ -912,17 +912,17 @@ updateYearRange()
+ Best Month + {#if quantStats[$stockTicker?.toUpperCase()]["Worst Day %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Day %"] >=0} +{quantStats['SPY']["Worst Day %"]?.toFixed(2)}% {:else} @@ -932,17 +932,17 @@ updateYearRange()
+ Worst Month + {#if quantStats[$stockTicker?.toUpperCase()]["Worst Month %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Month %"] >=0} +{quantStats['SPY']["Worst Month %"]?.toFixed(2)}% {:else} @@ -952,17 +952,17 @@ updateYearRange()
+ Best Year + {#if quantStats[$stockTicker?.toUpperCase()]["Best Year %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Best Year %"] >=0} +{quantStats['SPY']["Best Year %"]?.toFixed(2)}% {:else} @@ -972,17 +972,17 @@ updateYearRange()
+ Worst Year + {#if quantStats[$stockTicker?.toUpperCase()]["Worst Year %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Worst Year %"] >=0} +{quantStats['SPY']["Worst Year %"]?.toFixed(2)}% {:else} @@ -992,7 +992,7 @@ updateYearRange()
+ Avg. Drawdown @@ -1002,7 +1002,7 @@ updateYearRange() {quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Avg. Drawdown"] >=0} +{quantStats['SPY']["Avg. Drawdown"]?.toFixed(2)}% {:else} @@ -1012,44 +1012,44 @@ updateYearRange()
+ Avg. Drawdown Days + {quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown Days"]} + {quantStats['SPY']["Avg. Drawdown Days"]}
+ Recovery Factor + {quantStats[$stockTicker?.toUpperCase()]["Recovery Factor"]?.toFixed(2)} + {quantStats['SPY']["Recovery Factor"]?.toFixed(2)}
+ Ulcer Index + {quantStats[$stockTicker?.toUpperCase()]["Ulcer Index"]?.toFixed(2)} + {quantStats['SPY']["Ulcer Index"]?.toFixed(2)}
+ Avg. Up Month @@ -1059,7 +1059,7 @@ updateYearRange() {quantStats[$stockTicker?.toUpperCase()]["Avg. Up Month %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Avg. Up Month %"] >=0} +{quantStats['SPY']["Avg. Up Month %"]?.toFixed(2)}% {:else} @@ -1069,17 +1069,17 @@ updateYearRange()
+ Avg. Down Month + {#if quantStats[$stockTicker?.toUpperCase()]["Avg. Down Month %"] >=0} +{quantStats[$stockTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% {:else} {quantStats[$stockTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% {/if} + {#if quantStats['SPY']["Avg. Down Month %"] >=0} +{quantStats['SPY']["Avg. Down Month %"]?.toFixed(2)}% {:else} @@ -1090,49 +1090,49 @@ updateYearRange()
+ Win Days + {quantStats[$stockTicker?.toUpperCase()]["Win Days %"]?.toFixed(2)}% + {quantStats['SPY']["Win Days %"]?.toFixed(2)}%
+ Win Month + {quantStats[$stockTicker?.toUpperCase()]["Win Month %"]?.toFixed(2)}% + {quantStats['SPY']["Win Month %"]?.toFixed(2)}%
+ Win Quarter + {quantStats[$stockTicker?.toUpperCase()]["Win Quarter %"]?.toFixed(2)}% + {quantStats['SPY']["Win Quarter %"]?.toFixed(2)}%
+ Win Year + {quantStats[$stockTicker?.toUpperCase()]["Win Year %"]?.toFixed(2)}% + {quantStats['SPY']["Win Year %"]?.toFixed(2)}%