diff --git a/src/routes/market-flow/+page.svelte b/src/routes/market-flow/+page.svelte
index 237f697c..34f99297 100644
--- a/src/routes/market-flow/+page.svelte
+++ b/src/routes/market-flow/+page.svelte
@@ -210,21 +210,50 @@
.sort(compareValues)
?.slice(0, 50);
};
-
function getPlotOptions() {
isLoading = true;
- let dates = marketTideData?.map((item) => item?.time);
- const priceList = marketTideData?.map((item) =>
- item?.close !== null ? item?.close : item?.close,
- );
- const netCallPremList = marketTideData?.map(
- (item) => item?.net_call_premium,
- );
- const netPutPremList = marketTideData?.map((item) => item?.net_put_premium);
- const volumeList = marketTideData?.map((item) => item?.net_volume);
- const positiveVolume = volumeList?.map((v) => (v >= 0 ? v : "-"));
- const negativeVolume = volumeList?.map((v) => (v < 0 ? v : "-"));
+ // Determine the base date (using the first data point, or fallback to today)
+ const baseDate =
+ marketTideData && marketTideData.length
+ ? new Date(marketTideData[0].time)
+ : new Date();
+
+ // Set the fixed start and end times (9:30 and 16:10)
+ const startTime = new Date(
+ baseDate.getFullYear(),
+ baseDate.getMonth(),
+ baseDate.getDate(),
+ 9,
+ 30,
+ ).getTime();
+ const endTime = new Date(
+ baseDate.getFullYear(),
+ baseDate.getMonth(),
+ baseDate.getDate(),
+ 16,
+ 10,
+ ).getTime();
+
+ // Create series arrays with x (timestamp) and y values.
+ // This removes the need for xAxis.categories.
+ const priceSeries =
+ marketTideData?.map((item) => ({
+ x: new Date(item.time).getTime(),
+ y: item.close,
+ })) || [];
+
+ const netCallPremSeries =
+ marketTideData?.map((item) => ({
+ x: new Date(item.time).getTime(),
+ y: item.net_call_premium,
+ })) || [];
+
+ const netPutPremSeries =
+ marketTideData?.map((item) => ({
+ x: new Date(item.time).getTime(),
+ y: item.net_put_premium,
+ })) || [];
const options = {
chart: {
@@ -260,19 +289,18 @@
formatter: function () {
// Format the x value to display time in hh:mm format
let tooltipContent = `${new Date(
- this?.x,
+ this.x,
).toLocaleTimeString("en-US", {
hour: "2-digit",
minute: "2-digit",
- // Uncomment the next line for 12-hour format with AM/PM
- // hour12: true,
- // For 24-hour format, either leave it or set hour12: false
})}
`;
// Loop through each point in the shared tooltip
this.points.forEach((point) => {
tooltipContent += `${point.series.name}:
- ${abbreviateNumberWithColor(point.y)}
`;
+ ${abbreviateNumberWithColor(
+ point.y,
+ )}
`;
});
return tooltipContent;
@@ -281,27 +309,22 @@
xAxis: {
type: "datetime",
+ min: startTime, // Force start at 9:30
+ max: endTime, // Force end at 16:10
crosshair: {
color: "#fff", // Set the color of the crosshair line
width: 1, // Adjust the line width as needed
- dashStyle: "Solid", // You can change the dash style if desired
+ dashStyle: "Solid",
},
- endOnTick: false,
- categories: dates,
labels: {
style: {
color: "#fff",
},
distance: 20, // Increases space between label and axis
formatter: function () {
- const date = new Date(this.value);
- return date.toLocaleTimeString("en-US", {
+ return new Date(this.value).toLocaleTimeString("en-US", {
hour: "2-digit",
minute: "2-digit",
- // Uncomment the line below for 12-hour format with AM/PM
- // hour12: true,
- // For 24-hour format, you can either leave hour12 as false (default) or set it explicitly:
- // hour12: false
});
},
},
@@ -310,7 +333,7 @@
const positions = [];
const info = this.getExtremes();
const tickCount = 5; // Reduce number of ticks displayed
- const interval = Math.floor((info.max - info.min) / tickCount);
+ const interval = (info.max - info.min) / tickCount;
for (let i = 0; i <= tickCount; i++) {
positions.push(info.min + i * interval);
@@ -345,7 +368,7 @@
{
name: "Price",
type: "spline",
- data: priceList,
+ data: priceSeries,
yAxis: 0,
color: "#fff",
marker: {
@@ -362,7 +385,7 @@
{
name: "Net Call Prem",
type: "spline",
- data: netCallPremList,
+ data: netCallPremSeries,
yAxis: 1,
color: "#90EE90",
marker: {
@@ -377,7 +400,7 @@
{
name: "Net Put Prem",
type: "spline",
- data: netPutPremList,
+ data: netPutPremSeries,
yAxis: 1,
color: "#FF6B6B",
marker: {
@@ -398,9 +421,11 @@
},
},
};
+
isLoading = false;
return options;
}
+
config = marketTideData ? getPlotOptions() : null;
diff --git a/src/routes/market-flow/sector-flow/+page.svelte b/src/routes/market-flow/sector-flow/+page.svelte
index a85de1bd..c35fca97 100644
--- a/src/routes/market-flow/sector-flow/+page.svelte
+++ b/src/routes/market-flow/sector-flow/+page.svelte
@@ -234,18 +234,48 @@
function getPlotOptions() {
isLoading = true;
- let dates = marketTideData?.map((item) => item?.time);
- const priceList = marketTideData?.map((item) =>
- item?.close !== null ? item?.close : item?.close,
- );
- const netCallPremList = marketTideData?.map(
- (item) => item?.net_call_premium,
- );
- const netPutPremList = marketTideData?.map((item) => item?.net_put_premium);
- const volumeList = marketTideData?.map((item) => item?.net_volume);
- const positiveVolume = volumeList?.map((v) => (v >= 0 ? v : "-"));
- const negativeVolume = volumeList?.map((v) => (v < 0 ? v : "-"));
+ // Determine the base date (using the first data point, or fallback to today)
+ const baseDate =
+ marketTideData && marketTideData.length
+ ? new Date(marketTideData[0].time)
+ : new Date();
+
+ // Set the fixed start and end times (9:30 and 16:10)
+ const startTime = new Date(
+ baseDate.getFullYear(),
+ baseDate.getMonth(),
+ baseDate.getDate(),
+ 9,
+ 30,
+ ).getTime();
+ const endTime = new Date(
+ baseDate.getFullYear(),
+ baseDate.getMonth(),
+ baseDate.getDate(),
+ 16,
+ 10,
+ ).getTime();
+
+ // Create series arrays with x (timestamp) and y values.
+ // This removes the need for xAxis.categories.
+ const priceSeries =
+ marketTideData?.map((item) => ({
+ x: new Date(item.time).getTime(),
+ y: item.close,
+ })) || [];
+
+ const netCallPremSeries =
+ marketTideData?.map((item) => ({
+ x: new Date(item.time).getTime(),
+ y: item.net_call_premium,
+ })) || [];
+
+ const netPutPremSeries =
+ marketTideData?.map((item) => ({
+ x: new Date(item.time).getTime(),
+ y: item.net_put_premium,
+ })) || [];
const options = {
chart: {
@@ -281,19 +311,18 @@
formatter: function () {
// Format the x value to display time in hh:mm format
let tooltipContent = `${new Date(
- this?.x,
+ this.x,
).toLocaleTimeString("en-US", {
hour: "2-digit",
minute: "2-digit",
- // Uncomment the next line for 12-hour format with AM/PM
- // hour12: true,
- // For 24-hour format, either leave it or set hour12: false
})}
`;
// Loop through each point in the shared tooltip
this.points.forEach((point) => {
tooltipContent += `${point.series.name}:
- ${abbreviateNumberWithColor(point.y)}
`;
+ ${abbreviateNumberWithColor(
+ point.y,
+ )}
`;
});
return tooltipContent;
@@ -302,27 +331,22 @@
xAxis: {
type: "datetime",
+ min: startTime, // Force start at 9:30
+ max: endTime, // Force end at 16:10
crosshair: {
color: "#fff", // Set the color of the crosshair line
width: 1, // Adjust the line width as needed
- dashStyle: "Solid", // You can change the dash style if desired
+ dashStyle: "Solid",
},
- endOnTick: false,
- categories: dates,
labels: {
style: {
color: "#fff",
},
distance: 20, // Increases space between label and axis
formatter: function () {
- const date = new Date(this.value);
- return date.toLocaleTimeString("en-US", {
+ return new Date(this.value).toLocaleTimeString("en-US", {
hour: "2-digit",
minute: "2-digit",
- // Uncomment the line below for 12-hour format with AM/PM
- // hour12: true,
- // For 24-hour format, you can either leave hour12 as false (default) or set it explicitly:
- // hour12: false
});
},
},
@@ -331,7 +355,7 @@
const positions = [];
const info = this.getExtremes();
const tickCount = 5; // Reduce number of ticks displayed
- const interval = Math.floor((info.max - info.min) / tickCount);
+ const interval = (info.max - info.min) / tickCount;
for (let i = 0; i <= tickCount; i++) {
positions.push(info.min + i * interval);
@@ -366,7 +390,7 @@
{
name: "Price",
type: "spline",
- data: priceList,
+ data: priceSeries,
yAxis: 0,
color: "#fff",
marker: {
@@ -383,7 +407,7 @@
{
name: "Net Call Prem",
type: "spline",
- data: netCallPremList,
+ data: netCallPremSeries,
yAxis: 1,
color: "#90EE90",
marker: {
@@ -398,7 +422,7 @@
{
name: "Net Put Prem",
type: "spline",
- data: netPutPremList,
+ data: netPutPremSeries,
yAxis: 1,
color: "#FF6B6B",
marker: {
@@ -419,6 +443,7 @@
},
},
};
+
isLoading = false;
return options;
}