| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -80,7 +80,7 @@ export async function setPullOptionContractsState(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export async function getPullOptionContractAggregatesState(ticker: string) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export async function getPullAggregatesState(ticker: string) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  const state = await sqliteDb.get(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    `
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    SELECT
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -102,7 +102,7 @@ const enum OptionContractAggregatesSyncStatus {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				type OptionContractAggregatesSyncState = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  status: OptionContractAggregatesSyncStatus;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				};
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export async function setPullOptionContractAggregatesState(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export async function setPullAggregatesState(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  ticker: string,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  state: OptionContractAggregatesSyncState
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				) {
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -154,10 +154,10 @@ export async function pullOptionContractAggregates(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  const ticker = Polygon.optionContractToTicker(optionContract);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  // check if sync was completed:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  if (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    (await getPullOptionContractAggregatesState(ticker))?.status !==
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    (await getPullAggregatesState(ticker))?.status !==
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    OptionContractAggregatesSyncStatus.COMPLETED
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  ) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await setPullOptionContractAggregatesState(ticker, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await setPullAggregatesState(ticker, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      status: OptionContractAggregatesSyncStatus.STARTED,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    const { firstDate } = await getOptionContractDateRange(optionContract);
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -186,12 +186,72 @@ export async function pullOptionContractAggregates(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await setPullOptionContractAggregatesState(ticker, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await setPullAggregatesState(ticker, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      status: OptionContractAggregatesSyncStatus.COMPLETED,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export async function pullStockAggregates(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  symbol: string,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  firstDate: string,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  lastDate: string
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  // check if sync was completed:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  if (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    (await getPullAggregatesState(symbol))?.status !==
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    OptionContractAggregatesSyncStatus.COMPLETED
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  ) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await setPullAggregatesState(symbol, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      status: OptionContractAggregatesSyncStatus.STARTED,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    for await (const batch of Polygon.makeGetStockAggregatesIterator({
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      symbol,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      firstDate,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      lastDate,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    })) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      if (batch.length > 0) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        console.log(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          symbol,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          new Date(batch[0].tsStart * 1000),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          new Date(batch[batch.length - 1].tsStart * 1000)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        await clickhouse.insert({
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          table: "stock_aggregates",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          values: batch,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				          format: "JSONEachRow",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // await pRetry(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //   async () => {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //     console.log(`inserting ${batch.length} rows`);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //     await clickhouse.insert({
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //       table: "stock_aggregates",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //       values: batch,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //       format: "JSONEachRow",
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //     });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //     console.log("inserted");
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //   },
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        //   { forever: true, factor: 2, maxTimeout: 120000 }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await setPullAggregatesState(symbol, {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      status: OptionContractAggregatesSyncStatus.COMPLETED,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    });
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export async function pullAllStockAggregates(firstDate, lastDate) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  const symbols = (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await query(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				      `SELECT DISTINCT(symbol) as symbol FROM option_contract_existences WHERE asOfDate >= '${firstDate}' AND asOfDate <= '${lastDate}'`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  ).map(({ symbol }) => symbol);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  for (const symbol of symbols) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    await pullStockAggregates(symbol, firstDate, lastDate);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				export async function* makeGetOptionContractsIterator(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  symbol: string,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				  asOfDate: string
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |