Skip to content

Commit

Permalink
feat: add additional intervals
Browse files Browse the repository at this point in the history
  • Loading branch information
bglownia committed Mar 5, 2024
1 parent 0f8ee10 commit 21e62f6
Show file tree
Hide file tree
Showing 10 changed files with 185 additions and 11 deletions.
5 changes: 5 additions & 0 deletions src/stories/api/vega-graphql/lib/globalTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,16 @@
*/
export enum Interval {
I15M = "I15M",
I30M = "I30M",
I1D = "I1D",
I7D = "I7D",
I1H = "I1H",
I1M = "I1M",
I5M = "I5M",
I12H = "I12H",
I8H = "I8H",
I6H = "I6H",
I4H = "I4H",
}

/**
Expand Down
25 changes: 25 additions & 0 deletions src/stories/components/chart-controls/chart-controls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,48 @@ export const ChartControls = ({
text={intervalLabels[Interval.I15M]}
onClick={() => onSetInterval(Interval.I15M)}
/>
<MenuItem
icon={interval === Interval.I30M ? "tick" : "blank"}
text={intervalLabels[Interval.I30M]}
onClick={() => onSetInterval(Interval.I30M)}
/>
<MenuDivider title="Hours" />
<MenuItem
icon={interval === Interval.I1H ? "tick" : "blank"}
text={intervalLabels[Interval.I1H]}
onClick={() => onSetInterval(Interval.I1H)}
/>
<MenuItem
icon={interval === Interval.I4H ? "tick" : "blank"}
text={intervalLabels[Interval.I4H]}
onClick={() => onSetInterval(Interval.I4H)}
/>
<MenuItem
icon={interval === Interval.I6H ? "tick" : "blank"}
text={intervalLabels[Interval.I6H]}
onClick={() => onSetInterval(Interval.I6H)}
/>
<MenuItem
icon={interval === Interval.I8H ? "tick" : "blank"}
text={intervalLabels[Interval.I8H]}
onClick={() => onSetInterval(Interval.I8H)}
/>
<MenuItem
icon={interval === Interval.I12H ? "tick" : "blank"}
text={intervalLabels[Interval.I12H]}
onClick={() => onSetInterval(Interval.I12H)}
/>
<MenuDivider title="Days" />
<MenuItem
icon={interval === Interval.I1D ? "tick" : "blank"}
text={intervalLabels[Interval.I1D]}
onClick={() => onSetInterval(Interval.I1D)}
/>
<MenuItem
icon={interval === Interval.I7D ? "tick" : "blank"}
text={intervalLabels[Interval.I7D]}
onClick={() => onSetInterval(Interval.I7D)}
/>
</Menu>
}
placement="bottom-start"
Expand Down
2 changes: 2 additions & 0 deletions src/stories/data-source/__generated__/types.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 52 additions & 0 deletions src/stories/data-source/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,58 @@
],
"__typename": "Market"
},
"I8H": {
"id": "5A86B190C384997F",
"decimalPlaces": 5,
"candles": [
{
"datetime": "2021-02-23T00:00:00Z",
"high": "62531964",
"low": "55133110",
"open": "58930885",
"close": "55819369",
"volume": "2764352",
"__typename": "Candle"
},
{
"datetime": "2021-02-23T08:00:00Z",
"high": "61520697",
"low": "55081302",
"open": "55808878",
"close": "56448321",
"volume": "2673589",
"__typename": "Candle"
},
{
"datetime": "2021-02-23T16:00:00Z",
"high": "59760727",
"low": "56371917",
"open": "56471617",
"close": "59760727",
"volume": "2691278",
"__typename": "Candle"
},
{
"datetime": "2021-02-24T00:00:00Z",
"high": "59853149",
"low": "59573469",
"open": "59759391",
"close": "59574276",
"volume": "2834972",
"__typename": "Candle"
},
{
"datetime": "2021-02-24T08:00:00Z",
"high": "59719977",
"low": "59442433",
"open": "59574276",
"close": "59719977",
"volume": "1762142",
"__typename": "Candle"
}
],
"__typename": "Market"
},
"I6H": {
"id": "5A86B190C384997F",
"decimalPlaces": 5,
Expand Down
7 changes: 5 additions & 2 deletions src/stories/data-source/vega-protocol-data-source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,16 @@ export enum Interval {
/** 5 minute interval */
INTERVAL_I5M = "INTERVAL_I5M",
/** 4 hour interval */
INTERVAL_I4H = "INTERVAL_I6H",
INTERVAL_I4H = "INTERVAL_I4H",
/** 6 hour interval */
INTERVAL_I6H = "INTERVAL_I6H",
/** 8 hour interval */
INTERVAL_I8H = "INTERVAL_I8H",
/** 12 hour interval */
INTERVAL_I12H = "INTERVAL_I12H",
/** 15 minute interval (default) */
INTERVAL_I15M = "INTERVAL_I15M",
/** 15 minute interval (default) */
/** 30 minute interval */
INTERVAL_I30M = "INTERVAL_I30M",
}

Expand All @@ -54,6 +56,7 @@ const INTERVAL_TO_PENNANT_MAP = {
[PennantInterval.I1H]: Interval.INTERVAL_I1H,
[PennantInterval.I4H]: Interval.INTERVAL_I4H,
[PennantInterval.I6H]: Interval.INTERVAL_I6H,
[PennantInterval.I8H]: Interval.INTERVAL_I8H,
[PennantInterval.I12H]: Interval.INTERVAL_I12H,
[PennantInterval.I1D]: Interval.INTERVAL_I1D,
[PennantInterval.I7D]: Interval.INTERVAL_I7D,
Expand Down
52 changes: 52 additions & 0 deletions src/stories/data-source/zero-volume-candles-data.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,58 @@
],
"__typename": "Market"
},
"I8H": {
"id": "5A86B190C384997F",
"decimalPlaces": 5,
"candles": [
{
"datetime": "2021-02-23T00:00:00Z",
"high": "62531964",
"low": "55133110",
"open": "58930885",
"close": "55819369",
"volume": "2764352",
"__typename": "Candle"
},
{
"datetime": "2021-02-23T08:00:00Z",
"high": "61520697",
"low": "55081302",
"open": "55808878",
"close": "56448321",
"volume": "2673589",
"__typename": "Candle"
},
{
"datetime": "2021-02-23T16:00:00Z",
"high": "59760727",
"low": "56371917",
"open": "56471617",
"close": "59760727",
"volume": "2691278",
"__typename": "Candle"
},
{
"datetime": "2021-02-24T00:00:00Z",
"high": "59853149",
"low": "59573469",
"open": "59759391",
"close": "59574276",
"volume": "2834972",
"__typename": "Candle"
},
{
"datetime": "2021-02-24T08:00:00Z",
"high": "59719977",
"low": "59442433",
"open": "59574276",
"close": "59719977",
"volume": "1762142",
"__typename": "Candle"
}
],
"__typename": "Market"
},
"I6H": {
"id": "5A86B190C384997F",
"decimalPlaces": 5,
Expand Down
5 changes: 4 additions & 1 deletion src/stories/helpers/helpers-interval.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ export enum VegaInterval {
INTERVAL_I4H = "INTERVAL_I6H",
/** 6 hour interval */
INTERVAL_I6H = "INTERVAL_I6H",
/** 8 hour interval */
INTERVAL_I8H = "INTERVAL_I8H",
/** 12 hour interval */
INTERVAL_I12H = "INTERVAL_I12H",
/** 15 minute interval (default) */
INTERVAL_I15M = "INTERVAL_I15M",
/** 15 minute interval (default) */
/** 30 minute interval */
INTERVAL_I30M = "INTERVAL_I30M",
}

Expand All @@ -33,6 +35,7 @@ export const intervalMap: {
[Interval.I1H]: VegaInterval.INTERVAL_I1H,
[Interval.I4H]: VegaInterval.INTERVAL_I4H,
[Interval.I6H]: VegaInterval.INTERVAL_I6H,
[Interval.I8H]: VegaInterval.INTERVAL_I8H,
[Interval.I12H]: VegaInterval.INTERVAL_I12H,
[Interval.I1D]: VegaInterval.INTERVAL_I1D,
[Interval.I7D]: VegaInterval.INTERVAL_I7D,
Expand Down
19 changes: 17 additions & 2 deletions src/util/misc/format.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,22 @@ export function dateFormat(date: Date, interval: Interval) {
return formatMinute(date);
case Interval.I15M:
return formatMinute(date);
case Interval.I30M:
return formatMinute(date);
case Interval.I1H:
return formatHour(date);
case Interval.I4H:
return formatHour(date);
case Interval.I6H:
return formatHour(date);
case Interval.I8H:
return formatHour(date);
case Interval.I12H:
return formatHour(date);
case Interval.I1D:
return formatDay(date);
case Interval.I7D:
return formatDay(date);
}
}

Expand All @@ -61,7 +71,8 @@ export function tickFormat(ticks: Date[], interval: Interval) {
switch (interval) {
case Interval.I1M:
case Interval.I5M:
case Interval.I15M: {
case Interval.I15M:
case Interval.I30M: {
const arr = [];

for (let i = 0; i < ticks.length; i++) {
Expand All @@ -78,7 +89,10 @@ export function tickFormat(ticks: Date[], interval: Interval) {
return arr;
}
case Interval.I1H:
case Interval.I6H: {
case Interval.I4H:
case Interval.I6H:
case Interval.I8H:
case Interval.I12H: {
const arr = [];

for (let i = 0; i < ticks.length; i++) {
Expand All @@ -94,6 +108,7 @@ export function tickFormat(ticks: Date[], interval: Interval) {

return arr;
}
case Interval.I7D:
case Interval.I1D: {
const arr = [];

Expand Down
15 changes: 15 additions & 0 deletions src/util/misc/interval.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,13 @@ export function getTimeFormat(interval: Interval) {
case Interval.I1M:
case Interval.I5M:
case Interval.I15M:
case Interval.I30M:
return () => "HH:mm";
case Interval.I1H:
case Interval.I4H:
case Interval.I6H:
case Interval.I8H:
case Interval.I12H:
return (d: Date) => {
const timeStr = format(d, "HH:mm");
if (timeStr === "00:00") {
Expand All @@ -39,6 +43,7 @@ export function getTimeFormat(interval: Interval) {
}
};
case Interval.I1D:
case Interval.I7D:
return () => "MMM d";
default:
throw new Error("Invalid interval");
Expand All @@ -54,12 +59,22 @@ export function getCandlesCount(interval: Interval, extents: [Date, Date]) {
return Math.floor(diff / 5);
case Interval.I15M:
return Math.floor(diff / 15);
case Interval.I30M:
return Math.floor(diff / 30);
case Interval.I1H:
return Math.floor(diff / 60);
case Interval.I4H:
return Math.floor(diff / (60 * 4));
case Interval.I6H:
return Math.floor(diff / (60 * 6));
case Interval.I8H:
return Math.floor(diff / (60 * 8));
case Interval.I12H:
return Math.floor(diff / (60 * 12));
case Interval.I1D:
return Math.floor(diff / (60 * 24));
case Interval.I7D:
return Math.floor(diff / (60 * 24 * 7));
default:
throw new Error("Invalid interval");
}
Expand Down
14 changes: 8 additions & 6 deletions src/util/types/interval.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export const Interval = {
I1H: "I1H",
I4H: "I4H",
I6H: "I6H",
I8H: "I8H",
I12H: "I12H",
I1D: "I1D",
I7D: "I7D",
Expand All @@ -18,10 +19,11 @@ export const intervalLabels: Record<Interval, string> = {
I5M: "5m",
I15M: "15m",
I30M: "30m",
I1H: "1H",
I4H: "4H",
I6H: "6H",
I12H: "12H",
I1D: "1D",
I7D: "7D",
I1H: "1h",
I4H: "4h",
I6H: "6h",
I8H: "8h",
I12H: "12h",
I1D: "D",
I7D: "W",
} as const;

0 comments on commit 21e62f6

Please sign in to comment.