add size / oi ratio
This commit is contained in:
parent
b90952df92
commit
1ae1b4b674
@ -43,7 +43,7 @@
|
|||||||
const allRules = {
|
const allRules = {
|
||||||
size: {
|
size: {
|
||||||
label: "Size",
|
label: "Size",
|
||||||
step: ["100K", "50K", "20K", "10K", "5K", "2K", "1K", "100", "0"],
|
step: ["50K", "20K", "10K", "5K", "2K", "1K", "100", "0"],
|
||||||
defaultCondition: "over",
|
defaultCondition: "over",
|
||||||
defaultValue: "any",
|
defaultValue: "any",
|
||||||
},
|
},
|
||||||
@ -65,6 +65,12 @@
|
|||||||
defaultCondition: "over",
|
defaultCondition: "over",
|
||||||
defaultValue: "any",
|
defaultValue: "any",
|
||||||
},
|
},
|
||||||
|
sizeOIRatio: {
|
||||||
|
label: "Size / Open Interest",
|
||||||
|
step: ["100%", "80%", "60%", "50%", "30%", "15%", "10%", "5%"],
|
||||||
|
defaultCondition: "over",
|
||||||
|
defaultValue: "any",
|
||||||
|
},
|
||||||
cost_basis: {
|
cost_basis: {
|
||||||
label: "Premium",
|
label: "Premium",
|
||||||
step: [
|
step: [
|
||||||
|
|||||||
@ -81,18 +81,63 @@ function createRuleCheck(rule, ruleName, ruleValue) {
|
|||||||
|
|
||||||
const ratio = (volume / openInterest) * 100;
|
const ratio = (volume / openInterest) * 100;
|
||||||
|
|
||||||
|
// Handle 'between' condition for volume to open interest ratio
|
||||||
|
if (rule.condition === 'between' && Array.isArray(ruleValue)) {
|
||||||
|
const [minRatio, maxRatio] = ruleValue.map(convertUnitToValue); // Convert ruleValue to numeric values
|
||||||
|
|
||||||
|
if (minRatio === null && maxRatio === null) return true;
|
||||||
|
if (minRatio === null) return ratio <= maxRatio;
|
||||||
|
if (maxRatio === null) return ratio >= minRatio;
|
||||||
|
|
||||||
|
return ratio >= minRatio && ratio <= maxRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Existing conditions for 'over' and 'under'
|
||||||
if (rule.condition === 'over' && ratio <= ruleValue) return false;
|
if (rule.condition === 'over' && ratio <= ruleValue) return false;
|
||||||
if (rule.condition === 'under' && ratio >= ruleValue) return false;
|
if (rule.condition === 'under' && ratio >= ruleValue) return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (ruleName === 'sizeoiratio') {
|
||||||
|
return (item) => {
|
||||||
|
const size = parseFloat(item?.size);
|
||||||
|
const openInterest = parseFloat(item?.open_interest);
|
||||||
|
if (isNaN(size) || isNaN(openInterest) || openInterest === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ratio = (size / openInterest) * 100;
|
||||||
|
|
||||||
|
// Handle 'between' condition for size to open interest ratio
|
||||||
|
if (rule.condition === 'between' && Array.isArray(ruleValue)) {
|
||||||
|
const [minRatio, maxRatio] = ruleValue?.map(convertUnitToValue); // Convert ruleValue to numeric values
|
||||||
|
|
||||||
|
if (minRatio === null && maxRatio === null) return true;
|
||||||
|
if (minRatio === null) return ratio <= maxRatio;
|
||||||
|
if (maxRatio === null) return ratio >= minRatio;
|
||||||
|
|
||||||
|
return ratio >= minRatio && ratio <= maxRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Existing conditions for 'over' and 'under'
|
||||||
|
if (rule.condition === 'over' && ratio <= ruleValue) return false;
|
||||||
|
if (rule.condition === 'under' && ratio >= ruleValue) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ruleName === 'date_expiration') {
|
if (ruleName === 'date_expiration') {
|
||||||
// If ruleValue is empty, undefined, "any", or an array containing only "any", return a function that always returns true
|
// If ruleValue is empty, undefined, "any", or an array containing only "any", return a function that always returns true
|
||||||
if (ruleValue === "" || ruleValue === undefined || isAny(ruleValue)) {
|
if (ruleValue === "" || ruleValue === undefined || isAny(ruleValue)) {
|
||||||
return () => true;
|
return () => true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return (item) => {
|
return (item) => {
|
||||||
const expirationDate = new Date(item[rule.name]);
|
const expirationDate = new Date(item[rule.name]);
|
||||||
if (isNaN(expirationDate)) return false; // Handle invalid dates
|
if (isNaN(expirationDate)) return false; // Handle invalid dates
|
||||||
@ -242,7 +287,8 @@ onmessage = async (event: MessageEvent) => {
|
|||||||
const { rawData, ruleOfList, filterQuery } = event.data || {};
|
const { rawData, ruleOfList, filterQuery } = event.data || {};
|
||||||
// Filter the data
|
// Filter the data
|
||||||
let filteredData = await filterRawData(rawData, ruleOfList, filterQuery);
|
let filteredData = await filterRawData(rawData, ruleOfList, filterQuery);
|
||||||
// Remove duplicates based on id
|
|
||||||
|
console.log(ruleOfList)
|
||||||
filteredData = Array.from(
|
filteredData = Array.from(
|
||||||
new Map(filteredData?.map((item) => [item?.id, item]))?.values()
|
new Map(filteredData?.map((item) => [item?.id, item]))?.values()
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user