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;
-
-
-
-
|