How SahamKu works
Show the work. Cite the source.
Every figure on this platform can be traced to a filing, a feed or a run you can reproduce. Where a feed is still being built or a table is empty, this page says so in the same tone as the parts that already run.
Five layers, one verdict.
Each layer feeds the next. Filings become signals, signals become strategies, strategies become receipts.
Data
KSEI filings, daily prices, thirteen Indonesian news sources, fundamentals and macro. Pulled from the primary record on a fixed schedule, never typed in by hand.
6 PIPELINES RUNNING · 2 IN BUILD
Freshness
Every domain carries a staleness threshold drawn from its real cadence. Cross it and the interface says so, in red, everywhere that number appears.
PRICES 1 TRADING DAY · NEWS 12 HOURS · SIGNALS 14 DAYS · OWNERSHIP 75 DAYS · FLOW 3 TRADING DAYS
Signals
A large language model reads the assembled evidence per ticker and writes a verdict with its inputs attached, split into a bull case and a bear case. Thin data lowers confidence, it never invents a number.
EVERY SIGNAL SHOWS ITS EVIDENCE
Strategies
Eleven rulesets compile to a screener and a backtest from the same definition, so what matches today and what happened before are read off one source of truth.
11 STRATEGIES · LOCKED WHEN DATA IS MISSING
Receipts
Backtests fill at the next session open with IDX retail costs, no lookahead, benchmarked against holding IHSG. Trades, exits and drawdowns are all printed.
50 ENGINE TESTS PASSING
THE RULES
The assumptions are printed too. All of them.
The cost model
Applied to every simulated fill. Slippage moves the price against you first, then commission comes out of the cash flow.
- Buy commission
- 0.15%
- Sell commission, levy included
- 0.25%
- Slippage, each way
- 0.10%
- Execution
- Next session open
- Lot size
- 100 shares
What we never do
These are not preferences. They are the reasons a panel is allowed to look empty.
- Estimate a missing figure
- Never
- Backfill a signal after the fact
- Never
- Reword stale data as current
- Never
- Show a number without a timestamp
- Never
- Fill an empty table with a placeholder
- Never
Data boundaries
The edges of what the platform can see. Anything past these lines is not modelled.
- KSEI ownership
- Monthly, with a lag
- Intraday tape
- No order book, no ticks
- Foreign flow
- In-house feed, in build
- News
- Links out to the publisher
- Fundamentals
- Thin outside liquid names
A backtest walks the calendar one session at a time. Orders queued yesterday fill at today’s open, the portfolio is marked at today’s close, and the rules then read only data available through that close. Nothing is ever filled on the bar that produced its signal, and indicators return nothing during warm-up rather than a guess.
What SahamKu does not know.
Ownership arrives late
KSEI publishes monthly and with a lag. An ownership change you read here already happened, sometimes weeks ago. It is evidence about who holds a stock, not a trigger.
Foreign flow is not live yet
Daily foreign flow is being brought in-house, straight from primary IDX trading data. Until that feed is running end to end, the terminal shows a clean empty state. We never publish an estimate.
The track record is too short to claim
Signal accuracy against 30, 60 and 90 day forward returns is recorded, but the sample is not yet large enough to publish a hit rate. Confidence is a model output, not a measured frequency.
Sentiment reads text, not markets
A sentiment score describes the tone of an article. It does not predict a price, and a wave of positive coverage is often the last thing that happens in a move.
A backtest is not a forecast
Historical rules applied to historical data will always look better than the same rules applied forward. Costs are modelled, but liquidity, partial fills and your own hesitation are not.
Nothing here is advice
SahamKu holds no non-public information and makes no recommendation. Past performance does not predict future returns, and you carry your own risk.
Jobs run as scheduled GitHub Actions against a Postgres database. Schedule times are UTC, and the IDX session runs 09:00 to 15:00 Jakarta time, which is 02:00 to 08:00 UTC.