Not a static stock list — a rule-based investment scheme. Every quarter, the model screens 80 IDX names (large, mid, and small caps including AADI, MPMX, LPPF, BJBR, SIDO, MERK etc.) for liquidity and dividend history, scores them with yield + stability + positive momentum, picks 6 (one per industry), sizes them with a hybrid weight blend, and trades. Starting equity IDR 100,000,000, no withdrawals, full dividend reinvestment. Target: ~20% CAGR. The model, the math, today's basket, and the honest gap to target — all in this deck.
The model is a rule book. Same inputs in (date, universe, prices, dividends), same output every time (basket, weights). No gut feel, no stock-picking, no judgment calls. The reason the model is composed of these six steps, in this order, is explained in the sections that follow.
The model considers any stock that pays dividends regularly and trades enough volume, regardless of market cap. Many of Indonesia's best yielders sit below the large-cap line: AADI (Adaro spinoff, fresh listing), MPMX (Mitra Pinasthika Mustika, ~12% yield), LPPF (Matahari Dept Store, ~15% yield), BJBR (regional bank, ~11% yield), SIDO (herbal pharma, ~13% yield), MERK (Merck Indonesia), BFIN (BFI Finance), POWR (Cikarang Listrindo), PGEO (geothermal). Adding a new ticker is one line in the model's universe map.
| # | Ticker | Name | Industry | Shares (B) |
|---|
Eligibility is a hard yes/no decision on the rebalance date. A stock that fails any single gate is excluded from that rebalance, even if its score would otherwise be high. The gates exist to make sure the stock is tradable, has enough history to compute reliable statistics, and has actually been paying dividends.
The stock must have at least 1 year (252 trading days) of price history on the rebalance date.
Reason: a stock that just listed last month doesn't have enough data to compute the 3-year statistics the scoring step relies on. Without enough history, the score is unreliable, so we exclude it.
The 90-day median daily trading value (price × volume, in IDR) must exceed 1 billion IDR.
Reason: if you can't get in and out of a position without moving the price, you can't actually run the model. 1 billion IDR per day is a practical floor for retail / small institutional capital — well above the listed-but-not-traded names that clutter IDX.
The stock must have paid at least 3 dividends in the trailing 3-year lookback window.
Reason: the model is a dividend model. A stock that has paid only one dividend (or zero) doesn't have enough history to know if its dividend is stable, growing, or one-off. We require at least 3 events to compute a meaningful stability score.
Every stock that passes the three gates gets a composite score. Higher is better. The composite is built from four sub-scores, each one a familiar metric translated into a 0-to-1 number where higher always means "more attractive". The four sub-scores are then combined into one final score using fixed weights — yield gets the biggest weight because the brief asks for high dividend yield.
Take the total dividends paid in the last 12 months, divide by the current price. That's the trailing yield. Convert it to a 0-to-1 score where 15% yield = the maximum 1.0, and anything below scales linearly.
Take the total dividends paid each year for the last 3 years. Compute how much they vary around their average — a stock that pays exactly the same dividend every year has 0 variation. Convert to a stability score where steady dividends = 1.0, erratic = 0.
Look at the stock's return over the last 12 months. Positive trends are rewarded. This is the model's anti-value-trap filter: a stock with a 12% yield and a falling price is usually a falling knife. We want stocks where the income is real and the market is starting to notice.
Compare the current price to the 3-year peak. The further below peak we are, the higher this sub-score. Kept small on purpose — heavy drawdown weighting historically picked falling knives. 10% is enough to favour the cheaper of two equally-yielding names without overriding the momentum signal.
The brief says "high dividend yield", so yield stays the primary signal — 40% weight. Chasing yield alone produces "value traps": stocks whose price keeps falling so the yield looks high until the dividend gets cut. 35% on stability protects against that. The 15% on positive 12-month momentum is the model's most important defensive feature — it filters out high-yield names whose stocks are actually crashing (e.g. SMGR, UNVR 2018-2020 vintage). Yield + stability + momentum together account for 90% of the score; this is a quality-income-with-trend model, not a deep-value rebounder.
The model picks 6 stocks from the eligible scored list. The selection is greedy and industry-aware: walk down the sorted list, picking the highest scorer each time, but skip any stock whose industry is already filled.
Why this rule: the brief is explicit — "no multiple stocks within the same industry". This is the simplest implementation that respects that constraint while still ranking by composite score.
Once the 6 stocks are chosen, how much of each? The model computes three separate weighting schemes — by market cap, by dividend yield, by inverse volatility — and blends them in a fixed 40% / 40% / 20% ratio. Then it caps any position at 28% and sets a floor at 7% so no name dominates and no name is too small to matter.
Each stock's weight is proportional to its market value. Bigger company → bigger weight. This anchors the basket in size discipline.
Each stock's weight is proportional to its trailing yield. Higher yield → bigger weight. This tilts the basket toward maximum income.
Each stock's weight is proportional to one divided by its recent volatility. Calmer stocks → bigger weight. This is a risk-parity touch that quiets the basket.
Apply the cap and floor iteratively. If any weight exceeds 28%, clip it down to 28% and redistribute the excess to the uncapped names. If any weight is below 7%, clip it up to 7% and take the deficit from the others. Repeat until everything fits and the weights still sum to 100%.
Why 28%/7%? 28% prevents the top conviction from being more than ~quarter of the portfolio, capping idiosyncratic risk. 7% ensures every position is meaningful — anything smaller and the name's contribution to returns would be noise.
The model never trades randomly. There are exactly two reasons to rebalance, plus a cooldown to prevent overtrading.
On the first trading day of March, June, September, and December, the model re-runs the full screen → score → select → size pipeline. The portfolio may end up identical (same 6 stocks, similar weights) or completely different — that depends on what the data says on that date.
Why quarterly? Annual reports drop quarterly; dividend declarations roughly track quarters. Faster than annual but slower than monthly — captures meaningful change without churn.
Between calendar rebalances, the model checks every day whether any held position has drifted more than 12 percentage points from its target weight. If so, it rebalances immediately.
Why 12pp? Smaller thresholds fire too often (every couple of weeks); larger thresholds let unhealthy concentration build up before correcting.
After any rebalance — calendar or drift — the model will not rebalance again for 30 days, no matter what.
Why a cooldown? In thin markets, liquidating a position takes more than a day. Rebalancing on consecutive days would either pay too much in slippage or fail to execute. 30 days is conservative.
On day t: if at least 30 days have passed since the last rebalance, AND either (today is the first trading day of Mar/Jun/Sep/Dec) OR (any held position has drifted >12pp from its target) → run the full pipeline. Otherwise, do nothing.
Beyond rebalancing, the model has two hard-stop rules for individual holdings. If either fires, the stock is flagged for forced replacement at the next rebalance, overriding score-based selection (and, if necessary, the industry-diversification rule too).
Trigger: the trailing-12-month dividend is less than 70% of the prior-12-month dividend.
Reason: the entire thesis is "stable, high dividend income". If management cuts the dividend by more than 30%, the income story is broken. Holding through that means owning a busted thesis.
Trigger: price drops more than 50% in any rolling 90-day window.
Reason: a 50% quarter is almost never noise — it usually signals fraud, a regulatory event, or a structural break. The model exits and lets the score re-rank the universe.
The screen runs over all 80 names. The composite scores rank them. The selection walks the ranking, taking the top per industry. The sizing blends the three sleeves. Here is the basket the model would hand you to execute on 2026-05-15.
| Rank | Ticker | Industry | Composite | Yield | Stability | Drawdown | Mom (12m) | In basket |
|---|
At each calendar rebalance from 2017-01-02 to 2026-05-15, the model ran the full pipeline. The equity curve below is the result of compounding those decisions with full dividend reinvestment. Dotted red line = 30% CAGR target. Dotted grey = JKSE.
Each row is a ticker, each column a rebalance date. Cell colour = weight, black = not in the basket. This is the model's decision history: where it rotated, what stayed, what got dropped.
| Date | Trigger | NAV (Rp M) | Basket |
|---|
Hitting 30% CAGR over 9.4y requires turning IDR 100M into IDR 0.55B — a 5.5× multiple. That is 17.4pp of annual alpha over JKSE. The yield-focused expansion roughly tripled the dividend-only model's CAGR, but a long-only dividend strategy alone cannot reach 30%.
Leverage · 3× on the model's ~10% engine ≈ 30% gross, ~22-24% net of carry. Margin-IDR runs 7-9%/yr.
Concentration · Drop industry-diversification, hold the top 3 by score. Higher CAGR, much higher idiosyncratic risk.
Universe shift · Add IDX growth names (BREN, TPIA, DSSA, GOTO post-recovery) — breaks constraint #2 (dividend stability).
Cross-asset overlay · Keep the model as core, route 25-40% into IDX growth / crypto / equity-options. The institutionally honest answer.
The brief encodes a fundamental tension: dividend-stable + value + diversified is a defensive income strategy that historically returns 8-12% on IDX. Adding "30% CAGR" requires breaking exactly one of those constraints — or layering something multiplicative on top (leverage, derivatives, a growth satellite). Alpha-Nusantara v2.0 as configured here is the maximum the brief allows. Anything above it requires explicitly choosing what to give up.