diff --git a/src/lib/components/Options/ContractLookup.svelte b/src/lib/components/Options/ContractLookup.svelte
index 48f5560d..70cdcae6 100644
--- a/src/lib/components/Options/ContractLookup.svelte
+++ b/src/lib/components/Options/ContractLookup.svelte
@@ -249,7 +249,7 @@
type: "datetime",
endOnTick: false,
crosshair: {
- color: "#fff",
+ color: $mode === "light" ? "black" : "white",
width: 1,
dashStyle: "Solid",
},
diff --git a/src/lib/components/Options/HottestContracts.svelte b/src/lib/components/Options/HottestContracts.svelte
index 6222cb2a..18deb2ea 100644
--- a/src/lib/components/Options/HottestContracts.svelte
+++ b/src/lib/components/Options/HottestContracts.svelte
@@ -425,7 +425,7 @@
type: "datetime",
endOnTick: false,
crosshair: {
- color: "#fff",
+ color: $mode === "light" ? "black" : "white",
width: 1,
dashStyle: "Solid",
},
diff --git a/src/lib/components/Options/UnusualActivity.svelte b/src/lib/components/Options/UnusualActivity.svelte
index ff400682..4dfe3aed 100644
--- a/src/lib/components/Options/UnusualActivity.svelte
+++ b/src/lib/components/Options/UnusualActivity.svelte
@@ -347,8 +347,44 @@
// Build series based on the selected graph type, using filteredData
let series = [];
+ const fillColorStart = "rgb(70, 129, 244,0.5)";
+ const fillColorEnd = "rgb(70, 129, 244,0.001)";
if (selectGraphType == "Vol/OI") {
series = [
+ {
+ name: "Stock Price",
+ type: "area",
+ yAxis: 1,
+ data: filteredData.map((item) => [
+ new Date(item.date).getTime(),
+ item.price,
+ ]),
+ fillColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, fillColorStart],
+ [1, fillColorEnd],
+ ],
+ },
+ color: "#4681f4",
+ borderColor: "4681f4",
+ lineWidth: 1.3,
+ marker: { enabled: false },
+ animation: false,
+ },
+ {
+ name: "Avg Fill",
+ type: "spline", // smooth line
+ data: filteredData.map((item) => [
+ new Date(item.date).getTime(),
+ item.mark,
+ ]),
+ color: "#F21C64",
+ yAxis: 2,
+ lineWidth: 1.3,
+ animation: false,
+ marker: { enabled: false },
+ },
{
name: "Volume",
type: "column",
@@ -375,72 +411,55 @@
yAxis: 0,
animation: false,
},
- {
- name: "Avg Fill",
- type: "spline", // smooth line
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- item.mark,
- ]),
- color: "#FAD776",
- yAxis: 2,
- animation: false,
- marker: { enabled: false },
- },
- {
- name: "Price",
- type: "spline",
- yAxis: 1,
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- item.price,
- ]),
- color: $mode === "light" ? "#3B82F6" : "white",
- lineWidth: 1,
- marker: { enabled: false },
- animation: false,
- },
];
} else {
series = [
{
- name: "IV",
- type: "spline",
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- Math.floor(item.implied_volatility * 100),
- ]),
- color: "#B24BF3",
- yAxis: 0,
- animation: false,
- marker: { enabled: false },
- },
- {
- name: "Avg Fill",
- type: "spline",
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- item.mark,
- ]),
- color: "#FAD776",
- yAxis: 2,
- lineWidth: 1,
- animation: false,
- marker: { enabled: false },
- },
- {
- name: "Price",
- type: "spline",
+ name: "Stock Price",
+ type: "area",
yAxis: 1,
data: filteredData.map((item) => [
new Date(item.date).getTime(),
item.price,
]),
- color: $mode === "light" ? "black" : "white",
- lineWidth: 1,
+ fillColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, fillColorStart],
+ [1, fillColorEnd],
+ ],
+ },
+ color: "#4681f4",
+ borderColor: "4681f4",
+ lineWidth: 1.3,
marker: { enabled: false },
animation: false,
},
+ {
+ name: "Avg Fill",
+ type: "spline", // smooth line
+ data: filteredData?.map((item) => [
+ new Date(item.date).getTime(),
+ item.mark,
+ ]),
+ color: "#F21C64",
+ yAxis: 2,
+ lineWidth: 1.3,
+ animation: false,
+ marker: { enabled: false },
+ },
+ {
+ name: "IV",
+ type: "spline",
+ data: filteredData?.map((item) => [
+ new Date(item.date).getTime(),
+ Math.floor(item.implied_volatility * 100),
+ ]),
+ color: $mode === "light" ? "black" : "white",
+ yAxis: 0,
+ animation: false,
+ marker: { enabled: false },
+ },
];
}
@@ -478,7 +497,7 @@
dashStyle: "Solid",
},
labels: {
- style: { color: "#fff" },
+ style: { color: $mode === "light" ? "#545454" : "white" },
distance: 20,
formatter: function () {
return new Date(this.value).toLocaleDateString("en-US", {
@@ -503,7 +522,9 @@
{
gridLineWidth: 1,
gridLineColor: $mode === "light" ? "#e5e7eb" : "#111827",
- labels: { style: { color: $mode === "light" ? "black" : "white" } },
+ labels: {
+ style: { color: $mode === "light" ? "#545454" : "white" },
+ },
title: { text: null },
opposite: true,
},
@@ -548,7 +569,6 @@
// Loop through each point in the shared tooltip
this.points.forEach((point) => {
tooltipContent += `
-
${point.series.name}:
${abbreviateNumber(point.y)}
`;
});
@@ -556,7 +576,19 @@
return tooltipContent;
},
},
- legend: { enabled: false },
+
+ legend: {
+ enabled: true,
+ align: "center", // Positions legend at the left edge
+ verticalAlign: "top", // Positions legend at the top
+ layout: "horizontal", // Align items horizontally (use 'vertical' if preferred)
+ itemStyle: {
+ color: $mode === "light" ? "black" : "white",
+ },
+ symbolWidth: 16, // Controls the width of the legend symbol
+ symbolRadius: 8, // Creates circular symbols (adjust radius as needed)
+ squareSymbol: false, // Ensures symbols are circular, not square
+ },
series: series,
};
diff --git a/src/routes/watchlist/options/+page.svelte b/src/routes/watchlist/options/+page.svelte
index 4bc61484..e8f6d95f 100644
--- a/src/routes/watchlist/options/+page.svelte
+++ b/src/routes/watchlist/options/+page.svelte
@@ -113,11 +113,9 @@
style: `border-radius: 5px; background: #fff; color: #000; border-color: ${$mode === "light" ? "#F9FAFB" : "#4B5563"}; font-size: 15px;`,
});
} else {
- optionsWatchlist = optionsWatchlist?.filter(
- (item) => !deleteOptionsId?.includes(item?.id),
- );
+ rawData = rawData?.filter((item) => !deleteOptionsId?.includes(item?.id));
- optionsWatchlist = [...optionsWatchlist];
+ rawData = [...rawData];
const postData = {
itemIdList: deleteOptionsId,
@@ -168,8 +166,6 @@
contract: optionSymbol,
};
- console.log(postData);
-
// make the POST request to the endpoint
const response = await fetch("/api/options-contract-history", {
method: "POST",
@@ -221,18 +217,17 @@
optionDetailsDesktopModal?.showModal();
strikePrice = item?.strike_price;
- optionType = item?.option_type;
+ optionType = item?.put_call;
ticker = item?.ticker;
dateExpiration = item?.date_expiration;
optionSymbol = item?.option_symbol;
const output = await getContractHistory();
const historicalPrice = await getHistoricalPrice();
- console.log(historicalPrice);
rawDataHistory = output?.history;
if (rawDataHistory?.length > 0) {
- rawDataHistory.forEach((entry) => {
+ rawDataHistory?.forEach((entry) => {
const matchingData = historicalPrice?.find(
(d) => d?.time === entry?.date,
);
@@ -264,8 +259,44 @@
// Build series based on the selected graph type, using filteredData
let series = [];
+ const fillColorStart = "rgb(70, 129, 244,0.5)";
+ const fillColorEnd = "rgb(70, 129, 244,0.001)";
if (selectGraphType == "Vol/OI") {
series = [
+ {
+ name: "Stock Price",
+ type: "area",
+ yAxis: 1,
+ data: filteredData.map((item) => [
+ new Date(item.date).getTime(),
+ item.price,
+ ]),
+ fillColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, fillColorStart],
+ [1, fillColorEnd],
+ ],
+ },
+ color: "#4681f4",
+ borderColor: "4681f4",
+ lineWidth: 1.3,
+ marker: { enabled: false },
+ animation: false,
+ },
+ {
+ name: "Avg Fill",
+ type: "spline", // smooth line
+ data: filteredData.map((item) => [
+ new Date(item.date).getTime(),
+ item.mark,
+ ]),
+ color: "#F21C64",
+ yAxis: 2,
+ lineWidth: 1.3,
+ animation: false,
+ marker: { enabled: false },
+ },
{
name: "Volume",
type: "column",
@@ -292,72 +323,55 @@
yAxis: 0,
animation: false,
},
- {
- name: "Avg Fill",
- type: "spline", // smooth line
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- item.mark,
- ]),
- color: "#FAD776",
- yAxis: 2,
- animation: false,
- marker: { enabled: false },
- },
- {
- name: "Price",
- type: "spline",
- yAxis: 1,
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- item.price,
- ]),
- color: $mode === "light" ? "#3B82F6" : "white",
- lineWidth: 1,
- marker: { enabled: false },
- animation: false,
- },
];
} else {
series = [
{
- name: "IV",
- type: "spline",
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- Math.floor(item.implied_volatility * 100),
- ]),
- color: "#B24BF3",
- yAxis: 0,
- animation: false,
- marker: { enabled: false },
- },
- {
- name: "Avg Fill",
- type: "spline",
- data: filteredData.map((item) => [
- new Date(item.date).getTime(),
- item.mark,
- ]),
- color: "#FAD776",
- yAxis: 2,
- lineWidth: 1,
- animation: false,
- marker: { enabled: false },
- },
- {
- name: "Price",
- type: "spline",
+ name: "Stock Price",
+ type: "area",
yAxis: 1,
data: filteredData.map((item) => [
new Date(item.date).getTime(),
item.price,
]),
- color: $mode === "light" ? "black" : "white",
- lineWidth: 1,
+ fillColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, fillColorStart],
+ [1, fillColorEnd],
+ ],
+ },
+ color: "#4681f4",
+ borderColor: "4681f4",
+ lineWidth: 1.3,
marker: { enabled: false },
animation: false,
},
+ {
+ name: "Avg Fill",
+ type: "spline", // smooth line
+ data: filteredData?.map((item) => [
+ new Date(item.date).getTime(),
+ item.mark,
+ ]),
+ color: "#F21C64",
+ yAxis: 2,
+ lineWidth: 1.3,
+ animation: false,
+ marker: { enabled: false },
+ },
+ {
+ name: "IV",
+ type: "spline",
+ data: filteredData?.map((item) => [
+ new Date(item.date).getTime(),
+ Math.floor(item.implied_volatility * 100),
+ ]),
+ color: $mode === "light" ? "black" : "white",
+ yAxis: 0,
+ animation: false,
+ marker: { enabled: false },
+ },
];
}
@@ -395,7 +409,7 @@
dashStyle: "Solid",
},
labels: {
- style: { color: "#fff" },
+ style: { color: $mode === "light" ? "#545454" : "white" },
distance: 20,
formatter: function () {
return new Date(this.value).toLocaleDateString("en-US", {
@@ -420,7 +434,9 @@
{
gridLineWidth: 1,
gridLineColor: $mode === "light" ? "#e5e7eb" : "#111827",
- labels: { style: { color: $mode === "light" ? "black" : "white" } },
+ labels: {
+ style: { color: $mode === "light" ? "#545454" : "white" },
+ },
title: { text: null },
opposite: true,
},
@@ -465,7 +481,6 @@
// Loop through each point in the shared tooltip
this.points.forEach((point) => {
tooltipContent += `
-
${point.series.name}:
${abbreviateNumber(point.y)}
`;
});
@@ -473,7 +488,19 @@
return tooltipContent;
},
},
- legend: { enabled: false },
+
+ legend: {
+ enabled: true,
+ align: "center", // Positions legend at the left edge
+ verticalAlign: "top", // Positions legend at the top
+ layout: "horizontal", // Align items horizontally (use 'vertical' if preferred)
+ itemStyle: {
+ color: $mode === "light" ? "black" : "white",
+ },
+ symbolWidth: 16, // Controls the width of the legend symbol
+ symbolRadius: 8, // Creates circular symbols (adjust radius as needed)
+ squareSymbol: false, // Ensures symbols are circular, not square
+ },
series: series,
};
@@ -1065,13 +1092,13 @@