add countries to screener
This commit is contained in:
parent
be85c96e7e
commit
ce743a9f99
@ -993,6 +993,45 @@ export const listOfCountries = [
|
|||||||
"Zimbabwe",
|
"Zimbabwe",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export const listOfRelevantCountries = [
|
||||||
|
"United States", // By far the most companies listed on the NYSE
|
||||||
|
"China",
|
||||||
|
"Canada",
|
||||||
|
"UK",
|
||||||
|
"Japan",
|
||||||
|
"Israel",
|
||||||
|
"Brazil",
|
||||||
|
"France",
|
||||||
|
"Ireland",
|
||||||
|
"Germany",
|
||||||
|
"Mexico",
|
||||||
|
"India",
|
||||||
|
"Australia",
|
||||||
|
"South Korea",
|
||||||
|
"Sweden",
|
||||||
|
"Netherlands",
|
||||||
|
"Switzerland",
|
||||||
|
"Taiwan",
|
||||||
|
"South Africa",
|
||||||
|
"Hong Kong",
|
||||||
|
"Singapore",
|
||||||
|
"Argentina",
|
||||||
|
"Chile",
|
||||||
|
"Philippines",
|
||||||
|
"Turkey",
|
||||||
|
"Italy",
|
||||||
|
"Indonesia",
|
||||||
|
"Malaysia",
|
||||||
|
"Luxembourg",
|
||||||
|
"Vietnam",
|
||||||
|
"New Zealand",
|
||||||
|
"Denmark",
|
||||||
|
"Norway",
|
||||||
|
"Finland",
|
||||||
|
"Russia",
|
||||||
|
"United Arab Emirates",
|
||||||
|
];
|
||||||
|
|
||||||
export const sectorList = [
|
export const sectorList = [
|
||||||
"Basic Materials",
|
"Basic Materials",
|
||||||
"Communication Services",
|
"Communication Services",
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
<script lang='ts'>
|
<script lang='ts'>
|
||||||
import { onMount, onDestroy } from 'svelte';
|
import { onMount, onDestroy } from 'svelte';
|
||||||
import { goto} from '$app/navigation';
|
import { goto} from '$app/navigation';
|
||||||
import { screenWidth, strategyId, numberOfUnreadNotification, getCache, setCache} from '$lib/store';
|
import { screenWidth, strategyId, numberOfUnreadNotification} from '$lib/store';
|
||||||
import toast from 'svelte-french-toast';
|
import toast from 'svelte-french-toast';
|
||||||
import { abbreviateNumber, sectorList } from '$lib/utils';
|
import { abbreviateNumber, sectorList, listOfRelevantCountries } from '$lib/utils';
|
||||||
import * as DropdownMenu from "$lib/components/shadcn/dropdown-menu/index.js";
|
import * as DropdownMenu from "$lib/components/shadcn/dropdown-menu/index.js";
|
||||||
import { Button } from "$lib/components/shadcn/button/index.js";
|
import { Button } from "$lib/components/shadcn/button/index.js";
|
||||||
//const userConfirmation = confirm('Unsaved changes detected. Leaving now will discard your strategy. Continue?');
|
//const userConfirmation = confirm('Unsaved changes detected. Leaving now will discard your strategy. Continue?');
|
||||||
|
|
||||||
import { writable } from 'svelte/store';
|
import { writable } from 'svelte/store';
|
||||||
|
|
||||||
let shouldLoadWorker = writable(false);
|
let shouldLoadWorker = writable(false);
|
||||||
@ -129,6 +130,7 @@ const allRules = {
|
|||||||
profitPerEmployee: { label: 'Profit Per Employee', step: ['5M','3M','2M','1M','500K','100K',0], category: 'fund', defaultCondition: 'over', defaultValue: '0' },
|
profitPerEmployee: { label: 'Profit Per Employee', step: ['5M','3M','2M','1M','500K','100K',0], category: 'fund', defaultCondition: 'over', defaultValue: '0' },
|
||||||
totalLiabilities: { label: 'Total Liabilities', step: ['500B','200B','100B','50B','10B','1B','100M','10M','1M'], category: 'fund', defaultCondition: 'over', defaultValue: '1M' },
|
totalLiabilities: { label: 'Total Liabilities', step: ['500B','200B','100B','50B','10B','1B','100M','10M','1M'], category: 'fund', defaultCondition: 'over', defaultValue: '1M' },
|
||||||
sector: { label: 'Sector', step: sectorList, category: 'fund', defaultCondition: '', defaultValue: 'any' },
|
sector: { label: 'Sector', step: sectorList, category: 'fund', defaultCondition: '', defaultValue: 'any' },
|
||||||
|
country: { label: 'Country', step: listOfRelevantCountries, category: 'fund', defaultCondition: '', defaultValue: 'any' },
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -242,6 +244,9 @@ function handleAddRule() {
|
|||||||
case 'sector':
|
case 'sector':
|
||||||
newRule = { name: ruleName, value: valueMappings[ruleName] }; //ruleTrend[ruleName]
|
newRule = { name: ruleName, value: valueMappings[ruleName] }; //ruleTrend[ruleName]
|
||||||
break;
|
break;
|
||||||
|
case 'country':
|
||||||
|
newRule = { name: ruleName, value: valueMappings[ruleName] }; //ruleTrend[ruleName]
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// Handle other cases if needed
|
// Handle other cases if needed
|
||||||
newRule ={
|
newRule ={
|
||||||
@ -781,7 +786,7 @@ async function popularStrategy(state: string) {
|
|||||||
</Button>
|
</Button>
|
||||||
</DropdownMenu.Trigger>
|
</DropdownMenu.Trigger>
|
||||||
<DropdownMenu.Content class="w-56 h-fit max-h-72 overflow-y-auto scroller">
|
<DropdownMenu.Content class="w-56 h-fit max-h-72 overflow-y-auto scroller">
|
||||||
{#if !['analystRating','sector']?.includes(row?.rule)}
|
{#if !['analystRating','sector','country']?.includes(row?.rule)}
|
||||||
<DropdownMenu.Label class="absolute mt-2 h-11 border-gray-800 border-b -top-1 z-20 fixed sticky bg-[#09090B]">
|
<DropdownMenu.Label class="absolute mt-2 h-11 border-gray-800 border-b -top-1 z-20 fixed sticky bg-[#09090B]">
|
||||||
<div class="flex items-center justify-start gap-x-1">
|
<div class="flex items-center justify-start gap-x-1">
|
||||||
<div class="relative inline-block flex flex-row items-center justify-center">
|
<div class="relative inline-block flex flex-row items-center justify-center">
|
||||||
@ -1043,6 +1048,8 @@ async function popularStrategy(state: string) {
|
|||||||
{item?.analystRating}
|
{item?.analystRating}
|
||||||
{:else if row?.rule === 'sector'}
|
{:else if row?.rule === 'sector'}
|
||||||
{item?.sector}
|
{item?.sector}
|
||||||
|
{:else if row?.rule === 'country'}
|
||||||
|
{item?.country}
|
||||||
{:else if ['fundamentalAnalysis','trendAnalysis']?.includes(row?.rule)}
|
{:else if ['fundamentalAnalysis','trendAnalysis']?.includes(row?.rule)}
|
||||||
{item[row?.rule]?.accuracy}%
|
{item[row?.rule]?.accuracy}%
|
||||||
{:else}
|
{:else}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { sectorList } from "$lib/utils";
|
import { sectorList, listOfRelevantCountries } from "$lib/utils";
|
||||||
|
|
||||||
function convertUnitToValue(input: string | number): number {
|
function convertUnitToValue(input: string | number): number {
|
||||||
if (typeof input === "number") {
|
if (typeof input === "number") {
|
||||||
@ -14,7 +14,13 @@ function convertUnitToValue(input: string | number): number {
|
|||||||
// Handle specific non-numeric cases
|
// Handle specific non-numeric cases
|
||||||
if (
|
if (
|
||||||
input.toLowerCase() === "any" ||
|
input.toLowerCase() === "any" ||
|
||||||
[...sectorList, "Hold", "Sell", "Buy"]?.includes(input)
|
[
|
||||||
|
...sectorList,
|
||||||
|
...listOfRelevantCountries,
|
||||||
|
"Hold",
|
||||||
|
"Sell",
|
||||||
|
"Buy",
|
||||||
|
]?.includes(input)
|
||||||
) {
|
) {
|
||||||
return "any"; // Return a special value for "any" that represents a non-restrictive filter
|
return "any"; // Return a special value for "any" that represents a non-restrictive filter
|
||||||
}
|
}
|
||||||
@ -80,6 +86,13 @@ async function filterStockScreenerData(stockScreenerData, ruleOfList) {
|
|||||||
if (sectorList?.includes(rule.value) && itemValue !== rule.value) {
|
if (sectorList?.includes(rule.value) && itemValue !== rule.value) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (rule.name === "country") {
|
||||||
|
if (
|
||||||
|
listOfRelevantCountries?.includes(rule.value) &&
|
||||||
|
itemValue !== rule.value
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (
|
if (
|
||||||
rule.condition === "over" &&
|
rule.condition === "over" &&
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user