update todos
This commit is contained in:
parent
abde6fdf3b
commit
195b660f61
1 changed files with 38 additions and 50 deletions
88
TODO.md
88
TODO.md
|
|
@ -1,5 +1,12 @@
|
||||||
# Future Work
|
# Future Work
|
||||||
|
|
||||||
|
## Yahoo Finance as primary quote source
|
||||||
|
|
||||||
|
Consider adding Yahoo Finance as the primary provider for real-time quotes,
|
||||||
|
with a silent fallback to TwelveData. Yahoo is free and has no API key
|
||||||
|
requirement, but the unofficial API is brittle and can break without notice.
|
||||||
|
TwelveData would serve as the reliable backup when Yahoo is unavailable.
|
||||||
|
|
||||||
## Covered call portfolio valuation
|
## Covered call portfolio valuation
|
||||||
|
|
||||||
Portfolio value should account for sold call options. Shares covered by
|
Portfolio value should account for sold call options. Shares covered by
|
||||||
|
|
@ -8,34 +15,6 @@ in-the-money calls should be valued at the strike price, not the market price.
|
||||||
Example: 500 shares of AMZN at $225, with 3 sold calls at $220 strike.
|
Example: 500 shares of AMZN at $225, with 3 sold calls at $220 strike.
|
||||||
300 shares should be valued at $220 (covered), 200 shares at $225 (uncovered).
|
300 shares should be valued at $220 (covered), 200 shares at $225 (uncovered).
|
||||||
|
|
||||||
## Institutional share class price ratios
|
|
||||||
|
|
||||||
Vanguard target date funds (e.g. 2035/VTTHX, 2040) held through Fidelity are
|
|
||||||
institutional share classes with prices that differ from the publicly traded
|
|
||||||
fund by a fixed ratio. The price can only be sourced from Fidelity directly,
|
|
||||||
but performance data (1/3/5/10yr returns) should be identical to the public
|
|
||||||
symbol.
|
|
||||||
|
|
||||||
Investigate: can we store a static price ratio in metadata (e.g. if Fidelity
|
|
||||||
says $100 and Morningstar says $20, ratio = 5) and multiply TwelveData quote
|
|
||||||
data by that ratio? Would this hold consistently over time, or does the ratio
|
|
||||||
drift?
|
|
||||||
|
|
||||||
## Market-aware cache TTL for daily candles
|
|
||||||
|
|
||||||
Daily candle TTL is currently 24 hours, but candle data only becomes meaningful
|
|
||||||
after the market close. Investigate keying the cache freshness to ~4:30 PM
|
|
||||||
Eastern (or whenever TwelveData actually publishes the daily candle) rather
|
|
||||||
than a rolling 24-hour window. This would avoid unnecessary refetches during
|
|
||||||
the trading day and ensure a fetch shortly after close gets fresh data.
|
|
||||||
|
|
||||||
## Yahoo Finance as primary quote source
|
|
||||||
|
|
||||||
Consider adding Yahoo Finance as the primary provider for real-time quotes,
|
|
||||||
with a silent fallback to TwelveData. Yahoo is free and has no API key
|
|
||||||
requirement, but the unofficial API is brittle and can break without notice.
|
|
||||||
TwelveData would serve as the reliable backup when Yahoo is unavailable.
|
|
||||||
|
|
||||||
## Human review of analytics modules
|
## Human review of analytics modules
|
||||||
|
|
||||||
AI review complete; human review still needed for:
|
AI review complete; human review still needed for:
|
||||||
|
|
@ -58,28 +37,6 @@ exported as a public constant. Callers currently pass the default.
|
||||||
`default_risk_free_rate` in `src/analytics/risk.zig`. Eventually consider
|
`default_risk_free_rate` in `src/analytics/risk.zig`. Eventually consider
|
||||||
making this a config value (env var or .env) so it doesn't require a rebuild.
|
making this a config value (env var or .env) so it doesn't require a rebuild.
|
||||||
|
|
||||||
## On-demand server-side fetch for new symbols
|
|
||||||
|
|
||||||
Currently the server's SRF endpoints (`/candles`, `/dividends`, etc.) are pure
|
|
||||||
cache reads — they 404 if the data isn't already on disk. New symbols only get
|
|
||||||
populated when added to the portfolio and picked up by the next cron refresh.
|
|
||||||
|
|
||||||
Consider: on a cache miss, instead of blocking the HTTP response with a
|
|
||||||
multi-second provider fetch, kick off an async background fetch (or just
|
|
||||||
auto-add the symbol to the portfolio) and return 404 as usual. The next
|
|
||||||
request — or the next cron run — would then have the data. This gives
|
|
||||||
"instant-ish gratification" for new symbols without the downsides of
|
|
||||||
synchronous fetch-on-miss (latency, rate limit contention, unbounded cache
|
|
||||||
growth from arbitrary tickers).
|
|
||||||
|
|
||||||
Note that this process doesn't do anything to eliminate all the API keys
|
|
||||||
that are necessary for a fully functioning system. A more aggressive view
|
|
||||||
would be to treat ZFIN_SERVER has a 100% record of reference, but that would
|
|
||||||
introduce some opacity to the process as we wait for candles (for example) to
|
|
||||||
populate. This could be solved on the server by spawning a thread to fetch the
|
|
||||||
data, then returning 202 Accepted, which could then be polled client side. Maybe
|
|
||||||
this is a better long term approach?
|
|
||||||
|
|
||||||
## CLI/TUI code review (lower priority)
|
## CLI/TUI code review (lower priority)
|
||||||
|
|
||||||
No review has been done on these files. They are presentation-layer code
|
No review has been done on these files. They are presentation-layer code
|
||||||
|
|
@ -106,3 +63,34 @@ Commands:
|
||||||
- `src/commands/portfolio.zig`
|
- `src/commands/portfolio.zig`
|
||||||
- `src/commands/quote.zig`
|
- `src/commands/quote.zig`
|
||||||
- `src/commands/splits.zig`
|
- `src/commands/splits.zig`
|
||||||
|
|
||||||
|
## Market-aware cache TTL for daily candles
|
||||||
|
|
||||||
|
Daily candle TTL is currently 24 hours, but candle data only becomes meaningful
|
||||||
|
after the market close. Investigate keying the cache freshness to ~4:30 PM
|
||||||
|
Eastern (or whenever TwelveData actually publishes the daily candle) rather
|
||||||
|
than a rolling 24-hour window. This would avoid unnecessary refetches during
|
||||||
|
the trading day and ensure a fetch shortly after close gets fresh data.
|
||||||
|
I think that issue has been alleviated by the 23hr 45min plus cron job.
|
||||||
|
|
||||||
|
## On-demand server-side fetch for new symbols
|
||||||
|
|
||||||
|
Currently the server's SRF endpoints (`/candles`, `/dividends`, etc.) are pure
|
||||||
|
cache reads — they 404 if the data isn't already on disk. New symbols only get
|
||||||
|
populated when added to the portfolio and picked up by the next cron refresh.
|
||||||
|
|
||||||
|
Consider: on a cache miss, instead of blocking the HTTP response with a
|
||||||
|
multi-second provider fetch, kick off an async background fetch (or just
|
||||||
|
auto-add the symbol to the portfolio) and return 404 as usual. The next
|
||||||
|
request — or the next cron run — would then have the data. This gives
|
||||||
|
"instant-ish gratification" for new symbols without the downsides of
|
||||||
|
synchronous fetch-on-miss (latency, rate limit contention, unbounded cache
|
||||||
|
growth from arbitrary tickers).
|
||||||
|
|
||||||
|
Note that this process doesn't do anything to eliminate all the API keys
|
||||||
|
that are necessary for a fully functioning system. A more aggressive view
|
||||||
|
would be to treat ZFIN_SERVER has a 100% record of reference, but that would
|
||||||
|
introduce some opacity to the process as we wait for candles (for example) to
|
||||||
|
populate. This could be solved on the server by spawning a thread to fetch the
|
||||||
|
data, then returning 202 Accepted, which could then be polled client side. Maybe
|
||||||
|
this is a better long term approach?
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue