Iceberg Indicator

The live refill overlay for Sierra Chart, study scsf_GDO_Iceberg_Refill in GDO_Signals.dll · green star = hidden buyer / red star = hidden seller · v13.47
Reads
Trade tape
Draws on
Chart F
Pkg 12 / MBO
Not needed
SC Inputs
5
Version
v13.47

The 5 things to remember

  • A green star below price marks a hidden buyer absorbing sells (likely support, bullish read).
  • A red star above price marks a hidden seller absorbing buys (likely resistance, bearish read).
  • The label clip x refills reads as displayed size shown each reload, times how many times it reloaded (e.g. 3 x 30 = showed 3, reloaded 30 times).
  • Star size scales with refill count: a bigger star means a more stubborn absorber.
  • It is a read-only tape signal (no orders, no account). It draws once per episode, then re-fires if price comes back to the level.

What it is, in one line

An iceberg is a large hidden order that keeps reloading a small visible tip at one price. This study watches the trade tape, spots a price level that gets eaten and reloaded again and again, and drops a star on Chart F at that price, the moment it happens.

Detection lives in a pure C++ core (GDO_Signals/core/iceberg_refill.h/.cpp), a faithful port of the Python tape_iceberg.py Signature B rule, parity-tested in Catch2. The study reads sc.GetTimeAndSales(), runs the core, and draws with sc.UseTool.

Glyph legend

BID iceberg drawn below the level (support) ASK iceberg drawn above the level (resistance) clip x refills label, side-colored, beside the star
You seeIt meansBias
green, below a candle lowPassive buyer keeps refilling the bid as sellers hit itDemand absorption, support
red, above a candle highPassive seller keeps refilling the ask as buyers lift itSupply absorption, resistance
Both sides at adjacent levelsTwo-sided absorption (market-maker / range)Range-bound, read with care

Side semantics (the tape gives side for free)

Every trade carries its aggressor side, so the detector splits its tracking. A seller hitting the bid (SC_TS_BID) reveals a hidden buyer; a buyer lifting the ask (SC_TS_ASK) reveals a hidden seller.

StarWho is hidingWhat they are doingRead
BID ✶ A passive buyer Absorbing aggressive selling, replenishing the bid Accumulation, likely support, bullish bias
ASK ✶ A passive seller Absorbing aggressive buying, replenishing the ask Distribution, likely resistance, bearish bias

The label, decoded

Format: clip x refills.

  • clip: the displayed (tip) size shown at each reload. Bigger clip = a larger visible commitment each time.
  • refills: how many times the level was eaten down and reloaded. More refills = more stubborn.
  • Example: 3 x 30 means it showed 3 lots each time and reloaded 30 times. A small tip, a deep hidden order.

Star size + lifecycle

  • Star size scales with the refill count, so the most persistent absorbers stand out at a glance.
  • Fires once per episode. The episode closes when price leaves the level by more than LevelExitTicks.
  • A later revisit to the same price re-opens a fresh episode and can fire again.
  • Stars are a persistent one-shot history (UTAM_ADD_ONLY_IF_NEW, LineNumber 84000 + n), so they stay on the chart as a record.

The 5 calibrated SC Inputs (live-tunable)

Seeded from the 2026-05-27 raw tape. The old 3 / 10 placeholders flooded 137+ signals a day; these settings produce roughly 15 to 20 stars per session.

InputDefaultWhat it controlsTune
MinRefill5Minimum reloads before a level qualifies as an icebergRaise for fewer, stronger stars
MinAbsVol30Minimum total volume absorbed at the levelRaise to ignore thin levels
RefillFraction0.5How much of the peak tip must reappear to count as a refillRaise for stricter refills
LevelExitTicks4How far price must leave before the episode closesRaise to hold episodes longer
MinClip2Minimum displayed tip size to consider the levelRaise to ignore tiny tips

