update screener

This commit is contained in:
MuslemRahimi 2024-09-01 10:59:23 +02:00
parent 3e1889a412
commit eddf7f15e0
2 changed files with 38 additions and 621 deletions

View File

@ -1,4 +1,4 @@
<script>
<script lang='ts'>
import { createEventDispatcher } from 'svelte';
export let ruleName;
@ -7,6 +7,7 @@
export let min;
export let max;
export let step;
export let unit = '';
export let condition;
const dispatch = createEventDispatcher();
@ -21,7 +22,7 @@
</script>
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
{title} {condition} {value}
{title?.replace('[%]','')} {condition} {value} {unit}
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2"

View File

@ -138,45 +138,45 @@ const getStockScreenerData = async (rules) => {
{ rule: 'sma200', label: 'SMA-200', max: "500", min:"0", step:"10", category: 'ta' },
{ rule: 'ema50', label: 'EMA-50', max: "500", min:"0", step:"10", category: 'ta' },
{ rule: 'ema200', label: 'EMA-200', max: "500", min:"0", step:"10",category: 'ta' },
{ rule: 'change1W', label: 'Price Change 1W [%]',category: 'ta' },
{ rule: 'change1M', label: 'Price Change 1M [%]',category: 'ta' },
{ rule: 'change3M', label: 'Price Change 3M [%]',category: 'ta' },
{ rule: 'change6M', label: 'Price Change 6M [%]',category: 'ta' },
{ rule: 'change1Y', label: 'Price Change 1Y [%]',category: 'ta' },
{ rule: 'change3Y', label: 'Price Change 3Y [%]',category: 'ta' },
{ rule: 'marketCap', label: 'Market Capitalization', category: 'fund'},
{ rule: 'revenue', label: 'Revenue',category: 'fund' },
{ rule: 'growthRevenue', label: 'Revenue Growth [%]',category: 'fund' },
{ rule: 'costOfRevenue', label: 'Cost of Revenue',category: 'fund' },
{ rule: 'growthCostOfRevenue', label: 'Cost of Revenue Growth [%]',category: 'fund' },
{ rule: 'costAndExpenses', label: 'Cost & Expenses',category: 'fund' },
{ rule: 'growthCostAndExpenses', label: 'Cost & Expenses Growth [%]',category: 'fund' },
{ rule: 'netIncome', label: 'Net Income', category: 'fund'},
{ rule: 'growthNetIncome', label: 'Net Income Growth [%]', category: 'fund'},
{ rule: 'grossProfit', label: 'Gross Profit', category: 'fund'},
{ rule: 'growthGrossProfit', label: 'Gross Profit Growth [%]', category: 'fund'},
{ rule: 'change1W', label: 'Price Change 1W [%]', max: "200", min:"-100", step:"2", unit: '%',category: 'ta' },
{ rule: 'change1M', label: 'Price Change 1M [%]', max: "200", min:"-100", step:"2", unit: '%',category: 'ta' },
{ rule: 'change3M', label: 'Price Change 3M [%]', max: "200", min:"-100", step:"2", unit: '%',category: 'ta' },
{ rule: 'change6M', label: 'Price Change 6M [%]', max: "200", min:"-100", step:"2", unit: '%',category: 'ta' },
{ rule: 'change1Y', label: 'Price Change 1Y [%]', max: "200", min:"-100", step:"2", unit: '%',category: 'ta' },
{ rule: 'change3Y', label: 'Price Change 3Y [%]', max: "200", min:"-100", step:"2", unit: '%',category: 'ta' },
{ rule: 'marketCap', label: 'Market Capitalization', max: "800", min:"10", step:"10", unit: 'Bn', category: 'fund'},
{ rule: 'revenue', label: 'Revenue', max: "800", min:"-100", step:"10", unit: 'Bn', category: 'fund' },
{ rule: 'growthRevenue', label: 'Revenue Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund' },
{ rule: 'costOfRevenue', label: 'Cost of Revenue', max: "800", min:"-100", step:"10", unit: 'Bn', category: 'fund' },
{ rule: 'growthCostOfRevenue', label: 'Cost of Revenue Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund' },
{ rule: 'costAndExpenses', label: 'Cost & Expenses', max: "800", min:"-100", step:"10", unit: 'Bn', category: 'fund' },
{ rule: 'growthCostAndExpenses', label: 'Cost & Expenses Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund' },
{ rule: 'netIncome', label: 'Net Income', max: "800", min:"-100", step:"10", unit: 'Bn', category: 'fund'},
{ rule: 'growthNetIncome', label: 'Net Income Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund'},
{ rule: 'grossProfit', label: 'Gross Profit', max: "800", min:"-100", step:"10", unit: 'Bn', category: 'fund'},
{ rule: 'growthGrossProfit', label: 'Gross Profit Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund'},
{ rule: 'researchAndDevelopmentExpenses', label: 'Research & Development (R&D) Expenses', category: 'fund'},
{ rule: 'growthResearchAndDevelopmentExpenses', label: 'R&D Expenses Growth [%]', category: 'fund'},
{ rule: 'growthResearchAndDevelopmentExpenses', label: 'R&D Expenses Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund'},
{ rule: 'payoutRatio', label: 'Payout Ratio [%]',category: 'fund' },
{ rule: 'dividendYield', label: 'Dividend Yield [%]',category: 'fund' },
{ rule: 'annualDividend', label: 'Annual Dividend',category: 'fund' },
{ rule: 'dividendGrowth', label: 'Dividend Growth [%]',category: 'fund' },
{ rule: 'eps', label: 'Earnings Per Share (EPS)',category: 'fund' },
{ rule: 'growthEPS', label: 'EPS Growth [%]',category: 'fund' },
{ rule: 'eps', label: 'EPS', max: "10", min:"-10", step:"0.1", category: 'fund' },
{ rule: 'growthEPS', label: 'EPS Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund' },
{ rule: 'interestIncome', label: 'Interest Income',category: 'fund' },
{ rule: 'interestExpense', label: 'Interest Expenses',category: 'fund' },
{ rule: 'growthInterestExpense', label: 'Interest Expenses Growth [%]',category: 'fund' },
{ rule: 'interestExpense', label: 'Interest Expenses', category: 'fund' },
{ rule: 'growthInterestExpense', label: 'Interest Expenses Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund' },
{ rule: 'operatingExpenses', label: 'Operating Expenses',category: 'fund' },
{ rule: 'growthOperatingExpenses', label: 'Operating Expenses Growth [%]',category: 'fund' },
{ rule: 'growthOperatingExpenses', label: 'Operating Expenses Growth [%]', max: "200", min:"-100", step:"2", unit: '%', category: 'fund' },
{ rule: 'operatingIncome', label: 'Operating Income',category: 'fund' },
{ rule: 'growthOperatingIncome', label: 'Operating Income Growth [%]',category: 'fund' },
{ rule: 'growthOperatingIncome', label: 'Operating Income Growth [%]', max: "200", min:"-100", step:"2", unit: '%',category: 'fund' },
{ rule: 'pe', label: 'Price per Earnings (PE)', category: 'fund'},
{ rule: 'forwardPE', label: 'Forward PE', category: 'fund'},
{ rule: 'priceToBookRatio', label: 'Price to Book Ratio (PB)', category: 'fund'},
{ rule: 'priceToSalesRatio', label: 'Price to Sales Ratio (PS)', category: 'fund'},
{ 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: 'growthEBITDA', label: 'EBITDA Growth [%]', max: "200", min:"-100", step:"2", unit: '%', 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' },
@ -187,7 +187,7 @@ const getStockScreenerData = async (rules) => {
{ rule: 'debtRatio', label: 'Debt Ratio',category: 'fund' },
{ rule: 'returnOnAssets', label: 'Return on Assets',category: 'fund' },
{ rule: 'returnOnEquity', label: 'Return on Equity',category: 'fund' },
{ rule: 'enterpriseValue', label: 'Enterprise Value',category: 'fund' },
{ rule: 'enterpriseValue', label: 'Enterprise Value', max: "800", min:"10", step:"10", unit: 'Bn', category: 'fund' },
{ rule: 'freeCashFlowPerShare', label: 'FCF / Share', max: "20", min:"-20", step:"0.5",category: 'fund' },
{ rule: 'cashPerShare', label: 'Cash / Share', max: "50", min:"-50", step:"1", category: 'fund' },
{ rule: 'priceToFreeCashFlowsRatio', label: 'Price / FCF', max: "100", min:"-100", step:"2", category: 'fund' },
@ -901,9 +901,6 @@ function handleChangeValue(event) {
case 'interestIncome':
valueInterestIncome = value;
break;
case 'esgScore':
valueESGScore = value;
break;
case 'ratingRecommendation':
valueAnalyst //ruleTrend[ruleName] = value;
break;
@ -1049,6 +1046,8 @@ function handleChangeValue(event) {
break;
case 'priceToFreeCashFlowsRatio':
valuePriceFCF = value;
case 'enterpriseValue':
valueEnterpriseValue = value;
}
} else {
console.warn(`Unhandled rule: ${rule}`);
@ -1188,252 +1187,7 @@ function handleChangeValue(event) {
{/if}
<!--End AI Trend Analysis Rule-->
{#if ruleName === 'revenue'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Revenue {ruleCondition[ruleName]} ${valueRevenue} Bn
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" name="radio-revenue-below" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" name="radio-revenue-above" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="800" step="10" bind:value={valueRevenue} class="range range-secondary" />
</div>
{/if}
<!--Start Growth Of Revenue Rule-->
{#if ruleName === 'growthRevenue'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Revenue Growth {ruleCondition[ruleName]} {valueGrowthRevenue} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthRevenue} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of Revenue Rule-->
<!--Start Cost Of Revenue Rule-->
{#if ruleName === 'costOfRevenue'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Cost of Revenue {ruleCondition[ruleName]} ${valueCostOfRevenue} Bn
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="800" step="10" bind:value={valueCostOfRevenue} class="range range-secondary" />
</div>
{/if}
<!--End Cost Of Revenue Rule-->
<!--Start Growth Of Cost Of Revenue Rule-->
{#if ruleName === 'growthCostOfRevenue'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Cost of Revenue Growth {ruleCondition[ruleName]} {valueGrowthCostOfRevenue} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthCostOfRevenue} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of Cost Of Revenue Rule-->
<!--Start CostAndExpenses Rule-->
{#if ruleName === 'costAndExpenses'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Cost & Expenses {ruleCondition[ruleName]} ${valueCostAndExpenses} Bn
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="800" step="10" bind:value={valueCostAndExpenses} class="range range-secondary" />
</div>
{/if}
<!--End CostAndExpenses Rule-->
<!--Start Growth Of Cost and Expenses Rule-->
{#if ruleName === 'growthCostAndExpenses'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Cost & Expenses Growth {ruleCondition[ruleName]} {valueGrowthCostAndExpenses} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthCostAndExpenses} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of Cost and Expenses Rule-->
<!--Start Net Income Rule-->
{#if ruleName === 'netIncome'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Net Income {ruleCondition[ruleName]} ${valueNetIncome} Bn
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueNetIncome} class="range range-secondary" />
</div>
{/if}
<!--End Net Income Rule-->
<!--Start Growth Net Income Rule-->
{#if ruleName === 'growthNetIncome'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Net Income Growth {ruleCondition[ruleName]} {valueGrowthNetIncome} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthNetIncome} class="range range-secondary" />
</div>
{/if}
<!--End Growth Net Income Rule-->
<!--Start Gross Profit Rule-->
{#if ruleName === 'grossProfit'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Gross Profit {ruleCondition[ruleName]} ${valueGrossProfit} Bn
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="800" step="10" bind:value={valueGrossProfit} class="range range-secondary" />
</div>
{/if}
<!--End Gross Profit Rule-->
<!--Start Growth Of Gross Profit Rule-->
{#if ruleName === 'growthGrossProfit'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Gross Profit Growth {ruleCondition[ruleName]} {valueGrowthGrossProfit} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthGrossProfit} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of Gross Profit Rule-->
<!--Start Research & Development Expenses Rule-->
@ -1462,30 +1216,7 @@ function handleChangeValue(event) {
{/if}
<!--End Research & Development Expenses Rule-->
<!--Start Growth Of R&D Expenses-->
{#if ruleName === 'growthResearchAndDevelopmentExpenses'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
R&D Growth {ruleCondition[ruleName]} {valueGrowthResearchAndDevelopmentExpenses} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthResearchAndDevelopmentExpenses} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of R&D Expenses-->
@ -1562,30 +1293,6 @@ function handleChangeValue(event) {
<!--End Avg. Volume Rule-->
<!--Start Growth Of Interest Expenses-->
{#if ruleName === 'growthInterestExpense'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Interest Expenses Growth {ruleCondition[ruleName]} {valueGrowthInterestExpenses} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="200" step="10" bind:value={valueGrowthInterestExpenses} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of Interest Expenses-->
@ -1612,31 +1319,7 @@ function handleChangeValue(event) {
<!--End Operating Expenses Rule-->
<!--Start Growth Of Operating Expenses-->
{#if ruleName === 'growthOperatingExpenses'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Operating Expenses Growth {ruleCondition[ruleName]} {valueGrowthOperatingExpenses} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthOperatingExpenses} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of Operating Expenses-->
@ -1663,33 +1346,7 @@ function handleChangeValue(event) {
<!--End Operating Income Rule-->
<!--Start Growth Of Operating Income-->
{#if ruleName === 'growthOperatingIncome'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Operating Income Growth {ruleCondition[ruleName]} {valueGrowthOperatingIncome} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthOperatingIncome} class="range range-secondary" />
</div>
{/if}
<!--End Growth Of Operating Income-->
<!--Start Analyst Rule-->
{#if ruleName === 'ratingRecommendation'}
@ -1714,54 +1371,7 @@ function handleChangeValue(event) {
{/if}
<!--End Analyst Rule-->
{#if ruleName === 'enterpriseValue'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Enterprise Val {ruleCondition[ruleName]} ${valueEnterpriseValue} Bn
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="10" max="800" step="10" bind:value={valueEnterpriseValue} class="range range-secondary" />
</div>
{/if}
{#if ruleName === 'marketCap'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Market Cap {ruleCondition[ruleName]} ${valueMarketCap} Bn
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="10" max="800" step="10" bind:value={valueMarketCap} class="range range-secondary" />
</div>
{/if}
{#if ruleName === 'currentRatio'}
@ -2015,58 +1625,6 @@ function handleChangeValue(event) {
{/if}
<!--End Rule-->
<!--Start EPS Rule-->
{#if ruleName === 'eps'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
EPS {ruleCondition[ruleName]} ${valueEPS}
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="1" max="10" step="1" bind:value={valueEPS} class="range range-secondary" />
</div>
{/if}
<!--End EPS Rule-->
<!--Start Growth of EPS Rule-->
{#if ruleName === 'growthEPS'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
EPS Growth {ruleCondition[ruleName]} {valueGrowthEPS} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="200" step="10" bind:value={valueGrowthEPS} class="range range-secondary" />
</div>
{/if}
<!--End Growth of EPS Rule-->
<!--Start PE Rule-->
{#if ruleName === 'pe'}
@ -2235,34 +1793,7 @@ function handleChangeValue(event) {
{/if}
<!--End EBITDA Rule-->
<!--Start Growth of EBITDA Rule-->
{#if ruleName === 'growthEBITDA'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
EBITDA Growth {ruleCondition[ruleName]} {valueGrowthEBITDA} %
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="0" max="100" step="5" bind:value={valueGrowthEBITDA} class="range range-secondary" />
</div>
{/if}
<!--End Growth of EBITDA Rule-->
<!--Start RSI Rule-->
@ -2383,6 +1914,7 @@ function handleChangeValue(event) {
min={row.min}
max={row.max}
step={row.step}
unit={row?.unit}
bind:value={valueMappings[row.rule]}
bind:condition={conditions[row.rule]}
on:changeCondition={handleChangeCondition}
@ -2394,123 +1926,7 @@ function handleChangeValue(event) {
<!--Start Change 1W Rule-->
{#if ruleName === 'change1W'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Change 1W {ruleCondition[ruleName]} {valueChange1W}%
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-20" max="20" step="1" bind:value={valueChange1W} class="range range-secondary" />
</div>
{/if}
<!--End Change 1W Rule-->
<!--Start Change 1M Rule-->
{#if ruleName === 'change1M'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Change 1M {ruleCondition[ruleName]} {valueChange1M}%
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-50" max="50" step="5" bind:value={valueChange1M} class="range range-secondary" />
</div>
{/if}
<!--End Change 1M Rule-->
<!--Start Change 3M Rule-->
{#if ruleName === 'change3M'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Change 3M {ruleCondition[ruleName]} {valueChange3M}%
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="100" step="5" bind:value={valueChange3M} class="range range-secondary" />
</div>
{/if}
<!--End Change 3M Rule-->
<!--Start Change 6M Rule-->
{#if ruleName === 'change6M'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Change 6M {ruleCondition[ruleName]} {valueChange6M}%
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-100" max="100" step="5" bind:value={valueChange6M} class="range range-secondary" />
</div>
{/if}
<!--End Change 6M Rule-->
<!--Start Change 1Y Rule-->
{#if ruleName === 'change1Y'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Change 1Y {ruleCondition[ruleName]} {valueChange1Y}%
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-300" max="300" step="10" bind:value={valueChange1Y} class="range range-secondary" />
</div>
{/if}
<!--End Change 1Y Rule-->
<!--Start Change 3Y Rule-->
{#if ruleName === 'change3Y'}
<div class="w-full max-w-xl text-white font-medium text-sm sm:text-[1rem] flex flex-row justify-center items-center">
Change 3Y {ruleCondition[ruleName]} {valueChange3Y}%
<label on:click={() => changeRuleCondition('below')} class="ml-5 cursor-pointer flex flex-row mr-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'below'} />
<span class="label-text text-white">Below</span>
</label>
<label on:click={() => changeRuleCondition('above')} class="cursor-pointer flex flex-row ml-2 justify-center items-center">
<input type="radio" class="radio checked:bg-purple-600 bg-[#09090B] border border-slate-800 mr-2" checked={ruleCondition[ruleName] === 'above'} />
<span class="label-text text-white">Above</span>
</label>
</div>
<div class="w-full pt-5">
<input type="range" min="-500" max="500" step="10" bind:value={valueChange3Y} class="range range-secondary" />
</div>
{/if}
<!--End Change 3Y Rule-->
</div>