From f87021b57e3965877dfb20eb43d1cd97350c0f14 Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Fri, 6 Mar 2026 16:14:45 -0800 Subject: [PATCH] update cache timings for dividends/splits --- README.md | 8 ++++---- src/cache/store.zig | 17 +++++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index a569040..ae5e0af 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ zfin aggregates data from multiple free-tier APIs. Each provider is used for the |-----------------------|---------------|------------------------|----------------------------|--------------| | Daily candles (OHLCV) | TwelveData | `TWELVEDATA_API_KEY` | 8 req/min, 800/day | 24 hours | | Real-time quotes | TwelveData | `TWELVEDATA_API_KEY` | 8 req/min, 800/day | Never cached | -| Dividends | Polygon | `POLYGON_API_KEY` | 5 req/min | 7 days | -| Splits | Polygon | `POLYGON_API_KEY` | 5 req/min | 7 days | +| Dividends | Polygon | `POLYGON_API_KEY` | 5 req/min | 14 days | +| Splits | Polygon | `POLYGON_API_KEY` | 5 req/min | 14 days | | Options chains | CBOE | None required | ~30 req/min (self-imposed) | 1 hour | | Earnings | Finnhub | `FINNHUB_API_KEY` | 60 req/min | 30 days* | | ETF profiles | Alpha Vantage | `ALPHAVANTAGE_API_KEY` | 25 req/day | 30 days | @@ -124,8 +124,8 @@ Cache files use [SRF](https://github.com/lobo/srf) (Simple Record Format), a lin | Data type | TTL | Rationale | |---------------|--------------|--------------------------------------------------| | Daily candles | 24 hours | Only changes once per trading day | -| Dividends | 7 days | Declared well in advance | -| Splits | 7 days | Rare corporate events | +| Dividends | 14 days | Declared well in advance | +| Splits | 14 days | Rare corporate events | | Options | 1 hour | Prices change continuously during market hours | | Earnings | 30 days* | Quarterly events; smart refresh after announcements | | ETF profiles | 30 days | Holdings/weights change slowly | diff --git a/src/cache/store.zig b/src/cache/store.zig index 77b26c4..a3879d5 100644 --- a/src/cache/store.zig +++ b/src/cache/store.zig @@ -18,20 +18,21 @@ const ContractType = @import("../models/option.zig").ContractType; /// TTL durations in seconds for cache expiry. pub const Ttl = struct { + const s_per_day = std.time.s_per_day; /// Historical candles older than 1 day never expire pub const candles_historical: i64 = -1; // infinite /// Latest day's candle refreshes every 24h - pub const candles_latest: i64 = 24 * 3600; - /// Dividend data refreshes weekly - pub const dividends: i64 = 7 * 24 * 3600; - /// Split data refreshes weekly - pub const splits: i64 = 7 * 24 * 3600; + pub const candles_latest: i64 = s_per_day; + /// Dividend data refreshes biweekly + pub const dividends: i64 = 14 * s_per_day; + /// Split data refreshes biweekly + pub const splits: i64 = 14 * s_per_day; /// Options chains refresh hourly - pub const options: i64 = 3600; + pub const options: i64 = std.time.s_per_hour; /// Earnings refresh monthly, with smart refresh after announcements - pub const earnings: i64 = 30 * 24 * 3600; + pub const earnings: i64 = 30 * s_per_day; /// ETF profiles refresh monthly - pub const etf_profile: i64 = 30 * 24 * 3600; + pub const etf_profile: i64 = 30 * s_per_day; }; pub const DataType = enum {