mirror of
https://github.com/0xrsydn/idx-cli.git
synced 2026-11-07 09:45:36 +00:00
feat: flag quotes behind the latest IDX session (#50)
MSN can serve the previous session's close for hours after IDX closes; on 2026-10-16 at 16:53 WIB it still returned the 15th. Quotes and screener rows now carry `behind_session`, true when `as_of` is before the latest weekday whose session has ended (16:15 WIB). It is computed on return, not cached. The quote table notes such quotes, and the get_quotes description explains the field. Closes #50 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V3syn2fN2LNo5pvTSqc6eh
This commit is contained in:
parent
7d55be80c5
commit
a0a2cac7cf
20 changed files with 155 additions and 24 deletions
|
|
@ -70,6 +70,7 @@ pub(super) fn parse_quote(symbol: &str, quotes: &[MsnQuote]) -> Result<Quote, Id
|
|||
prev_close,
|
||||
avg_volume: round_u64(quote.average_volume),
|
||||
as_of: crate::api::parse_as_of(quote.time_last_traded.as_deref()),
|
||||
behind_session: false,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -718,6 +719,7 @@ pub(super) fn parse_screener_results(raw: &RawScreenerResponse) -> Result<Vec<Qu
|
|||
prev_close,
|
||||
avg_volume: round_u64(q.average_volume),
|
||||
as_of: crate::api::parse_as_of(q.time_last_traded.as_deref()),
|
||||
behind_session: false,
|
||||
})
|
||||
})
|
||||
.collect();
|
||||
|
|
|
|||
|
|
@ -50,6 +50,12 @@ pub struct Quote {
|
|||
/// Suspended stocks can carry a last trade months in the past.
|
||||
#[serde(default)]
|
||||
pub as_of: Option<DateTime<FixedOffset>>,
|
||||
/// True when `as_of` is before the latest IDX session that has ended: the
|
||||
/// provider has not caught up yet (MSN can lag hours after the close), or
|
||||
/// the stock did not trade. False when `as_of` is unknown. Set when the
|
||||
/// quote is returned, not when it is cached.
|
||||
#[serde(default)]
|
||||
pub behind_session: bool,
|
||||
}
|
||||
|
||||
/// OHLC candle data normalized from Yahoo Finance chart indicators.
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ pub(super) fn parse_quote(symbol: &str, chart: &ChartResponse) -> Result<Quote,
|
|||
.regular_market_time
|
||||
.and_then(|ts| chrono::DateTime::from_timestamp(ts, 0))
|
||||
.map(|t| t.with_timezone(&crate::api::idx_offset())),
|
||||
behind_session: false,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue