update cache timings for dividends/splits

This commit is contained in:
Emil Lerch 2026-03-06 16:14:45 -08:00
parent 497b1d3c2d
commit f87021b57e
Signed by: lobo
GPG key ID: A7B62D657EF764F8
2 changed files with 13 additions and 12 deletions

View file

@ -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 | | 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 | | Real-time quotes | TwelveData | `TWELVEDATA_API_KEY` | 8 req/min, 800/day | Never cached |
| Dividends | 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 | 7 days | | Splits | Polygon | `POLYGON_API_KEY` | 5 req/min | 14 days |
| Options chains | CBOE | None required | ~30 req/min (self-imposed) | 1 hour | | Options chains | CBOE | None required | ~30 req/min (self-imposed) | 1 hour |
| Earnings | Finnhub | `FINNHUB_API_KEY` | 60 req/min | 30 days* | | Earnings | Finnhub | `FINNHUB_API_KEY` | 60 req/min | 30 days* |
| ETF profiles | Alpha Vantage | `ALPHAVANTAGE_API_KEY` | 25 req/day | 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 | | Data type | TTL | Rationale |
|---------------|--------------|--------------------------------------------------| |---------------|--------------|--------------------------------------------------|
| Daily candles | 24 hours | Only changes once per trading day | | Daily candles | 24 hours | Only changes once per trading day |
| Dividends | 7 days | Declared well in advance | | Dividends | 14 days | Declared well in advance |
| Splits | 7 days | Rare corporate events | | Splits | 14 days | Rare corporate events |
| Options | 1 hour | Prices change continuously during market hours | | Options | 1 hour | Prices change continuously during market hours |
| Earnings | 30 days* | Quarterly events; smart refresh after announcements | | Earnings | 30 days* | Quarterly events; smart refresh after announcements |
| ETF profiles | 30 days | Holdings/weights change slowly | | ETF profiles | 30 days | Holdings/weights change slowly |

17
src/cache/store.zig vendored
View file

@ -18,20 +18,21 @@ const ContractType = @import("../models/option.zig").ContractType;
/// TTL durations in seconds for cache expiry. /// TTL durations in seconds for cache expiry.
pub const Ttl = struct { pub const Ttl = struct {
const s_per_day = std.time.s_per_day;
/// Historical candles older than 1 day never expire /// Historical candles older than 1 day never expire
pub const candles_historical: i64 = -1; // infinite pub const candles_historical: i64 = -1; // infinite
/// Latest day's candle refreshes every 24h /// Latest day's candle refreshes every 24h
pub const candles_latest: i64 = 24 * 3600; pub const candles_latest: i64 = s_per_day;
/// Dividend data refreshes weekly /// Dividend data refreshes biweekly
pub const dividends: i64 = 7 * 24 * 3600; pub const dividends: i64 = 14 * s_per_day;
/// Split data refreshes weekly /// Split data refreshes biweekly
pub const splits: i64 = 7 * 24 * 3600; pub const splits: i64 = 14 * s_per_day;
/// Options chains refresh hourly /// 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 /// 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 /// 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 { pub const DataType = enum {