Asked by @wikedPNL in the MoonTerminal chat, with a screenshot of the caption block over the candles:
NFLX-USDT
Fusdt 01
Binance Futures
His words: "предлагаю добавить поле с человеческим названием тикера под парой, не все названия тикеров помнишь и есть неочевидные" — he wants a second line under the pair:
NFLX-USDT
Netflix
Fusdt 01
Binance Futures
Where it lands
That block is the Instrument caption preset — Coin, Core, Venue in LabelZone::ZoneTop (moon-core/src/config/chart_labels/presets.rs). Captions are already a user-composed catalogue of fields (Настройки → Подписи чарта, + Подпись, ChartLabelField in chart_labels/fields.rs), so the ask is one new field in that catalogue, which the user then places wherever he wants. No new layout work: rows already auto-stack.
What is missing
Nothing in the terminal holds a human-readable name for an instrument. The catalog record carries coin, market_currency_canonic, quote, base_currency, leading1000/k1000 and the token tags — no name, no description, no full name.
The wire does carry market_currency_long and the terminal reads it, but it is not usable as a name: the field lands only in the coin_naming diagnostic log channel, and the cores fill it with the ticker itself on every venue (the only value that is not a ticker is a HyperLiquid predict market's UI slug). Making the cores fill it with a real name is a core-side decision — noting it only so nobody assumes the name is already on the wire.
Why it matters now, and not only for stocks
Binance Futures currently lists 163 TradFi contracts / 162 distinct tickers (underlyingType: EQUITY, contractType: TRADIFI_PERPETUAL) — AAPL, NFLX, TSLA, and also ETFs and leveraged ETFs: SPY, QQQ, SOXL, TQQQ, UVXY. A trader reads BTC at a glance, but CRWV, LYTE, KORU or AGPU on a chart is a guess. The same is true of unfamiliar crypto tickers.
The terminal already knows an instrument is TradFi: the core sends the TradFi tag (bit 11 of the token-tag mask), and the Теги монеты caption prints it. So the chart can already say "this is a stock" — it just cannot say which one.
Where the name can come from (probed live today, public endpoints, no keys)
- Gate —
GET /api/v4/spot/currencies: 5600 rows, every one carries name, and stock rows are marked category: ["stocks"]. Covers 158 of Binance's 162 TradFi tickers (misses BBX, FWDI, LYTE, TQQQ) and 628 of its 655 crypto tickers — the 27 misses are all multiplier spellings (1000PEPE, 1MBABYDOGE), which the catalog already resolves through market_currency_canonic. Samples: NFLX → Netflix, SPY → SPDR S&P 500 ETF Trust, BTC → Bitcoin.
- Bybit —
GET /v5/market/instruments-info?category=linear: fullName is filled for its 194 stock symbols (NFLXUSDT → Netflix) and empty for crypto.
- Binance — nothing.
exchangeInfo carries only underlyingType/underlyingSubType, and the public asset directory (bapi/asset/v2/public/asset/asset/get-all-asset) does not list equity tickers at all.
So the lookup must be by ticker, from a directory, not from the venue the chart happens to sit on — which matters, because the venue in the request is exactly the one that has no names. The terminal already fetches public venue REST without keys (valuation rate providers, trade replay), so the mechanism is not new: one snapshot per session, cached by ticker, refreshed lazily.
Suggested shape
- New
ChartLabelField (instrument_name), resolving the name for display_coin() / canonic.
- Prints nothing when the directory has no row — the same "print nothing rather than guess" rule
Quote and SessionProfit already follow. A wrong company name on a chart is worse than no name.
- Available in the catalogue for any row; whether it also joins the
Instrument preset by default is a taste call for the team.
MoonBot parity
This is new behaviour, not a parity fix. MoonBot's chart caption prints the market name only. It does collect ticker → full name (CoinsLongNames, filled from Bybit/BitGet/HyperLiquid site APIs and CoinMarketCap), but uses it solely to pick coin logos, and it does not cover stock tickers. The one name a MoonBot chart shows is the user's own per-coin comment, typed by hand.
Asked by @wikedPNL in the MoonTerminal chat, with a screenshot of the caption block over the candles:
His words: "предлагаю добавить поле с человеческим названием тикера под парой, не все названия тикеров помнишь и есть неочевидные" — he wants a second line under the pair:
Where it lands
That block is the
Instrumentcaption preset —Coin,Core,VenueinLabelZone::ZoneTop(moon-core/src/config/chart_labels/presets.rs). Captions are already a user-composed catalogue of fields (Настройки → Подписи чарта,+ Подпись,ChartLabelFieldinchart_labels/fields.rs), so the ask is one new field in that catalogue, which the user then places wherever he wants. No new layout work: rows already auto-stack.What is missing
Nothing in the terminal holds a human-readable name for an instrument. The catalog record carries
coin,market_currency_canonic,quote,base_currency,leading1000/k1000and the token tags — no name, no description, no full name.The wire does carry
market_currency_longand the terminal reads it, but it is not usable as a name: the field lands only in thecoin_namingdiagnostic log channel, and the cores fill it with the ticker itself on every venue (the only value that is not a ticker is a HyperLiquid predict market's UI slug). Making the cores fill it with a real name is a core-side decision — noting it only so nobody assumes the name is already on the wire.Why it matters now, and not only for stocks
Binance Futures currently lists 163 TradFi contracts / 162 distinct tickers (
underlyingType: EQUITY,contractType: TRADIFI_PERPETUAL) — AAPL, NFLX, TSLA, and also ETFs and leveraged ETFs: SPY, QQQ, SOXL, TQQQ, UVXY. A trader readsBTCat a glance, butCRWV,LYTE,KORUorAGPUon a chart is a guess. The same is true of unfamiliar crypto tickers.The terminal already knows an instrument is TradFi: the core sends the
TradFitag (bit 11 of the token-tag mask), and theТеги монетыcaption prints it. So the chart can already say "this is a stock" — it just cannot say which one.Where the name can come from (probed live today, public endpoints, no keys)
GET /api/v4/spot/currencies: 5600 rows, every one carriesname, and stock rows are markedcategory: ["stocks"]. Covers 158 of Binance's 162 TradFi tickers (missesBBX,FWDI,LYTE,TQQQ) and 628 of its 655 crypto tickers — the 27 misses are all multiplier spellings (1000PEPE,1MBABYDOGE), which the catalog already resolves throughmarket_currency_canonic. Samples:NFLX → Netflix,SPY → SPDR S&P 500 ETF Trust,BTC → Bitcoin.GET /v5/market/instruments-info?category=linear:fullNameis filled for its 194 stock symbols (NFLXUSDT → Netflix) and empty for crypto.exchangeInfocarries onlyunderlyingType/underlyingSubType, and the public asset directory (bapi/asset/v2/public/asset/asset/get-all-asset) does not list equity tickers at all.So the lookup must be by ticker, from a directory, not from the venue the chart happens to sit on — which matters, because the venue in the request is exactly the one that has no names. The terminal already fetches public venue REST without keys (valuation rate providers, trade replay), so the mechanism is not new: one snapshot per session, cached by ticker, refreshed lazily.
Suggested shape
ChartLabelField(instrument_name), resolving the name fordisplay_coin()/ canonic.QuoteandSessionProfitalready follow. A wrong company name on a chart is worse than no name.Instrumentpreset by default is a taste call for the team.MoonBot parity
This is new behaviour, not a parity fix. MoonBot's chart caption prints the market name only. It does collect ticker → full name (
CoinsLongNames, filled from Bybit/BitGet/HyperLiquid site APIs and CoinMarketCap), but uses it solely to pick coin logos, and it does not cover stock tickers. The one name a MoonBot chart shows is the user's own per-coin comment, typed by hand.