PTBA 82.24 +0.9% CMNT 79.81 +2.5% EXCL 79.22 +0.4% CPIN 73.10 +1.6% UNTR 70.80 −1.8% 259 tickers scanned · 0 proven edge PTBA 82.24 +0.9% CMNT 79.81 +2.5% EXCL 79.22 +0.4% CPIN 73.10 +1.6% UNTR 70.80 −1.8% 259 tickers scanned · 0 proven edge
MESSE × Snowflake CoCo CLI Hackathon 2026 Problem Statement #4 — Capital Markets, Indonesia

A bandarmologi copilot that measures its own edge before it sizes anything.

Cortex Analyst over a MART schema in Snowflake, driven through CoCo CLI. Every claim is answered by querying the data directly — and it refuses to suggest a position size when the edge isn't statistically proven.

Live snapshot — August 5, 2026

Quiet accumulation watchlist

Signals are built from MESSE's own accumulation/distribution factor scores, cross-sectionally re-ranked in Snowflake — filtered to full persistence and price that hasn't moved much yet.

Click a column header to sort 5 of 25 tickers labeled ACCUMULATION
Source: MART.VW_WATCHLIST, filtered to liquidity ≥ IDR 5bn/day. Pulled live from a CoCo CLI session.
Signal
PTBABukit Asam Tbk · Mining
82.2
20/20 d +0.86% 13.5bn Accumulation
CMNTCemindo Gemilang Tbk · Basic Industry
79.8
20/20 d +2.53% 10.4bn Accumulation
EXCLXL Axiata Tbk · Infrastructure
79.2
20/20 d +0.40% 6.0bn Accumulation
CPINCharoen Pokphand Tbk · Consumer
73.1
20/20 d +1.60% 16.6bn Accumulation
UNTRUnited Tractors Tbk · Industrial
70.8
19/20 d −1.80% 52.9bn Accumulation
Not broker order flow. MESSE doesn't collect IDX broker transaction data — BANDAR_SCORE is a price/volume factor-score proxy of MESSE's own, cross-sectionally re-ranked in Snowflake. The agent states this explicitly whenever asked, rather than letting the name "bandarmologi" imply more than the data supports.

Case study

The top score doesn't earn a position

PTBA leads the watchlist with a score of 82.2 and full persistence. But Fractional Kelly is computed from measured forward returns, not assumed ones — and here, the result declines to size.

PTBA — position sizing

Bandar score
82.24
Sample size
997 obs.
Win rate
40.8%
Avg win / avg loss
+10.7% / −12.7%
Payoff ratio
0.84×
Suggested weight
0.00%
SIZING_CAVEAT · NO_EDGE

Why Kelly = 0

f* = (b·p − q) / b
b = 0.844  (payoff ratio)
p = 0.408  (win rate)
q = 0.592  (1 − p)

f* = (0.844×0.408 − 0.592) / 0.844
f* = −0.29  → clipped to 0

Historically negative expected value on this bucket (average forward 20-day return of −3.1%). The system declines to suggest any position size rather than rounding to a small number that merely looks safe.

Honesty beat

How many signals have a proven edge?

Measured, not assumed — this is what separates it from most signal tools that always have an answer.

0 of 259
currently signal-labeled tickers clear the statistical bar for a proven edge (min. 50 observations, Kelly > 0)
Accumulation
N=997 · win 40.8% · NO_EDGE Payoff 0.84× · fwd ret 20D −3.1%
Distribution
N=368 · win 37.5% · NO_EDGE Payoff 1.04× · fwd ret 20D −3.4%
Neutral
N=16,837 · win 39.7% · NO_EDGE Payoff 0.87× · fwd ret 20D −3.5%
Stealth accum.
N=3 · win 100% · INSUFFICIENT_SAMPLE Too few observations to conclude anything

“A system that measures its own edge and declines to size when there isn't one is worth more than a system that always has an answer.” — MESSE Copilot, CoCo CLI session, August 5, 2026

How it works

Every computation runs inside Snowflake

From raw MESSE exports to the agent's answer, no business logic runs in an external app — so every claim can be traced back to the SQL that produced it.

MESSE MySQL RAW (Snowflake) MART · signal + Kelly Cortex Analyst CoCo CLI agent

Because MESSE has no IDX broker transaction data, the MART layer is built from MESSE's own accumulation/distribution factor scores (not broker net flow) — see "Known gaps" in the repo README for the full reasoning and limits behind that call.