diff --git a/src/routes/stocks/[tickerID]/+layout.svelte b/src/routes/stocks/[tickerID]/+layout.svelte index ad40b69e..dd2463aa 100644 --- a/src/routes/stocks/[tickerID]/+layout.svelte +++ b/src/routes/stocks/[tickerID]/+layout.svelte @@ -1,86 +1,70 @@ - - + - - -
-
-
-
-
- - -
-
- - - - +
+
+
+ {#if LoginPopup} - -{/if} + +{/if} - {#if PriceAlert} - + {/if} - - + + - + + - - - - - - - - - - - - - + + + + - - - \ No newline at end of file + ::-webkit-scrollbar-corner { + background: #09090b; + } + diff --git a/src/routes/stocks/[tickerID]/+page.svelte b/src/routes/stocks/[tickerID]/+page.svelte index 5220dea2..2f3e9aae 100644 --- a/src/routes/stocks/[tickerID]/+page.svelte +++ b/src/routes/stocks/[tickerID]/+page.svelte @@ -1,138 +1,141 @@ - - - - - - - {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} {$displayCompanyName} ({$stockTicker}) Stock Price, Quote & News · stocknear - - - - - - - - - - - - - - - - - - - - -
- -
- - -
- -
-
- - - - - - -
-
- -
- {#if $isCrosshairMoveActive } - {$stockTicker?.includes('.DE') || $stockTicker?.includes('.PA') || $stockTicker?.includes('.F') ? `${displayLegend?.close}€` : ` $${displayLegend?.close}`} - {:else if !$isCrosshairMoveActive && $realtimePrice !== null} - {$stockTicker?.includes('.DE') || $stockTicker?.includes('.PA') || $stockTicker?.includes('.F') ? `${$currentPortfolioPrice}€` : ` $${$currentPortfolioPrice}`} - {:else} - {$stockTicker?.includes('.DE') || $stockTicker?.includes('.PA') || $stockTicker?.includes('.F') ? `${displayLegend?.close}€` : ` $${displayLegend?.close}`} - - {/if} - - {#if $priceIncrease === true} -
- {:else if $priceIncrease === false} -
- {/if} + -
+ + + + + {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} + {$displayCompanyName} ({$stockTicker}) Stock Price, Quote & News · stocknear + - - - -
- - {#if displayLegend?.change >= 0} - - +{displayLegend?.change}% - {:else if displayLegend?.change < 0} - - {displayLegend?.change}% - {/if} + + + + + + + - {displayLegend?.date} - + + + + + + + - -
+
+
+
+ +
+
+ + -
+
+
+
+ {#if $isCrosshairMoveActive} + {$stockTicker?.includes(".DE") || $stockTicker?.includes(".PA") || $stockTicker?.includes(".F") ? `${displayLegend?.close}€` : ` $${displayLegend?.close}`} + {:else if !$isCrosshairMoveActive && $realtimePrice !== null} + {$stockTicker?.includes(".DE") || $stockTicker?.includes(".PA") || $stockTicker?.includes(".F") ? `${$currentPortfolioPrice}€` : ` $${$currentPortfolioPrice}`} + {:else} + {$stockTicker?.includes(".DE") || $stockTicker?.includes(".PA") || $stockTicker?.includes(".F") ? `${displayLegend?.close}€` : ` $${displayLegend?.close}`} + {/if} -
- {#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 $priceIncrease === true} +
+ {:else if $priceIncrease === false} +
+ {/if} +
-
- {/if} - -
- -
- - -
- - - - - - - - - - \ No newline at end of file + diff --git a/src/routes/stocks/[tickerID]/ai-analysis/+page.svelte b/src/routes/stocks/[tickerID]/ai-analysis/+page.svelte new file mode 100644 index 00000000..ff8aebc5 --- /dev/null +++ b/src/routes/stocks/[tickerID]/ai-analysis/+page.svelte @@ -0,0 +1,764 @@ + + + + + + + + + + {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} {$displayCompanyName} ({$stockTicker}) Options Activity · stocknear + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+

+ Unsual Options Activity +

+ +
+ + + {#if optionsPlotData?.length !== 0} + 1 Year of options activity involving {$displayCompanyName} by major institutional traders and hedge funds. + {:else} + There's no data available, indicating that major traders may not be actively betting on {$displayCompanyName}. + {/if} + +
+ +
+ + + {#if optionsPlotData?.length !== 0} + +
+
+ + +
+ {displayTotalVolume} +
+
+
+ +
+ {displayTotalOpenInterest} +
+
+
+ +
+ {putCallRatio !== 'Infinity' ? putCallRatio : '> 1'} +
+
+
+ + +
+ {putCallOpenInterestRatio !== 'Infinity' ? putCallOpenInterestRatio : '> 1'} +
+
+
+ +
+ + + + +
+ + + + +
+ {#if filteredList?.length !== 0} + + {:else} + +
+ + No Options activity found +
+
+ {/if} +
+ + + +

+ Latest Options Activity +

+ + + + {#if optionList?.length !== 0} + + +
+
+ +
+
+ Flow Sentiment + {flowSentiment} +
+ +
+ + +
+
+ Put/Call + + {latestPutCallRatio?.toFixed(3)} + +
+ +
+ + + + + + =1 ? 0 : 100-(latestPutCallRatio*100)?.toFixed(2)}> + + + +
+ {latestPutCallRatio?.toFixed(2)} +
+
+ + +
+ + +
+
+ Call Flow + + {new Intl.NumberFormat("en", { + minimumFractionDigits: 0, + maximumFractionDigits: 0 + }).format(displayCallVolume)} + +
+ +
+ + + + + + + + + +
+ {callPercentage}% +
+
+ +
+ + +
+
+ Put Flow + + {new Intl.NumberFormat("en", { + minimumFractionDigits: 0, + maximumFractionDigits: 0 + }).format(displayPutVolume)} + +
+ +
+ + + + + + + + + +
+ {putPercentage}% +
+
+ + +
+ + + +
+
+ OTM Ratio + + Volume in % + +
+ +
+ + + + + + =1 ? 0 : 100-(displayOTMRatio*100)?.toFixed(2)}> + + + +
+ {(displayOTMRatio*100)?.toFixed(0)}% +
+
+ + +
+ + + +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + {#each (data?.user?.tier === 'Pro' ? optionList : optionList?.slice(0,3)) as item, index} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/each} + + +
TimeDateExpiryStrikeC/PSent.SpotPricePrem.TypeVol.OI
+ {formatTime(item?.time)} + + {formatDate(item?.date)} + + {item?.dte < 0 ? 'expired' : item?.dte +'d'} + + {item?.strike_price} + + {item?.put_call} + + {item?.sentiment} + + {item?.underlying_price} + + {item?.price} + + {abbreviateNumber(item?.cost_basis)} + + {item?.type} + + {new Intl.NumberFormat("en", { + minimumFractionDigits: 0, + maximumFractionDigits: 0 + }).format(item?.volume)} + + {new Intl.NumberFormat("en", { + minimumFractionDigits: 0, + maximumFractionDigits: 0 + }).format(item?.open_interest)} +
+ +
+ + + + {:else} +
+
+ + No Options activity found +
+
+ {/if} + + {/if} + + + + +
+ + +
+
+ + +
+ + + + + \ No newline at end of file diff --git a/src/routes/stocks/[tickerID]/ai-analysis/+page.ts b/src/routes/stocks/[tickerID]/ai-analysis/+page.ts new file mode 100644 index 00000000..2cad2a5f --- /dev/null +++ b/src/routes/stocks/[tickerID]/ai-analysis/+page.ts @@ -0,0 +1,89 @@ +import { getCache, setCache } from '$lib/store'; + + +function daysLeft(targetDate) { + const targetTime = new Date(targetDate).getTime(); + const currentTime = new Date().getTime(); + const difference = targetTime - currentTime; + + const millisecondsPerDay = 1000 * 60 * 60 * 24; + const daysLeft = Math?.ceil(difference / millisecondsPerDay); + + return daysLeft; +} + + +export const load = async ({ parent, params }) => { + + + const {apiKey, apiURL} = await parent(); + + + const getOptionsPlotData = async () => { + + const cachedData = getCache(params.tickerID, 'getOptionsPlotData'); + if (cachedData) { + return cachedData; + } else { + + const postData = { + ticker: params.tickerID + }; + + const response = await fetch(apiURL + '/options-plot-ticker', { + method: 'POST', + headers: { + "Content-Type": "application/json", "X-API-KEY": apiKey + }, + body: JSON.stringify(postData) + }); + + const output = await response.json(); + + setCache(params.tickerID, output, 'getOptionsPlotData'); + return output; + + } + + }; + + const getOptionsFlowData = async () => { + + let output; + const cachedData = getCache(params.tickerID, 'getOptionsFlowData'); + if (cachedData) { + output = cachedData; + } else { + + const postData = { + ticker: params.tickerID + }; + + // make the POST request to the endpoint + const response = await fetch(apiURL + '/options-flow-ticker', { + method: 'POST', + headers: { + "Content-Type": "application/json", "X-API-KEY": apiKey + }, + body: JSON.stringify(postData) + }); + + output = await response.json(); + + output?.forEach(item => { + item.dte = daysLeft(item?.date_expiration); + }); + + setCache(params.tickerID, output, 'getOptionsFlowData'); + } + + return output; + }; + + // Make sure to return a promise + return { + getOptionsPlotData: await getOptionsPlotData(), + getOptionsFlowData: await getOptionsFlowData() + }; + +}; diff --git a/src/routes/stocks/[tickerID]/stats/+layout.svelte b/src/routes/stocks/[tickerID]/stats/+layout.svelte index da3bbac7..906b0c39 100644 --- a/src/routes/stocks/[tickerID]/stats/+layout.svelte +++ b/src/routes/stocks/[tickerID]/stats/+layout.svelte @@ -1,121 +1,132 @@ -
-
- - -
- - +
+ +
+ + +
- - - \ No newline at end of file + } + diff --git a/src/routes/stocks/[tickerID]/stats/+page.svelte b/src/routes/stocks/[tickerID]/stats/+page.svelte index 2ae518b4..4b6d5ff9 100644 --- a/src/routes/stocks/[tickerID]/stats/+page.svelte +++ b/src/routes/stocks/[tickerID]/stats/+page.svelte @@ -1,1131 +1,967 @@ - - - {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ''} {$displayCompanyName} ({$stockTicker}) Statistics & Valuation Metrics · stocknear + {$numberOfUnreadNotification > 0 ? `(${$numberOfUnreadNotification})` : ""} + {$displayCompanyName} ({$stockTicker}) Statistics & Valuation Metrics · stocknear - + - + - + - - + + - - -
-

- Fundamental Data -

+

Fundamental Data

-
- - Get detailed Fundamental insights of {$displayCompanyName} and compare it to the S&P500. -
+
+ + Get detailed Fundamental insights of {$displayCompanyName} and compare it to the S&P500. +
- {#if Object?.keys(quantStats)?.length !== 0} - - - -
-
+ {#if Object?.keys(quantStats)?.length !== 0} + +
+
+
+
+ YTD Return +
+
+ {$stockTicker} + + {#if quantStats[$stockTicker?.toUpperCase()]["YTD %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% + {:else} + {quantStats[$stockTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% + {/if} + +
+
vs.
+
+ SPY + + {#if quantStats["SPY"]["YTD %"] >= 0} + +{quantStats["SPY"]["YTD %"]?.toFixed(2)}% + {:else} + {quantStats["SPY"]["YTD %"]?.toFixed(2)}% + {/if} + +
+
+
+
- YTD Return -
-
- {$stockTicker} - - {#if quantStats[$stockTicker?.toUpperCase()]["YTD %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% - {:else} - {quantStats[$stockTicker?.toUpperCase()]["YTD %"]?.toFixed(2)}% - {/if} - -
-
- vs. -
-
- SPY - - {#if quantStats['SPY']["YTD %"] >=0} - +{quantStats['SPY']["YTD %"]?.toFixed(2)}% - {:else} - {quantStats['SPY']["YTD %"]?.toFixed(2)}% - {/if} - -
-
-
-
- - -
-
1-Year Return
-
- {$stockTicker} - - {#if quantStats[$stockTicker?.toUpperCase()]["1Y %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% - {:else} - {quantStats[$stockTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% - {/if} - -
-
- vs. -
-
- SPY - - {#if quantStats['SPY']["1Y %"] >=0} - +{quantStats['SPY']["1Y %"]?.toFixed(2)}% - {:else} - {quantStats['SPY']["1Y %"]?.toFixed(2)}% - {/if} - -
+
+ {$stockTicker} + + {#if quantStats[$stockTicker?.toUpperCase()]["1Y %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% + {:else} + {quantStats[$stockTicker?.toUpperCase()]["1Y %"]?.toFixed(2)}% + {/if} + +
+
vs.
+
+ SPY + + {#if quantStats["SPY"]["1Y %"] >= 0} + +{quantStats["SPY"]["1Y %"]?.toFixed(2)}% + {:else} + {quantStats["SPY"]["1Y %"]?.toFixed(2)}% + {/if} + +
-
-
- - -
-
- 3-Year Return -
-
- {$stockTicker} - - {#if quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% - {:else} - {quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% - {/if} - -
-
- vs. -
-
- SPY - - {#if quantStats['SPY']["3Y (ann.) %"] >=0} - +{quantStats['SPY']["3Y (ann.) %"]?.toFixed(2)}% - {:else} - {quantStats['SPY']["3Y (ann.) %"]?.toFixed(2)}% - {/if} - -
+
+ +
+
+ 3-Year Return +
+
+ {$stockTicker} + + {#if quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% + {:else} + {quantStats[$stockTicker?.toUpperCase()]["3Y (ann.) %"]?.toFixed(2)}% + {/if} + +
+
vs.
+
+ SPY + + {#if quantStats["SPY"]["3Y (ann.) %"] >= 0} + +{quantStats["SPY"]["3Y (ann.) %"]?.toFixed(2)}% + {:else} + {quantStats["SPY"]["3Y (ann.) %"]?.toFixed(2)}% + {/if} + +
+
+
+
-
- - -
-
- + + +
+ {#await import("$lib/components/AnalystEstimate.svelte") then { default: Comp }} + + {/await} +
+
+ + + +
+ {#await import("$lib/components/RevenueSegmentation.svelte") then { default: Comp }} + + {/await} +
+
+
- - - - +

Company Stats

-

- Company Stats -

- - -
- - - - - - - - - - - - - - - - - - - - - - - + + + + - + + + + + - - {:else} + + + + + -

- -

- {/if} + + + + + - + + + + + + + + + + + + + + + + + + +
Mkt Cap ${marketCap}Volume{volume}
Price${currentPrice}Prev. Close${previousClose}
Alpha - {typeof alpha !== 'undefined' ? alpha : '-'} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
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 $stockTicker in quantStats && Object.keys(quantStats[$stockTicker]).length > 0} +

+ Worst 10 Drawdowns of {$stockTicker} +

+
+ + + + + + + + + + + {#each quantStats[$stockTicker?.toUpperCase()]["Worst 10 Drawdowns"] as item} + + - - - - - - - - - - - - -
StartedRecoveredDrawdownDays
+ {new Date(item["Started"]).toLocaleString("en-US", { month: "short", day: "numeric", year: "numeric", daySuffix: "2-digit" })} Beta - {typeof beta !== 'undefined' && !isNaN(beta) ? beta?.toFixed(2) : '-'} -
EPS{eps}PE{pe}
-
- - - - - {#if $stockTicker in quantStats && Object.keys(quantStats[$stockTicker]).length > 0} - -

- Worst 10 Drawdowns of {$stockTicker} -

-
- - - - - - - - - - - {#each quantStats[$stockTicker?.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} + + {#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']} -
-
- - -

- {$stockTicker} vs. - 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' })} - - - - - - - -
- - - - - - - - - - - - - + {/each} + +
- Metric - - {$stockTicker} - - S&P500 -
- Cumulative Return + {:else} + {new Date(item["Recovered"]).toLocaleString("en-US", { month: "short", day: "numeric", year: "numeric", daySuffix: "2-digit" })} + {/if} - {#if quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"] >=0} - +{abbreviateNumber(quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"])}% - {:else} - {abbreviateNumber(quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"])}% - {/if} + + {item["Drawdown"]?.toFixed(2)}% - {#if quantStats['SPY']["Cumulative Return %"] >=0} - +{quantStats['SPY']["Cumulative Return %"]}% - {:else} - {quantStats['SPY']["Cumulative Return %"]}% - {/if} + + {item["Days"]}
+
-
- Compound Annual Growth Rate (CAGR) - - {#if quantStats[$stockTicker?.toUpperCase()]["CAGR %"] >=0} +

+ {$stockTicker} vs. 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" })} + + + + +
+ + + + + + + + + + + + + + + + + + - + - + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + + - - - + + - + - + + - - - + + + + + + + + + + + + + + - + - + + - - - - + + - + - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + - - - + + - + - + + - - - + + - + - + + - - - + + - + - + + - - - + + - + - - - - - + + + + + - + - + + - - - - - - - - - - - - - - - - - - - - - - + + - + - + + - - - + + - + - + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - -
Metric + {$stockTicker} + S&P500
Cumulative Return + {#if quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"] >= 0} + +{abbreviateNumber(quantStats[$stockTicker?.toUpperCase()]["Cumulative Return %"])}% + {:else} + {abbreviateNumber(quantStats[$stockTicker?.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[$stockTicker?.toUpperCase()]["CAGR %"] >= 0} +{quantStats[$stockTicker?.toUpperCase()]["CAGR %"]}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["CAGR %"]}% + {quantStats[$stockTicker?.toUpperCase()]["CAGR %"]}% {/if} - - {#if quantStats['SPY']["CAGR %"] >=0} - +{quantStats['SPY']["CAGR %"]}% + + {#if quantStats["SPY"]["CAGR %"] >= 0} + +{quantStats["SPY"]["CAGR %"]}% {:else} - {quantStats['SPY']["CAGR %"]}% + {quantStats["SPY"]["CAGR %"]}% {/if} -
- Sharpe - - {quantStats[$stockTicker?.toUpperCase()]["Sharpe"]?.toFixed(2)} - - {quantStats['SPY']["Sharpe"]?.toFixed(2)} -
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} - {quantStats['SPY']["Max Drawdown"]}% - {/if} -
- 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)} -
Sortino + {quantStats[$stockTicker?.toUpperCase()]["Sortino"]?.toFixed(2)} + + {quantStats["SPY"]["Sortino"]?.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} - {quantStats['SPY']["Expected Daily %"]}% - {/if} -
- 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} - {quantStats['SPY']["Expected Monthly %"]}% - {/if} -
- 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 %"]}% +
Max Drawdown + {#if quantStats[$stockTicker?.toUpperCase()]["Max Drawdown"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Max Drawdown"]}% {:else} - {quantStats['SPY']["Expected Yearly %"]}% + {quantStats[$stockTicker?.toUpperCase()]["Max Drawdown"]}% {/if} -
- 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)}% + + {#if quantStats["SPY"]["Max Drawdown"] >= 0} + +{quantStats["SPY"]["Max Drawdown"]}% {:else} - {quantStats['SPY']["Daily Value-at-Risk %"]?.toFixed(2)}% + {quantStats["SPY"]["Max Drawdown"]}% {/if} -
- Expected Shortfall (cVaR) - - {#if quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% +
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 Shortfall (cVaR) %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Expected Daily %"]}% {/if} - - {#if quantStats['SPY']["Expected Shortfall (cVaR) %"] >=0} - +{quantStats['SPY']["Expected Shortfall (cVaR) %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Expected Daily %"] >= 0} + +{quantStats["SPY"]["Expected Daily %"]}% {:else} - {quantStats['SPY']["Expected Shortfall (cVaR) %"]?.toFixed(2)}% + {quantStats["SPY"]["Expected Daily %"]}% {/if} -
- 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 - - {#if quantStats[$stockTicker?.toUpperCase()]["MTD %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% +
Expected Monthly + {#if quantStats[$stockTicker?.toUpperCase()]["Expected Monthly %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Expected Monthly %"]}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Expected Monthly %"]}% {/if} - - {#if quantStats['SPY']["MTD %"] >=0} - +{quantStats['SPY']["MTD %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Expected Monthly %"] >= 0} + +{quantStats["SPY"]["Expected Monthly %"]}% {:else} - {quantStats['SPY']["MTD %"]?.toFixed(2)}% + {quantStats["SPY"]["Expected Monthly %"]}% {/if} -
- 3M - - {#if quantStats[$stockTicker?.toUpperCase()]["3M %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% +
Expected Yearly + {#if quantStats[$stockTicker?.toUpperCase()]["Expected Yearly %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Expected Yearly %"]}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Expected Yearly %"]}% {/if} - - {#if quantStats['SPY']["3M %"] >=0} - +{quantStats['SPY']["3M %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Expected Yearly %"] >= 0} + +{quantStats["SPY"]["Expected Yearly %"]}% {:else} - {quantStats['SPY']["3M %"]?.toFixed(2)}% + {quantStats["SPY"]["Expected Yearly %"]}% {/if} -
- 6M - - {#if quantStats[$stockTicker?.toUpperCase()]["6M %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% +
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()]["6M %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Daily Value-at-Risk %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["6M %"] >=0} - +{quantStats['SPY']["6M %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Daily Value-at-Risk %"] >= 0} + +{quantStats["SPY"]["Daily Value-at-Risk %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["6M %"]?.toFixed(2)}% + {quantStats["SPY"]["Daily Value-at-Risk %"]?.toFixed(2)}% {/if} -
- Best Day - - {#if quantStats[$stockTicker?.toUpperCase()]["Best Day %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% +
Expected Shortfall (cVaR) + {#if quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Best Day %"] >=0} - +{quantStats['SPY']["Best Day %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Expected Shortfall (cVaR) %"] >= 0} + +{quantStats["SPY"]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Best Day %"]?.toFixed(2)}% + {quantStats["SPY"]["Expected Shortfall (cVaR) %"]?.toFixed(2)}% {/if} -
- Worst Day - - {#if quantStats[$stockTicker?.toUpperCase()]["Worst Day %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% +
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 + {#if quantStats[$stockTicker?.toUpperCase()]["MTD %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["MTD %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Worst Day %"] >=0} - +{quantStats['SPY']["Worst Day %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["MTD %"] >= 0} + +{quantStats["SPY"]["MTD %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Worst Day %"]?.toFixed(2)}% + {quantStats["SPY"]["MTD %"]?.toFixed(2)}% {/if} -
- Best Month - - {#if quantStats[$stockTicker?.toUpperCase()]["Best Month %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Best Month %"]?.toFixed(2)}% +
3M + {#if quantStats[$stockTicker?.toUpperCase()]["3M %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Best Month %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["3M %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Best Month %"] >=0} - +{quantStats['SPY']["Best Month %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["3M %"] >= 0} + +{quantStats["SPY"]["3M %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Best Month %"]?.toFixed(2)}% + {quantStats["SPY"]["3M %"]?.toFixed(2)}% {/if} -
- Worst Month - - {#if quantStats[$stockTicker?.toUpperCase()]["Worst Month %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% +
6M + {#if quantStats[$stockTicker?.toUpperCase()]["6M %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["6M %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Worst Month %"] >=0} - +{quantStats['SPY']["Worst Month %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["6M %"] >= 0} + +{quantStats["SPY"]["6M %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Worst Month %"]?.toFixed(2)}% + {quantStats["SPY"]["6M %"]?.toFixed(2)}% {/if} -
- Best Year - - {#if quantStats[$stockTicker?.toUpperCase()]["Best Year %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% +
Best Day + {#if quantStats[$stockTicker?.toUpperCase()]["Best Day %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Best Day %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Best Year %"] >=0} - +{quantStats['SPY']["Best Year %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Best Day %"] >= 0} + +{quantStats["SPY"]["Best Day %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Best Year %"]?.toFixed(2)}% + {quantStats["SPY"]["Best Day %"]?.toFixed(2)}% {/if} -
- Worst Year - - {#if quantStats[$stockTicker?.toUpperCase()]["Worst Year %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% +
Worst Day + {#if quantStats[$stockTicker?.toUpperCase()]["Worst Day %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Worst Year %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Worst Day %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Worst Year %"] >=0} - +{quantStats['SPY']["Worst Year %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Worst Day %"] >= 0} + +{quantStats["SPY"]["Worst Day %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Worst Year %"]?.toFixed(2)}% + {quantStats["SPY"]["Worst Day %"]?.toFixed(2)}% {/if} -
- Avg. Drawdown - - {#if quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown"]?.toFixed(2)}% +
Best Month + {#if quantStats[$stockTicker?.toUpperCase()]["Best Month %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Best Month %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Best Month %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Avg. Drawdown"] >=0} - +{quantStats['SPY']["Avg. Drawdown"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Best Month %"] >= 0} + +{quantStats["SPY"]["Best Month %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Avg. Drawdown"]?.toFixed(2)}% + {quantStats["SPY"]["Best Month %"]?.toFixed(2)}% {/if} -
- 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 - - {#if quantStats[$stockTicker?.toUpperCase()]["Avg. Up Month %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Avg. Up Month %"]?.toFixed(2)}% +
Worst Month + {#if quantStats[$stockTicker?.toUpperCase()]["Worst Month %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Avg. Up Month %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Worst Month %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Avg. Up Month %"] >=0} - +{quantStats['SPY']["Avg. Up Month %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Worst Month %"] >= 0} + +{quantStats["SPY"]["Worst Month %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Avg. Up Month %"]?.toFixed(2)}% + {quantStats["SPY"]["Worst Month %"]?.toFixed(2)}% {/if} -
- Avg. Down Month - - {#if quantStats[$stockTicker?.toUpperCase()]["Avg. Down Month %"] >=0} - +{quantStats[$stockTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% +
Best Year + {#if quantStats[$stockTicker?.toUpperCase()]["Best Year %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% {:else} - {quantStats[$stockTicker?.toUpperCase()]["Avg. Down Month %"]?.toFixed(2)}% + {quantStats[$stockTicker?.toUpperCase()]["Best Year %"]?.toFixed(2)}% {/if} - - {#if quantStats['SPY']["Avg. Down Month %"] >=0} - +{quantStats['SPY']["Avg. Down Month %"]?.toFixed(2)}% + + {#if quantStats["SPY"]["Best Year %"] >= 0} + +{quantStats["SPY"]["Best Year %"]?.toFixed(2)}% {:else} - {quantStats['SPY']["Avg. Down Month %"]?.toFixed(2)}% + {quantStats["SPY"]["Best Year %"]?.toFixed(2)}% {/if} -
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} + {quantStats["SPY"]["Worst Year %"]?.toFixed(2)}% + {/if} +
- Win Days - - {quantStats[$stockTicker?.toUpperCase()]["Win Days %"]?.toFixed(2)}% - - {quantStats['SPY']["Win Days %"]?.toFixed(2)}% -
Avg. Drawdown + {#if quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown"]?.toFixed(2)}% + {:else} + {quantStats[$stockTicker?.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} +
- Win Month - - {quantStats[$stockTicker?.toUpperCase()]["Win Month %"]?.toFixed(2)}% - - {quantStats['SPY']["Win Month %"]?.toFixed(2)}% -
Avg. Drawdown Days + {quantStats[$stockTicker?.toUpperCase()]["Avg. Drawdown Days"]} + + {quantStats["SPY"]["Avg. Drawdown Days"]} +
- Win Quarter - - {quantStats[$stockTicker?.toUpperCase()]["Win Quarter %"]?.toFixed(2)}% - - {quantStats['SPY']["Win Quarter %"]?.toFixed(2)}% -
Recovery Factor + {quantStats[$stockTicker?.toUpperCase()]["Recovery Factor"]?.toFixed(2)} + + {quantStats["SPY"]["Recovery Factor"]?.toFixed(2)} +
- Win Year - - {quantStats[$stockTicker?.toUpperCase()]["Win Year %"]?.toFixed(2)}% - - {quantStats['SPY']["Win Year %"]?.toFixed(2)}% -
+
Ulcer Index + {quantStats[$stockTicker?.toUpperCase()]["Ulcer Index"]?.toFixed(2)} + + {quantStats["SPY"]["Ulcer Index"]?.toFixed(2)} +
Avg. Up Month + {#if quantStats[$stockTicker?.toUpperCase()]["Avg. Up Month %"] >= 0} + +{quantStats[$stockTicker?.toUpperCase()]["Avg. Up Month %"]?.toFixed(2)}% + {:else} + {quantStats[$stockTicker?.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[$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} + {quantStats["SPY"]["Avg. Down Month %"]?.toFixed(2)}% + {/if} +
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)}% +
+
+ {:else} +

+ +

+ {/if}
- {:else} -

- No data available -

- {/if} - -
-
\ No newline at end of file + {:else} +

No data available

+ {/if} +
+
+