You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.1 KiB
TypeScript

import { open } from 'npm:lmdb';
import { CsvParseStream } from 'https://deno.land/std@0.184.0/csv/mod.ts';
const db = open({
path: 'options.lmdb',
compression: false,
encoding: 'msgpack',
sharedStructuresKey: Symbol.for('structures')
});
interface Row {
contract: string,
underlying: string,
expiration: string,
type: string,
strike: string,
style: string,
bid: string,
bid_size: string,
ask: string,
ask_size: string,
volume: string,
open_interest: string,
quote_date: string,
delta: string,
gamma: string,
theta: string,
vega: string,
implied_volatility: string,
};
async function getCsvRowStream(){
const fileStream = (await Deno.open('/home/brian/Downloads/options-data/2013-01-02options.cvs', {read: true})).readable;
const csvParseStream = new CsvParseStream({skipFirstRow: true});
const rowStream = fileStream
.pipeThrough(new TextDecoderStream())
.pipeThrough(csvParseStream)
;
return rowStream;
}
async function ingestCsvToLmdb(){
const rowStream = await getCsvRowStream();
const rowReader = rowStream.getReader();
while(true){
const row = (await rowReader.read()).value as unknown as Row;
if(typeof row !== 'undefined'){
db.put([row.underlying, row.quote_date, row.expiration, row.strike, row.type], row);
}
else{
break;
}
}
}
async function countRowsInCsv(){
const rowStream = await getCsvRowStream();
const rowReader = rowStream.getReader();
let i = 0;
while(true){
const row = await rowReader.read();
if(typeof row !== 'undefined' && typeof row.value !== 'undefined'){
i++;
}
else{
break;
}
}
return i;
}
function countRowsInLmdb(){
return db.getKeysCount();
}
function getUnderlyingsSet(){
const underlyings = new Set();
db.getKeys({start:['A']}).forEach(([underlying])=>{
underlyings.add(underlying);
});
return underlyings
}
//console.log('rows-in-csv:', await countRowsInCsv());
//console.log('rows-in-lmdb:', countRowsInLmdb());
//await ingestCsvToLmdb();
for(let key in getUnderlyingsSet().values()){
console.log(key);
}
Array.from(getUnderlyingsSet().values()).forEach((x)=>{ console.log(x) })