Add AAPL and NVDA as default symbols for the Alpaca adapter and in .env.example (.env will of course override defaults)

This commit is contained in:
dirtydishes 2025-12-29 15:16:56 -05:00
parent 3eb7dc9211
commit 57450138c4
5 changed files with 48 additions and 16 deletions

View file

@ -205,11 +205,38 @@ const run = async () => {
await ensureFlowPacketsTable(clickhouse);
});
const subscription = await subscribeJson(
js,
SUBJECT_OPTION_PRINTS,
buildDurableConsumer("compute-option-prints")
);
const durableName = "compute-option-prints";
const subscription = await (async () => {
try {
return await subscribeJson(js, SUBJECT_OPTION_PRINTS, buildDurableConsumer(durableName));
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
const shouldReset =
message.includes("duplicate subscription") ||
message.includes("durable requires") ||
message.includes("subject does not match consumer");
if (!shouldReset) {
throw error;
}
logger.warn("resetting jetstream consumer", { durable: durableName, error: message });
try {
await jsm.consumers.delete(STREAM_OPTION_PRINTS, durableName);
} catch (deleteError) {
const deleteMessage = deleteError instanceof Error ? deleteError.message : String(deleteError);
if (!deleteMessage.includes("not found")) {
logger.warn("failed to delete jetstream consumer", {
durable: durableName,
error: deleteMessage
});
}
}
return await subscribeJson(js, SUBJECT_OPTION_PRINTS, buildDurableConsumer(durableName));
}
})();
const shutdown = async (signal: string) => {
logger.info("service stopping", { signal });

View file

@ -24,7 +24,7 @@ const envSchema = z.object({
NATS_URL: z.string().default("nats://localhost:4222"),
CLICKHOUSE_URL: z.string().default("http://localhost:8123"),
CLICKHOUSE_DATABASE: z.string().default("default"),
INGEST_ADAPTER: z.string().min(1).default("synthetic"),
EQUITIES_INGEST_ADAPTER: z.string().min(1).default("synthetic"),
EMIT_INTERVAL_MS: z.coerce.number().int().positive().default(1000)
});
@ -102,7 +102,7 @@ const run = async () => {
await ensureEquityPrintsTable(clickhouse);
});
const adapter = selectAdapter(env.INGEST_ADAPTER);
const adapter = selectAdapter(env.EQUITIES_INGEST_ADAPTER);
logger.info("ingest adapter selected", { adapter: adapter.name });
const stopAdapter: StopHandler = await adapter.start({

View file

@ -27,13 +27,13 @@ const envSchema = z.object({
NATS_URL: z.string().default("nats://localhost:4222"),
CLICKHOUSE_URL: z.string().default("http://localhost:8123"),
CLICKHOUSE_DATABASE: z.string().default("default"),
INGEST_ADAPTER: z.string().min(1).default("alpaca"),
OPTIONS_INGEST_ADAPTER: z.string().min(1).default("alpaca"),
ALPACA_KEY_ID: z.string().default(""),
ALPACA_SECRET_KEY: z.string().default(""),
ALPACA_REST_URL: z.string().default("https://data.alpaca.markets"),
ALPACA_WS_BASE_URL: z.string().default("wss://stream.data.alpaca.markets/v1beta1"),
ALPACA_FEED: z.enum(["indicative", "opra"]).default("indicative"),
ALPACA_UNDERLYINGS: z.string().default("SPY"),
ALPACA_UNDERLYINGS: z.string().default("SPY,NVDA,AAPL"),
ALPACA_STRIKES_PER_SIDE: z.coerce.number().int().positive().default(8),
ALPACA_MAX_DTE_DAYS: z.coerce.number().int().positive().default(30),
ALPACA_MONEYNESS_PCT: z.coerce.number().positive().default(0.06),
@ -203,7 +203,7 @@ const run = async () => {
await ensureOptionPrintsTable(clickhouse);
});
const adapter = selectAdapter(env.INGEST_ADAPTER);
const adapter = selectAdapter(env.OPTIONS_INGEST_ADAPTER);
logger.info("ingest adapter selected", { adapter: adapter.name });
const stopAdapter: StopHandler = await adapter.start({