|
|
@ -49,6 +49,7 @@ const appRouter = router({
|
|
|
|
DISTINCT(asOfDate) as asOfDate
|
|
|
|
DISTINCT(asOfDate) as asOfDate
|
|
|
|
FROM option_contracts
|
|
|
|
FROM option_contracts
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
|
|
|
|
ORDER BY asOfDate
|
|
|
|
`)
|
|
|
|
`)
|
|
|
|
).map(({ asOfDate }) => asOfDate);
|
|
|
|
).map(({ asOfDate }) => asOfDate);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
@ -66,10 +67,11 @@ const appRouter = router({
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
await query<{ expirationDate: string }>(`
|
|
|
|
await query<{ expirationDate: string }>(`
|
|
|
|
SELECT
|
|
|
|
SELECT
|
|
|
|
DISTINCT(expirationDate)
|
|
|
|
DISTINCT(expirationDate) as expirationDate
|
|
|
|
FROM option_contracts
|
|
|
|
FROM option_contracts
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
AND asOfDate = '${asOfDate}'
|
|
|
|
AND asOfDate = '${asOfDate}'
|
|
|
|
|
|
|
|
ORDER BY expirationDate
|
|
|
|
`)
|
|
|
|
`)
|
|
|
|
).map(({ expirationDate }) => expirationDate);
|
|
|
|
).map(({ expirationDate }) => expirationDate);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
@ -88,11 +90,12 @@ const appRouter = router({
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
await query<{ strike: string }>(`
|
|
|
|
await query<{ strike: string }>(`
|
|
|
|
SELECT
|
|
|
|
SELECT
|
|
|
|
DISTINCT(strike)
|
|
|
|
DISTINCT(strike) as strike
|
|
|
|
FROM option_contracts
|
|
|
|
FROM option_contracts
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
AND asOfDate = '${asOfDate}'
|
|
|
|
AND asOfDate = '${asOfDate}'
|
|
|
|
AND expirationDate = '${expirationDate}'
|
|
|
|
AND expirationDate = '${expirationDate}'
|
|
|
|
|
|
|
|
ORDER BY strike
|
|
|
|
`)
|
|
|
|
`)
|
|
|
|
).map(({ strike }) => strike);
|
|
|
|
).map(({ strike }) => strike);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
@ -106,25 +109,16 @@ const appRouter = router({
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.query(async (opts) => {
|
|
|
|
.query(async (opts) => {
|
|
|
|
const { underlying } = opts.input;
|
|
|
|
const { underlying } = opts.input;
|
|
|
|
return (
|
|
|
|
return await query<{ x: number; y: number }>(
|
|
|
|
await query<[number, number]>(
|
|
|
|
`
|
|
|
|
`
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
SELECT
|
|
|
|
toUnixTimestamp(tsStart),
|
|
|
|
toUnixTimestamp(tsStart) as x,
|
|
|
|
open
|
|
|
|
open as y
|
|
|
|
FROM stock_aggregates
|
|
|
|
FROM stock_aggregates
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
ORDER BY tsStart ASC
|
|
|
|
ORDER BY tsStart ASC
|
|
|
|
`,
|
|
|
|
`,
|
|
|
|
"JSONCompactEachRow"
|
|
|
|
"JSONEachRow"
|
|
|
|
)
|
|
|
|
|
|
|
|
).reduce(
|
|
|
|
|
|
|
|
(columns, row) => {
|
|
|
|
|
|
|
|
columns[0].push(row[0]);
|
|
|
|
|
|
|
|
columns[1].push(row[1]);
|
|
|
|
|
|
|
|
return columns;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
[[], []]
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
getOpensForOptionContract: publicProcedure
|
|
|
|
getOpensForOptionContract: publicProcedure
|
|
|
@ -139,12 +133,11 @@ const appRouter = router({
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.query(async (opts) => {
|
|
|
|
.query(async (opts) => {
|
|
|
|
const { underlying, expirationDate, strike } = opts.input;
|
|
|
|
const { underlying, expirationDate, strike } = opts.input;
|
|
|
|
return (
|
|
|
|
return await query<{ x: number; y: number }>(
|
|
|
|
await query<[number, number]>(
|
|
|
|
`
|
|
|
|
`
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
SELECT
|
|
|
|
toUnixTimestamp(tsStart),
|
|
|
|
toUnixTimestamp(tsStart) as x,
|
|
|
|
open
|
|
|
|
open as y
|
|
|
|
FROM option_aggregates
|
|
|
|
FROM option_aggregates
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
WHERE symbol = '${underlying}'
|
|
|
|
AND expirationDate = '${expirationDate}'
|
|
|
|
AND expirationDate = '${expirationDate}'
|
|
|
@ -152,15 +145,7 @@ const appRouter = router({
|
|
|
|
AND type = 'call'
|
|
|
|
AND type = 'call'
|
|
|
|
ORDER BY tsStart ASC
|
|
|
|
ORDER BY tsStart ASC
|
|
|
|
`,
|
|
|
|
`,
|
|
|
|
"JSONCompactEachRow"
|
|
|
|
"JSONEachRow"
|
|
|
|
)
|
|
|
|
|
|
|
|
).reduce(
|
|
|
|
|
|
|
|
(columns, row) => {
|
|
|
|
|
|
|
|
columns[0].push(row[0]);
|
|
|
|
|
|
|
|
columns[1].push(row[1]);
|
|
|
|
|
|
|
|
return columns;
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
[[], []]
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
getHistoricalCalendarPrices: publicProcedure
|
|
|
|
getHistoricalCalendarPrices: publicProcedure
|
|
|
|