Label math: clip = peak displayed size, refills = refill_count. All five are SC study Inputs, so you can adjust them live without a rebuild.

Signature B (refill), plain language

Per price level, the core tracks the displayed size on each trade, the running total absorbed, a consume / replenish cycle, and a refill count. A refill is when the displayed size was eaten down and then a later trade shows it back to at least RefillFraction x peak. It fires once the level clears all three gates: enough refills, enough total volume, and a big enough tip.

on each trade at price P, side S (displayed = bid_size if S=BID else ask_size):
  close levels where |level - P| > LevelExitTicks      # episode bounding
  st = level[P]   (reset if S flipped)
  st.total_absorbed += volume
  if st.peak > 0 and st.drawn_down and displayed >= RefillFraction * st.peak:
      st.refill_count += 1;  reset consumed;  st.drawn_down = false   # a refill
  st.peak = max(st.peak, displayed)
  st.consumed += volume;  if st.consumed >= st.peak: st.drawn_down = true
  if not st.fired
     and st.refill_count >= MinRefill
     and st.total_absorbed >= MinAbsVol
     and st.peak >= MinClip:
        FIRE ICEBERG @ P, SIDE = BID|ASK, clip = st.peak, refills = st.refill_count
trade tape per-level tracking eaten down reloaded gates pass ✶ star on Chart F

Two signatures, one delegated

Signature B (refill) is what this study draws. It works on raw unbundled tape, so it is robust to trade-combining settings.

Signature A (one oversized print) is not in this DLL. The live API hands a custom study individual unbundled trades and (per SC Engineering board #98480) no setting combines them for a study, so an oversized-single-print rule cannot run live without self-combining. It is delegated to SC's native Large Volume Trade Indicator (study ID 390), which Pierre already runs on Chart F.

The attribution matrix (where the edge would live)

Side turns "a trade touched an iceberg" into four clean cases. Whether your entry was on the same side as the absorber (respected) or against it (fought) is the read.

Your entryIceberg encounteredVerdictReading
LONGBID iceberg below entryRespectedBuyers accumulating underneath you
LONGASK iceberg above entryFoughtSellers capping you, target probably will not print
SHORTASK iceberg above entryRespectedSellers distributing overhead
SHORTBID iceberg below entryFoughtBuyers absorbing underneath, target probably will not print

How the edge gets proven

After 2 to 4 weeks of production data, the P&L gap between RESPECTED and FOUGHT trades is the indicator's actual edge. If the gap is meaningful, this becomes a live entry filter (or at least a Lessons-Learned tag). If it does not separate, it gets deprecated, honestly.

Notion attribution columns (Iceberg_BID_Levels, Iceberg_ASK_Levels) are a later phase. The shipped product is the live overlay.

Setup

  • Add the study scsf_GDO_Iceberg_Refill (from GDO_Signals.dll, SCDLLName("GDO Signals")) to your Chart F (NQ tape).
  • Confirm the build loaded: a DeployVerify_GDO_<date>.csv heartbeat writes once on chart load with the version tag and monitored Inputs.
  • Tune the 5 Inputs live if the star count is too busy or too quiet (see the Inputs tab).
  • It is independent of TheBridge, Notion, and your account. Pure read-only, no trade interaction.

Why no MBO / Pkg 12

An earlier design used market-by-order depth (Pkg 12) and OrderID persistence. It was built, then abandoned: the depth feed only surfaces deep-book qty ≥ 3 orders and flickers them with no trade semantics, which produced a phantom signal (a bid above a candle high). Icebergs are a trade phenomenon, so detection moved to the trade tape. No Pkg 12 needed.

What it does NOT do

No stop-cluster detection. That is Bookmap's proprietary moat (self-reported ~80% accuracy), and SC engineering openly calls third-party stop-detection claims unreliable. If you want the stop signal, run Bookmap as a second screen; this indicator does not try to clone an inference layer with weak ground truth.