fix(core): non-regular share is of all trading

IDX's Value is regular-board turnover, so NonRegularValue / Value gave
non-regular over regular (BBRI 2026-10-14: 50.91%) instead of the share of
all trading (33.74%). non_regular_bps now divides by regular plus
non-regular value, with a regression test on that fixture. The docs now say
volume, value and the foreign figures are the regular board: IPOT's
regular total matches Value, and in a week of every stock no foreign figure
exceeded regular volume, even with non-regular volume above twice it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V3syn2fN2LNo5pvTSqc6eh
This commit is contained in:
hermes 2026-10-18 05:41:55 +00:00
commit 83783684cb
13 changed files with 50 additions and 27 deletions

View file

@ -244,8 +244,9 @@ gross figures overstate their direction. `method` names the rules applied. `inve
description = "Foreign investors' buying and selling of one IDX ticker, session by \
session (oldest first), from IDX's daily trading summary: foreign buy, sell and net volume in \
shares, `foreign_net_value` (net shares at the session's average price, an estimate, IDR), \
`change_bps`, and `non_regular_bps` (share of value traded outside the regular board). Totals \
cover the whole range; `foreign_share_bps` is foreign investors' share of trading. End of day."
`change_bps`, and `non_regular_bps` (share of all value traded outside the regular board). \
Volume, value and foreign figures are the regular board. Totals cover the whole range; \
`foreign_share_bps` is foreign investors' share of regular-board trading. End of day."
)]
async fn get_foreign_flow(&self, params: Parameters<FlowParams>) -> ToolResult {
let FlowParams {