mirror of
https://github.com/0xrsydn/idx-cli.git
synced 2026-11-07 01:35:36 +00:00
`idx stocks flow SYMBOL` shows what foreign investors bought and sold of a stock, session by session, from IDX's own daily trading summary: foreign buy, sell and net volume, net value at the session's average price, and the share of value traded outside the regular board, with range totals. Latest 10 sessions by default (--days, at most 60) or --from/--to. The MCP server exposes it as get_foreign_flow. - api/idx: pure parser for GetStockSummary (rows dated another session are dropped) and a provider over curl-impersonate's profile fallback with a 30 s limit; Cloudflare passes only some fingerprints. - flow: each session is cached whole by date, so other stocks' flows for the same sessions need no request. Weekends are never requested. - Idx::idx_code is shared by broker and flow for the .JK-only check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V3syn2fN2LNo5pvTSqc6eh
524 lines
16 KiB
JSON
524 lines
16 KiB
JSON
[
|
|
{
|
|
"description": "Bandarmology for one or more IDX tickers from the broker summary: for the top 1, 3, 5 and 10 brokers per side, buy value minus sell value as basis points of value traded (`imbalance_bps`), with a `signal` from big_accumulation (>= +1500) through neutral (within +-500) to big_distribution (<= -1500), headlined by `top` (default 5). Reports come strongest accumulation first; tickers that fail are listed under `failures`. A heuristic over end-of-day broker codes: brokers trade for many clients, and `both_sides` lists brokers whose gross figures overstate their direction. `method` names the rules applied. `investor` must be `all`: the summary has no total for one investor side.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"board": {
|
|
"default": null,
|
|
"description": "Which board's trades to count (default \"all\"); \"regular\" leaves out\nnegotiated block trades.",
|
|
"enum": [
|
|
"all",
|
|
"regular",
|
|
"cash",
|
|
"negotiated"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"date": {
|
|
"default": null,
|
|
"description": "One session, YYYY-MM-DD. Omit date, from and to for the latest session with trades.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"from": {
|
|
"default": null,
|
|
"description": "First session of a range, YYYY-MM-DD (at most 366 days).",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"investor": {
|
|
"default": null,
|
|
"description": "Whose trades to count, by investor domicile (default \"all\").",
|
|
"enum": [
|
|
"all",
|
|
"foreign",
|
|
"domestic"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"symbols": {
|
|
"description": "IDX tickers, e.g. [\"BBCA\", \"BBRI\"]; the `.JK` suffix is optional. At most 20.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"to": {
|
|
"default": null,
|
|
"description": "Last session of the range, YYYY-MM-DD (default today).",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"top": {
|
|
"default": null,
|
|
"description": "Tier behind the headline signal: 1, 3, 5 or 10 brokers per side (default 5).",
|
|
"format": "uint8",
|
|
"maximum": 255,
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"symbols"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "analyze_bandar"
|
|
},
|
|
{
|
|
"description": "Analyze one IDX ticker: technical signals (trend, RSI, MACD, moving averages) and fundamental growth, valuation, and risk ratings. Analyses that fail are listed under `errors`; the call fails only if every analysis fails.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"AnalysisKind": {
|
|
"enum": [
|
|
"technical",
|
|
"growth",
|
|
"valuation",
|
|
"risk"
|
|
],
|
|
"type": "string"
|
|
}
|
|
},
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"kinds": {
|
|
"description": "Analyses to run (default: all).",
|
|
"items": {
|
|
"$ref": "#/$defs/AnalysisKind"
|
|
},
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
]
|
|
},
|
|
"symbol": {
|
|
"description": "IDX ticker, e.g. \"BBCA\".",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"symbol"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "analyze_stock"
|
|
},
|
|
{
|
|
"description": "Compare fundamental reports (growth, valuation, risk) across IDX tickers. Tickers that fail are listed under `failures`.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"symbols": {
|
|
"description": "IDX tickers, e.g. [\"BBCA\", \"BBRI\"]; the `.JK` suffix is optional. At most 20.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"symbols"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "compare_stocks"
|
|
},
|
|
{
|
|
"description": "Broker summary for one IDX ticker: the top 10 buyers and top 10 sellers by lots over a session or date range, each with lots (1 lot = 100 shares), value and average price in IDR, plus totals. Buyers and sellers are ranked separately and gross, so a broker can appear on both sides. End of day only (IDX hides broker codes during trading); `kind` is the broker's own status (local, foreign, state_owned), not its clients'. `rounded` = true means figures of a million and more carry one decimal of precision.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"board": {
|
|
"default": null,
|
|
"description": "Which board's trades to count (default \"all\"); \"regular\" leaves out\nnegotiated block trades.",
|
|
"enum": [
|
|
"all",
|
|
"regular",
|
|
"cash",
|
|
"negotiated"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"date": {
|
|
"default": null,
|
|
"description": "One session, YYYY-MM-DD. Omit date, from and to for the latest session with trades.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"from": {
|
|
"default": null,
|
|
"description": "First session of a range, YYYY-MM-DD (at most 366 days).",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"investor": {
|
|
"default": null,
|
|
"description": "Whose trades to count, by investor domicile (default \"all\").",
|
|
"enum": [
|
|
"all",
|
|
"foreign",
|
|
"domestic"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"description": "IDX ticker, e.g. \"BBCA\".",
|
|
"type": "string"
|
|
},
|
|
"to": {
|
|
"default": null,
|
|
"description": "Last session of the range, YYYY-MM-DD (default today).",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"symbol"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_broker_summary"
|
|
},
|
|
{
|
|
"description": "Company data for one IDX ticker: profile, financial statements, earnings, analyst sentiment, insights, and news. News items carry `relevance`: `company` (about this ticker) first, then `market` (general market news). Sections that fail are listed under `errors`; the call fails only if every section fails.",
|
|
"inputSchema": {
|
|
"$defs": {
|
|
"CompanySection": {
|
|
"enum": [
|
|
"profile",
|
|
"financials",
|
|
"earnings",
|
|
"sentiment",
|
|
"insights",
|
|
"news"
|
|
],
|
|
"type": "string"
|
|
}
|
|
},
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"sections": {
|
|
"description": "Sections to fetch (default: all).",
|
|
"items": {
|
|
"$ref": "#/$defs/CompanySection"
|
|
},
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
]
|
|
},
|
|
"symbol": {
|
|
"description": "IDX ticker, e.g. \"BBCA\".",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"symbol"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_company"
|
|
},
|
|
{
|
|
"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.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"days": {
|
|
"default": null,
|
|
"description": "Latest sessions (default 10, at most 60). Omit when giving from/to.",
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"from": {
|
|
"default": null,
|
|
"description": "First session of a range, YYYY-MM-DD (at most 92 days).",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"symbol": {
|
|
"description": "IDX ticker, e.g. \"BBCA\".",
|
|
"type": "string"
|
|
},
|
|
"to": {
|
|
"default": null,
|
|
"description": "Last session of the range, YYYY-MM-DD (default today).",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"symbol"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_foreign_flow"
|
|
},
|
|
{
|
|
"description": "Every IDX holding (above 1%) of one investor, matched by name.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"entity": {
|
|
"description": "Investor name or part of it, e.g. \"DWIMURIA\"; the closest match is used.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"entity"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_investor_holdings"
|
|
},
|
|
{
|
|
"description": "Holder changes (new, exited, increased, decreased) between two KSEI release dates, optionally for one ticker. Rows come largest change first, one page at a time: `summary` covers all of them (counts by type, tickers with the most changes), and `next_offset` is the `offset` for the next page, or null after the last.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"from": {
|
|
"description": "Earlier release date, YYYY-MM-DD (see ownership_status).",
|
|
"type": "string"
|
|
},
|
|
"limit": {
|
|
"default": null,
|
|
"description": "Rows per page (default 200, at most 300); `total` reports the full count.",
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"offset": {
|
|
"default": null,
|
|
"description": "Rows to skip, for the next page: the previous response's `next_offset`.",
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"ticker": {
|
|
"default": null,
|
|
"description": "Only this ticker's changes.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"to": {
|
|
"description": "Later release date, YYYY-MM-DD.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"from",
|
|
"to"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_ownership_changes"
|
|
},
|
|
{
|
|
"description": "OHLCV price history for one IDX ticker.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"interval": {
|
|
"default": null,
|
|
"description": "Candle size (default \"1d\").",
|
|
"enum": [
|
|
"1d",
|
|
"1wk",
|
|
"1mo"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"period": {
|
|
"default": null,
|
|
"description": "Lookback window (default \"3mo\").",
|
|
"enum": [
|
|
"1d",
|
|
"5d",
|
|
"1mo",
|
|
"3mo",
|
|
"6mo",
|
|
"1y",
|
|
"2y",
|
|
"5y"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"description": "IDX ticker, e.g. \"BBCA\".",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"symbol"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_price_history"
|
|
},
|
|
{
|
|
"description": "Latest quotes (price, change, volume, 52-week range, market cap) for one or more IDX tickers.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"symbols": {
|
|
"description": "IDX tickers, e.g. [\"BBCA\", \"BBRI\"]; the `.JK` suffix is optional. At most 20.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"required": [
|
|
"symbols"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_quotes"
|
|
},
|
|
{
|
|
"description": "Shareholders above 1% of an IDX ticker from the latest KSEI release, with concentration metrics (top1, top3, HHI, free float).",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"ticker": {
|
|
"description": "IDX ticker, e.g. \"BBCA\".",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"ticker"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "get_shareholders"
|
|
},
|
|
{
|
|
"description": "Ownership database status: whether it has data, and the imported KSEI release dates.",
|
|
"inputSchema": {
|
|
"properties": {},
|
|
"type": "object"
|
|
},
|
|
"name": "ownership_status"
|
|
},
|
|
{
|
|
"description": "Download or refresh the KSEI ownership snapshot (several MB) into the local database.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"force": {
|
|
"default": false,
|
|
"description": "Re-download even when the local snapshot is current.",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"name": "ownership_sync"
|
|
},
|
|
{
|
|
"description": "Run a stock screen (top/worst performers, high dividend, low P/E, 52-week highs/lows, high volume, large cap).",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"filter": {
|
|
"default": null,
|
|
"description": "Screen to run (default \"top-performers\").",
|
|
"enum": [
|
|
"top-performers",
|
|
"worst-performers",
|
|
"high-dividend",
|
|
"low-pe",
|
|
"52w-high",
|
|
"52w-low",
|
|
"high-volume",
|
|
"large-cap"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"limit": {
|
|
"default": null,
|
|
"description": "Maximum results (default 50, at most 200).",
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"region": {
|
|
"default": null,
|
|
"description": "Market region (default \"id\").",
|
|
"enum": [
|
|
"id",
|
|
"us",
|
|
"sg",
|
|
"hk",
|
|
"jp"
|
|
],
|
|
"type": "string"
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"name": "screen_stocks"
|
|
},
|
|
{
|
|
"description": "Search investor names in the KSEI ownership database.",
|
|
"inputSchema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {
|
|
"limit": {
|
|
"default": null,
|
|
"description": "Maximum results (default 20, at most 100).",
|
|
"format": "uint",
|
|
"minimum": 0,
|
|
"type": [
|
|
"integer",
|
|
"null"
|
|
]
|
|
},
|
|
"query": {
|
|
"description": "Full-text query over investor names.",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"query"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"name": "search_investors"
|
|
}
|
|
]
|