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.

Every smart decision on IDX starts here.

Run on facts. Not feelings.

Open the Terminal