diff --git a/src/lib/components/MarketMaker.svelte b/src/lib/components/MarketMaker.svelte index 3f89a0d6..36a30a80 100644 --- a/src/lib/components/MarketMaker.svelte +++ b/src/lib/components/MarketMaker.svelte @@ -356,11 +356,11 @@ else { - {abbreviateNumber(item?.avgWeeklyTradeCount)} + {abbreviateNumber(Math.floor(item?.avgWeeklyTradeCount))} - {abbreviateNumber(item?.avgWeeklyShareQuantity)} + {abbreviateNumber(Math.floor(item?.avgWeeklyShareQuantity))} diff --git a/src/routes/stock-screener/[strategyId]/+page.svelte b/src/routes/stock-screener/[strategyId]/+page.svelte index 336b77e3..8207d15e 100644 --- a/src/routes/stock-screener/[strategyId]/+page.svelte +++ b/src/routes/stock-screener/[strategyId]/+page.svelte @@ -105,7 +105,6 @@ const getStockScreenerData = async (rules) => { growthOperatingExpenses: (ruleOfList?.find(item => item.name === "growthOperatingExpense") || { condition: 'above' }).condition, operatingIncome: (ruleOfList?.find(item => item.name === "operatingIncome") || { condition: 'above' }).condition, growthOperatingIncome: (ruleOfList?.find(item => item.name === "growthOperatingIncome") || { condition: 'above' }).condition, - esgScore: (ruleOfList?.find(item => item.name === "esgScore") || { condition: 'above' }).condition, marketCap: (ruleOfList?.find(item => item.name === "marketCap") || { condition: 'above' }).condition, var: (ruleOfList?.find(item => item.name === "var") || { condition: 'above' }).condition, trendAnalysis: (ruleOfList?.find(item => item.name === "trendAnalysis") || { condition: 'above' }).condition, @@ -174,14 +173,13 @@ const getStockScreenerData = async (rules) => { { rule: 'beta', label: 'Beta', category: 'fund'}, { rule: 'ebitda', label: 'Earnings Before Interests, Taxes, Depreciation & Amortisation (EBITDA)', category: 'fund'}, { rule: 'growthEBITDA', label: 'EBITDA Growth [%]', category: 'fund'}, - { rule: 'esgScore', label: 'ESG Score', category: 'fund' }, { rule: 'var', label: 'Value at Risk (VaR)', category: 'fund' }, { rule: 'trendAnalysis', label: 'AI Trend Analysis (Bullish)', category: 'ai' }, { rule: 'fundamentalAnalysis', label: 'AI Fundamental Analysis (Bullish)', category: 'ai' }, { rule: 'ratingRecommendation', label: 'Analyst Rating', category: 'fund'}, { rule: 'currentRatio', label: 'Current Ratio',category: 'fund' }, { rule: 'quickRatio', label: 'Quick Ratio',category: 'fund' }, - { rule: 'debtEquityRatio', label: 'Debt Equity Ratio',category: 'fund' }, + { rule: 'debtEquityRatio', label: 'Debt / Equity',category: 'fund' }, { rule: 'debtRatio', label: 'Debt Ratio',category: 'fund' }, { rule: 'returnOnAssets', label: 'Return on Assets',category: 'fund' }, { rule: 'returnOnEquity', label: 'Return on Equity',category: 'fund' }, @@ -258,7 +256,6 @@ const getStockScreenerData = async (rules) => { let valuePriceToBookRatio = (ruleOfList?.find(item => item.name === "priceToBookRatio") || { value: 5 }).value; let valuePriceToSalesRatio = (ruleOfList?.find(item => item.name === "priceToSalesRatio") || { value: 10 }).value; let valueBeta = (ruleOfList?.find(item => item.name === "beta") || { value: 1 }).value; - let valueESGScore = (ruleOfList?.find(item => item.name === "esgScore") || { value: 60 }).value; let valueMarketCap = (ruleOfList?.find(item => item.name === "marketCap") || { value: 50 }).value; let valueAnalyst = (ruleOfList?.find(item => item.name === "ratingRecommendation") || { value: 1 }).value; let valueRSI = (ruleOfList?.find(item => item.name === "rsi") || { value: 40 }).value; @@ -339,7 +336,6 @@ const valueMappings = { beta: valueBeta, ebitda: valueEBITDA, growthEBITDA: valueGrowthEBITDA, - esgScore: valueESGScore, marketCap: valueMarketCap, rsi: valueRSI, stochRSI: valueStochRSI, @@ -397,7 +393,6 @@ const conditions = { beta: ruleCondition.beta, ebitda: ruleCondition.ebitda, growthEBITDA: ruleCondition.growthEBITDA, - esgScore: ruleCondition.esgScore, marketCap: ruleCondition.marketCap, rsi: ruleCondition.rsi, stochRSI: ruleCondition.stochRSI, @@ -608,227 +603,82 @@ async function handleUpdateRule(rule) { } - -/* -$: { - if (ruleOfList) { - const ruleToUpdate = ruleOfList?.find(rule => rule.name === ruleName); - - // Check if the rule exists and if the name is in the valueMappings - if (ruleToUpdate && valueMappings?.hasOwnProperty(ruleToUpdate.name)) { - // Update the rule's value from the mappings - ruleToUpdate.value = valueMappings[ruleToUpdate.name]; - ruleToUpdate.condition = ruleCondition[ruleToUpdate.name]; - - // Trigger Svelte's reactivity by reassigning the array. - ruleOfList = [...ruleOfList]; - } - - filteredData = filterStockScreenerData(); - } - } - -*/ - $: { if (ruleOfList) { - - const ruleToUpdate = ruleOfList?.find(rule => rule.name === ruleName); + const ruleToUpdate = ruleOfList.find(rule => rule.name === ruleName); if (ruleToUpdate) { - switch (ruleToUpdate.name) { - case 'payoutRatio': - ruleToUpdate.value = valuePayoutRatio; - break; - case 'dividendGrowth': - ruleToUpdate.value = valueDividendGrowth; - break; - case 'dividendYield': - ruleToUpdate.value = valueDividendYield; - break; - case 'annualDividend': - ruleToUpdate.value = valueAnnualDividend; - break; - case 'eps': - ruleToUpdate.value = valueEPS; - break; - case 'growthEPS': - ruleToUpdate.value = valueGrowthEPS; - break; - case 'marketCap': - ruleToUpdate.value = valueMarketCap; - break; - case 'beta': - ruleToUpdate.value = valueBeta; - break; - case 'pe': - ruleToUpdate.value = valuePE; - break; - case 'forwardPE': - ruleToUpdate.value = valueForwardPE; - break; - case 'priceToBookRatio': - ruleToUpdate.value = valuePriceToBookRatio; - break; - case 'priceToSalesRatio': - ruleToUpdate.value = valuePriceToSalesRatio; - break; - case 'interestIncome': - ruleToUpdate.value = valueInterestIncome; - break; - case 'esgScore': - ruleToUpdate.value = valueESGScore; - break; - case 'ratingRecommendation': - ruleToUpdate.value = valueAnalyst //ruleTrend[ruleName]; - break; - case 'revenue': - ruleToUpdate.value = valueRevenue; - break; - case 'growthRevenue': - ruleToUpdate.value = valueGrowthRevenue; - break; - case 'ebitda': - ruleToUpdate.value = valueEBITDA; - break; - case 'growthEBITDA': - ruleToUpdate.value = valueGrowthEBITDA; - break; - case 'operatingExpenses': - ruleToUpdate.value = valueOperatingExpenses; - break; - case 'growthOperatingExpenses': - ruleToUpdate.value = valueGrowthOperatingExpenses; - break; - case 'costOfRevenue': - ruleToUpdate.value = valueCostOfRevenue; - break; - case 'growthCostOfRevenue': - ruleToUpdate.value = valueGrowthCostOfRevenue; - break; - case 'costAndExpenses': - ruleToUpdate.value = valueCostAndExpenses; - break; - case 'growthCostAndExpenses': - ruleToUpdate.value = valueGrowthCostAndExpenses; - break; - case 'netIncome': - ruleToUpdate.value = valueNetIncome; - break; - case 'growthNetIncome': - ruleToUpdate.value = valueGrowthNetIncome; - break; - case 'grossProfit': - ruleToUpdate.value = valueGrossProfit; - break; - case 'growthGrossProfit': - ruleToUpdate.value = valueGrowthGrossProfit; - break; - case 'researchAndDevelopmentExpenses': - ruleToUpdate.value = valueResearchAndDevelopmentExpenses; - break; - case 'growthResearchAndDevelopmentExpenses': - ruleToUpdate.value = valueGrowthResearchAndDevelopmentExpenses; - break; - case 'interestExpense': - ruleToUpdate.value = valueInterestExpenses; - break; - case 'growthInterestExpense': - ruleToUpdate.value = valueGrowthInterestExpenses; - break; - case 'operatingIncome': - ruleToUpdate.value = valueOperatingIncome; - break; - case 'growthOperatingIncome': - ruleToUpdate.value = valueGrowthOperatingIncome; - break; - case 'rsi': - ruleToUpdate.value = valueRSI; - break; - case 'stochRSI': - ruleToUpdate.value = valueStochRSI; - break; - case 'mfi': - ruleToUpdate.value = valueMFI; - break; - case 'cci': - ruleToUpdate.value = valueCCI; - break; - case 'atr': - ruleToUpdate.value = valueATR; - break; - case 'sma50': - ruleToUpdate.value = valueSMA50; - break; - case 'sma200': - ruleToUpdate.value = valueSMA200; - break; - case 'ema50': - ruleToUpdate.value = valueEMA50; - break; - case 'ema200': - ruleToUpdate.value = valueEMA200; - break; - case 'change1W': - ruleToUpdate.value = valueChange1W; - break; - case 'change1M': - ruleToUpdate.value = valueChange1M; - break; - case 'change3M': - ruleToUpdate.value = valueChange3M; - break; - case 'change6M': - ruleToUpdate.value = valueChange6M; - break; - case 'change1Y': - ruleToUpdate.value = valueChange1Y; - break; - case 'change3Y': - ruleToUpdate.value = valueChange3Y; - case 'avgVolume': - ruleToUpdate.value = valueAvgVolume; - break; - case 'var': - ruleToUpdate.value = valueVaR; - break; - case 'trendAnalysis': - ruleToUpdate.value = valueTrendAnalysis; - break; - case 'fundamentalAnalysis': - ruleToUpdate.value = valueFundamentalAnalysis; - break; - case 'currentRatio': - ruleToUpdate.value = valueCurrentRatio; - break; - case 'quickRatio': - ruleToUpdate.value = valueQuickRatio; - break; - case 'debtEquityRatio': - ruleToUpdate.value = valueDebtEquityRatio; - break; - case 'debtRatio': - ruleToUpdate.value = valueDebtRatio; - break; - case 'returnOnAssets': - ruleToUpdate.value = valueReturnOnAssets; - break; - case 'returnOnEquity': - ruleToUpdate.value = valueReturnOnEquity; - break; - default: - // Handle any case not explicitly mentioned - break; - } + const valueMap = { + payoutRatio: valuePayoutRatio, + dividendGrowth: valueDividendGrowth, + dividendYield: valueDividendYield, + annualDividend: valueAnnualDividend, + eps: valueEPS, + growthEPS: valueGrowthEPS, + marketCap: valueMarketCap, + beta: valueBeta, + pe: valuePE, + forwardPE: valueForwardPE, + priceToBookRatio: valuePriceToBookRatio, + priceToSalesRatio: valuePriceToSalesRatio, + interestIncome: valueInterestIncome, + ratingRecommendation: valueAnalyst, + revenue: valueRevenue, + growthRevenue: valueGrowthRevenue, + ebitda: valueEBITDA, + growthEBITDA: valueGrowthEBITDA, + operatingExpenses: valueOperatingExpenses, + growthOperatingExpenses: valueGrowthOperatingExpenses, + costOfRevenue: valueCostOfRevenue, + growthCostOfRevenue: valueGrowthCostOfRevenue, + costAndExpenses: valueCostAndExpenses, + growthCostAndExpenses: valueGrowthCostAndExpenses, + netIncome: valueNetIncome, + growthNetIncome: valueGrowthNetIncome, + grossProfit: valueGrossProfit, + growthGrossProfit: valueGrowthGrossProfit, + researchAndDevelopmentExpenses: valueResearchAndDevelopmentExpenses, + growthResearchAndDevelopmentExpenses: valueGrowthResearchAndDevelopmentExpenses, + interestExpense: valueInterestExpenses, + growthInterestExpense: valueGrowthInterestExpenses, + operatingIncome: valueOperatingIncome, + growthOperatingIncome: valueGrowthOperatingIncome, + rsi: valueRSI, + stochRSI: valueStochRSI, + mfi: valueMFI, + cci: valueCCI, + atr: valueATR, + sma50: valueSMA50, + sma200: valueSMA200, + ema50: valueEMA50, + ema200: valueEMA200, + change1W: valueChange1W, + change1M: valueChange1M, + change3M: valueChange3M, + change6M: valueChange6M, + change1Y: valueChange1Y, + change3Y: valueChange3Y, + avgVolume: valueAvgVolume, + var: valueVaR, + trendAnalysis: valueTrendAnalysis, + fundamentalAnalysis: valueFundamentalAnalysis, + currentRatio: valueCurrentRatio, + quickRatio: valueQuickRatio, + debtEquityRatio: valueDebtEquityRatio, + debtRatio: valueDebtRatio, + returnOnAssets: valueReturnOnAssets, + returnOnEquity: valueReturnOnEquity, + }; + + ruleToUpdate.value = valueMap[ruleToUpdate.name] ?? ruleToUpdate.value; ruleToUpdate.condition = ruleCondition[ruleToUpdate.name]; - ruleOfList = [...ruleOfList]; // This is common for all cases, so it's moved out of the switch. + ruleOfList = [...ruleOfList]; } filteredData = filterStockScreenerData(); - if(ruleOfList?.some(item => item.name === 'ratingRecommendation')) { - filteredData = filteredData?.filter(item => item?.ratingRecommendation === valueAnalyst) + if (ruleOfList?.some(item => item?.name === 'ratingRecommendation')) { + filteredData = filteredData?.filter(item => item?.ratingRecommendation === valueAnalyst); } - } } @@ -2149,31 +1999,7 @@ $: charNumber = $screenWidth < 640 ? 20 : 40; - - {#if ruleName === 'esgScore'} - -
- ESG Score {ruleCondition[ruleName]} {valueESGScore} - - - - -
- - -
- - -
- - {/if} - + {#if ruleName === 'rsi'} @@ -2505,46 +2331,45 @@ $: charNumber = $screenWidth < 640 ? 20 : 40; - - - -
-
-
- {ruleOfList.length} Rules Preview -
-
+ +