Back

Documentation

A complete account of how a standing order becomes a held position: the mathematics that sets the target, the measurements applied to it, where every number comes from, and what the historical evidence does and does not support.

Overview

Metacentre is an asset manager agent for tokenized stocks on Robinhood Chain. A standing order written in plain English becomes a set of assets, a risk level, and any proportions stated explicitly. From that the agent computes target weights, measures the risk those weights carry, compares the result against what the order asked for, and returns the trades that close the gap between target and holdings.

The name is a term from naval architecture. The metacentre is the point that decides whether a hull rights itself after a wave or keeps going over. It has nothing to do with speed and everything to do with what happens when conditions turn.

Assets remain in the user's wallet and every trade is signed by the user. The agent proposes; it cannot act alone.

Standing orders

An order is ordinary language. It is translated into a working instruction under fixed rules, and those rules matter more than the translation itself.

  • Named assets are never dropped. Every asset the user names and that is tradable appears in the parsed order.
  • Unrequested assets are never added. Naming specific companies restricts the agent to those companies. Only a theme, such as technology, permits selection across the tradable set.
  • Stated percentages are used as given. A proportion stated explicitly becomes the target directly. The optimizer is not consulted for that allocation, because overriding an explicit instruction with a computed one and then reporting success would be misleading.
  • Risk wording is anchored, not guessed. Careful, cautious, defensive and similar wording map to 0.15 to 0.3. Balanced and moderate map to 0.45 to 0.55. Growth-oriented maps to 0.65 to 0.75. Aggressive and maximum growth map to 0.85 to 1.0. An order with no risk wording at all takes 0.5.
  • Differences are reported. Where a computed target departs from what the order asked for, both figures are shown alongside each other with the reason. A match is never reported that did not happen.

The optimization model

Where an order states no explicit weights, allocation is a quantitative question with a precise answer. For a portfolio of n stocks with weight vector w, expected return vector mu, and return covariance matrix Sigma, the portfolio's expected return and variance are:

E[Rp]  =  wμ\mathbb{E}[R_p] \;=\; \mathbf{w}^{\top}\boldsymbol{\mu}
Var(Rp)  =  wΣw\operatorname{Var}(R_p) \;=\; \mathbf{w}^{\top}\boldsymbol{\Sigma}\,\mathbf{w}

Metacentre selects weights by solving the risk-adjusted objective, where the risk-aversion parameter lambda follows from the order's risk level:

maxw    wμ    λ2wΣw\max_{\mathbf{w}}\;\; \mathbf{w}^{\top}\boldsymbol{\mu}\;-\;\frac{\lambda}{2}\,\mathbf{w}^{\top}\boldsymbol{\Sigma}\,\mathbf{w}
subject toiwi=1,0wic\text{subject to}\quad \sum_{i} w_i = 1,\qquad 0 \le w_i \le c

A high value of lambda penalizes variance heavily and produces a conservative, low-volatility mix; a low value favors expected return and produces an aggressive mix. Sweeping lambda traces the entire efficient frontier. The problem is solved by projected gradient ascent, projecting each iterate onto the constraint set using an exact simplex projection.

Expected returns

Expected returns are estimated from multi-year daily price history of the underlying equities. Raw historical means are noisy, and unconstrained optimization amplifies that noise into extreme, unstable weights, a failure mode known as error maximization. Metacentre counters it by shrinking each stock's estimated mean toward the cross-sectional average, in the spirit of the James-Stein estimator:

μ^i  =  (1δ)μi  +  δμˉ\hat{\mu}_i \;=\; (1-\delta)\,\mu_i \;+\; \delta\,\bar{\mu}

where mu_i is the sample mean for stock i, mu-bar is the average across all selected stocks, and the intensity delta lies in the interval from 0 to 1. This pulls unreliable individual estimates toward a stable common value, materially improving out-of-sample behavior.

Risk and covariance

Risk is captured by the covariance matrix of returns, which encodes both how volatile each stock is and how the stocks move together. The sample covariance is:

Σij  =  1T1t=1T(ritrˉi)(rjtrˉj)\Sigma_{ij} \;=\; \frac{1}{T-1}\sum_{t=1}^{T}\left(r_{it}-\bar{r}_i\right)\left(r_{jt}-\bar{r}_j\right)

Sample covariance estimated from limited data is ill-conditioned and overstates spurious correlations. Metacentre applies shrinkage toward a diagonal target, damping the off-diagonal terms:

Σ^  =  (1α)Σ  +  αD\hat{\boldsymbol{\Sigma}} \;=\; (1-\alpha)\,\boldsymbol{\Sigma} \;+\; \alpha\,\mathbf{D}

where D retains the diagonal of individual variances and the intensity alpha lies between 0 and 1. The result is a better-conditioned matrix that yields stable, sensible weights rather than ones driven by noise in the correlations.

The efficient frontier

The efficient frontier is the set of portfolios offering the highest expected return at each level of risk. Every point on it solves the objective above for a particular lambda. The risk level carried by the standing order selects a single point along it, and the target weights are that point's coordinates.

A related construction is the capital market line, drawn from the risk-free rate as a tangent to the frontier. Its slope is the highest Sharpe ratio attainable from the available assets, and a portfolio's position relative to that line indicates how efficiently it converts risk into return.

Constraints

The position cap adapts both to how many stocks are selected and to the risk level in the order, where rho is that risk level:

c  =  max ⁣(1.5n,  0.30+0.30ρ)c \;=\; \max\!\left(\frac{1.5}{n},\; 0.30 + 0.30\,\rho\right)
  • Long-only, fully invested. Weights are non-negative and sum to one. No shorting or leverage.
  • Position cap. Each weight is capped at c to force diversification, so no single stock dominates even at the aggressive end of the frontier.
  • Zero weights are expected. A selected stock can receive a weight of zero when it does not improve the portfolio at the chosen risk level, for example when it is dominated by, or highly correlated with, stocks already held. This is the optimizer working correctly, not a stock being dropped in error. Assets that receive nothing are shown struck through rather than hidden.

Market analysis

Each holding is described by a set of standard indicators computed on the underlying stock's daily closes.

  • Trend. Price relative to the 200-day simple moving average, and the 20-day exponential average relative to the 50-day simple average. Both above is an uptrend, both below a downtrend, anything else mixed.
  • Momentum. MACD with periods 12, 26 and 9, read through the sign of its histogram.
  • Extension. RSI over 14 periods using Wilder's smoothing. Above 70 is stretched, below 30 is oversold.
  • Position in range. Bollinger bands at 20 periods and two standard deviations.
  • Volatility. Average true range over 14 periods, Wilder-smoothed.

Stop and target levels are derived from each asset's own average true range rather than fixed percentages, so they scale with how much that asset actually moves:

stop  =  P2ATR,target  =  P+3ATR\text{stop} \;=\; P - 2\,\text{ATR}, \qquad \text{target} \;=\; P + 3\,\text{ATR}

Both are withheld where the trend has broken. Levels for managing a long position alongside a reading that says the trend has failed would contradict each other, so only the volatility figure is shown in that case.

Risk measurement

The target composition is measured over a trailing window using the metrics a professional manager reports. These describe the character of a set of weights across a past period. They are not the realised performance of any particular wallet, which may have held those weights for minutes.

The Sharpe ratio is excess return over the risk-free rate per unit of total volatility:

S  =  E[Rp]RfσpS \;=\; \frac{\mathbb{E}[R_p] - R_f}{\sigma_p}

The Sortino ratio replaces total volatility with downside deviation, on the reasoning that upward movement is not a risk. The denominator divides by the total number of observations rather than the count of losing days:

σd  =  1Tt=1Tmin ⁣(0,  rtRf)2\sigma_d \;=\; \sqrt{\frac{1}{T}\sum_{t=1}^{T}\min\!\left(0,\; r_t - R_f\right)^2}

Maximum drawdown is the worst peak-to-trough decline in the window, and is the most directly interpretable of these figures: a 30 percent drawdown means an account was at some point worth 70 percent of its earlier high.

MDD  =  maxt  maxstVsVtmaxstVs\text{MDD} \;=\; \max_{t}\; \frac{\max_{s \le t} V_s - V_t}{\max_{s \le t} V_s}

Beta and alpha follow from the capital asset pricing model, which holds that an asset's expected return should be the risk-free rate plus a premium proportional to its sensitivity to the market. Beta is that sensitivity:

β  =  Cov(Rp,Rm)Var(Rm)\beta \;=\; \frac{\operatorname{Cov}(R_p, R_m)}{\operatorname{Var}(R_m)}

A beta of 1 moves with the market, above 1 amplifies it, below 1 dampens it. Plotting expected return against beta gives the security market line, on which every asset should lie if the model held exactly. Jensen's alpha is the vertical distance from that line, the return earned beyond what the beta explains:

α  =  Rp    [Rf+β(RmRf)]\alpha \;=\; R_p \;-\; \left[R_f + \beta\left(R_m - R_f\right)\right]

Positive alpha means the composition returned more than its market sensitivity accounts for. It is a description of a past window, not a property that persists.

An absolute volatility band from 1 to 7 is also reported, using the thresholds applied in European fund disclosures. Equity-only portfolios sit at 6 or 7, which is itself worth stating plainly.

Risk fit and adjustment

An order states an intended risk level, but nothing in the optimization guarantees the resulting composition carries that risk. A cautious instruction naming only high-volatility assets produces a high-volatility portfolio. The agent checks for that mismatch and says so.

Beta is the test rather than the Sharpe ratio. Across measured compositions, beta separated a broad-market holding at 1.00 from concentrated technology at 1.32 from an aggressive mix at 2.19, while the Sharpe ratio ran counter to intuition: the most aggressive mix scored the highest Sharpe. The Sharpe ratio measures efficiency, not how much risk is being carried.

The permitted beta scales with the stated risk level, with a tolerance applied because beta estimated over a few hundred observations carries real error and a hairline exceedance is noise rather than a finding:

βmax  =  (0.85+2.0ρ)×1.1\beta_{\max} \;=\; \left(0.85 + 2.0\,\rho\right)\times 1.1

where rho is the risk level from the order. Where the check fails, the agent searches for a blend that clears it, scaling the named holdings down proportionally to make room for a broad-market position so their sizes relative to each other stay exactly as the order asked. Each candidate blend is measured on the same historical window rather than estimated, and the smallest blend that resolves the mismatch is the one offered, together with the figures it would actually have delivered.

Where no blend within reach resolves it, the strongest available is offered with an explicit statement that it falls short. A request naming only volatile assets cannot be made cautious by reweighting alone, and saying so is more useful than silence.

Data sources

Every figure has a stated origin.

  • Indicators and risk metrics are computed on daily open, high, low, close and volume for the underlying listed stock, retrieved from Yahoo Finance. Tokenized stocks track their underlying, so the underlying's history is the correct basis for measuring trend and volatility. The correspondence is close in practice: at the time Palantir was added to the tradable set, the on-chain sell quote was 124.41 USDG against 124.57 for the listed stock, a difference of 0.13 percent.
  • Portfolio valuation and holdings come from the chain itself. Balances are read directly, and each position is valued at the live realizable sell quote from the Uniswap v4 pools, not at a mark price.
  • The risk-free rate is the yield on the 13-week United States Treasury bill, the standard benchmark for Sharpe and Sortino calculations, retrieved daily and cached for an hour. If the feed is unavailable a stated constant is used rather than silently substituting zero.
  • The market proxy for beta and alpha is the S&P 500 ETF over the same window as the portfolio.

What the backtests show

The trend logic behind the market analysis was tested before being offered, on real price history, with a simulation that uses only data available on each day and charges 0.3 percent in fees plus 0.2 percent in slippage per trade. The findings are stated here in full, including the unflattering ones.

Across ten assets over a two-year rising market, a trend-following approach returned 31.7 percent on average against 183.6 percent for simply holding. In a rising market, an approach that exits on weakness misses the recovery and trails badly.

Across nine assets through the 2022 decline, the same approach returned negative 10.7 percent against negative 25.0 percent for holding, and held an average maximum drawdown of 13.9 percent against 47.5 percent. The value is capital protection when markets fall, not outperformance when they rise.

Adding indicators made results worse rather than better. Trend alone produced the best average Sharpe ratio at 0.22; adding MACD confirmation lowered it to negative 0.34, and adding an RSI filter as well lowered it to negative 0.45. More signals produced more false ones.

This is why the market analysis is presented as context rather than as trade instructions, and why the readings are labelled as trend states rather than as buy and sell signals. Historical results do not predict future performance, and no allocation method removes the risk of loss.

Execution

Purchases and sales route through the Uniswap v4 Universal Router on Robinhood Chain. Each leg is an exact-input swap carrying a minimum-output constraint, where s is the slippage tolerance:

amountOut    amountOutMin  =  quote×(1s)\text{amountOut} \;\ge\; \text{amountOutMin} \;=\; \text{quote}\,\times\,(1-s)

This bounds price impact per leg; if a pool cannot honor the minimum, that leg reverts and no funds are spent on it. A rebalance runs sells first, and the USDG they realise funds the buys, so no additional capital is required. Sell sizes are capped at the wallet's actual on-chain balance, because sizing computed in floating point can round a sell of an entire position one unit above what is held and cause the transfer to fail.

Trade sizes follow directly from the gap between target and actual weights. The allocation is never recomputed at execution time, so the trades signed are the trades shown.

Custody and approvals

Metacentre holds no user assets. Funds move directly between the user's wallet and on-chain liquidity. Before a first trade the user grants two standard approvals: an ERC-20 approval of the input token to the Permit2 contract, and a Permit2 allowance to the Universal Router. Both authorizations are to public infrastructure, never to Metacentre. No Metacentre contract sits in the path of user funds.

The agent in chat

The agent can be reached from Telegram as well as from this site. A dashboard reports a conclusion; a conversation allows it to be questioned, which is where an order is usually settled: what a composition weighs out to, why one asset carries more weight than another, and what a different instruction would carry instead.

A chat is linked to a wallet by a code minted in the chat and redeemed here behind a wallet signature. The link is therefore created by the wallet, never asserted from the chat side, and either side can cut it: the wallet from the dashboard, the chat with a command.

What the link permits is bounded at the server rather than by the wording of the agent. Nine read endpoints accept it. No endpoint that produces calldata or records an execution accepts it at all, so a fault in the chat layer cannot move funds however it behaves.

  • Reading is immediate. Holdings, the standing order, drift, risk measurement, the trades a rebalance would make, market analysis, and the reward schedule.
  • A standing order takes effect when set. It changes what the agent aims for and moves nothing, so it needs no transaction. The dashboard shows when the order last changed and whether it came from chat, so a change nobody made is visible.
  • Anything that moves assets becomes an order to confirm. Opening a position, rebalancing, and closing are placed in chat and appear in the dashboard once the wallet connects, where they are confirmed and signed. Nothing moves on the strength of a message.

Figures in a reply come from the same endpoints this site calls. The agent is given no way to compute one itself, including the per-asset estimates that decide the weights, so an explanation of why a weight came out as it did is drawn from the numbers the optimizer solved against rather than composed to sound convincing.

Two limits are enforced in code rather than asked for in wording. An order cannot be placed before the composition it produces has been shown, and an amount to invest is never chosen by the agent. A rule that lives only in an instruction competes with every other instruction and quietly loses.

Strategy

The portfolio engine answers how a holding should be composed. Strategy answers a different question: whether anything on this chain is worth entering now. It shares no code, no database and no process with the portfolio engine, and it never holds or moves an asset. It publishes an entry, a stop and a target, and records what happened afterwards.

What is considered at all

Pools are listed from an index that reports live liquidity, volume and transaction counts per network. Each candidate is then checked against the chain, because one property matters more than any market figure and cannot be read from market data.

A token launched through a pons factory carries a protocol guarantee: the launch window lasts two blocks and restricts only buying, and selling is never restricted afterwards. Membership is verified by calling getLaunchedToken on the factory, which returns whether that factory created the token. A honeypot is therefore not unlikely but impossible, and no ratio of buys to sells can establish that. Supply is fixed at one billion with no mint function, and liquidity is locked at launch.

Every token launched this way is also self-describing on chain, so a market cap can be computed from price and the fixed supply when an index reports none.

The measures

Two ratios are computed for every token on every scan. Each is expressed against that token's own recent pace rather than an absolute, so a quiet token and a busy one are judged on the same scale.

Flow acceleration compares the last hour of volume against the average hour of the day:

accel  =  V1hV24h/24\text{accel} \;=\; \frac{V_{1h}}{V_{24h}/24}

Trade size acceleration compares the average ticket in the last hour against the average ticket over the day, where n is the number of transactions:

sizeAccel  =  V1h/n1hV24h/n24h\text{sizeAccel} \;=\; \frac{V_{1h}/n_{1h}}{V_{24h}/n_{24h}}

A reading above one means larger trades are arriving than is normal for that token.

How a threshold is arrived at

No threshold here was chosen because it sounded reasonable. Each is measured, and the measurement is repeated hourly.

Every scan is paired with the same token roughly one hour later, and the forward return is the change between them. Observations are reduced to one per token per clock hour, because a scanner running every ten minutes otherwise produces six rows whose forward windows almost entirely overlap: the same situation counted six times, inflating the sample while adding nothing.

The relationship between a measure and the next hour is then tested by rank correlation, which uses every observation rather than dividing them into buckets, and is unaffected by extreme values:

ρ  =  corr(rank(x),  rank(y))\rho \;=\; \text{corr}\big(\,\text{rank}(x),\; \text{rank}(y)\,\big)

Why the ordinary significance test is not used

A conventional p-value assumes observations are independent. They are not. When the market falls, every token falls together, so a dozen rows carry closer to one observation's worth of information and the p-value comes back far smaller than it should.

Significance is established instead by a block permutation test. Forward returns are shuffled between whole hours, with every token inside an hour kept together, five thousand times. That preserves market-wide moves and destroys only the link between a token's own reading and its own next hour, which is the thing being tested. The p-value is the share of shuffles producing a correlation at least as strong as the observed one:

p  =  1+#{ρshuffledρobserved}1+Npermutationsp \;=\; \frac{1 + \#\{\,|\rho_{\text{shuffled}}| \,\geq\, |\rho_{\text{observed}}|\,\}}{1 + N_{\text{permutations}}}

A measure that reads significant under the ordinary test and not under this one was never measuring the token. It was measuring the market.

Three further corrections

  • Multiple testing. Eight measures tested at the five percent level carry roughly a one in three chance that at least one clears by luck, since the probability that none does is 0.95 raised to the eighth power. The Holm-Bonferroni procedure orders the p-values from smallest to largest and compares each against a threshold that loosens down the list, so the strongest-looking result faces the strictest bar:
p(i)  <  αmi+1i=1,,mp_{(i)} \;<\; \frac{\alpha}{m - i + 1} \qquad i = 1, \dots, m

with m the number of measures tested and alpha the five percent level. Testing stops at the first failure, and everything below it fails with it. This controls the chance of any false positive across the whole set rather than for each measure in isolation, without the blanket severity of dividing alpha by m for all of them.

  • Out of sample. A cut point chosen by looking at where a relationship changes sign, then tested on the same rows, is fitted to its own sample. The hours are split: the earlier half proposes, the later half judges. A measure whose correlation does not keep its sign on hours that were not used to find it is not supported.
  • Regime coverage. Twelve hours of one falling market is one observation of a market, however many rows it contains. Hours are classified by whether most tokens rose in the hour that followed, and a measure is only supported once both kinds have been seen.

The engine checks itself before it acts

The validation runs hourly and writes its verdict down. Before emitting anything, the signal engine reads that verdict, and stays silent while any measure a gate depends on is unsupported. Nothing needs a person to switch it back on: the moment the evidence arrives, the check passes on its own, and if the evidence later weakens the engine stops again without anyone noticing in time to intervene.

Two measures currently survive all three corrections. Trade size acceleration reads rho -0.360 at an adjusted p of 0.008, holding at -0.341 out of sample. The six-hour change reads rho -0.498 at an adjusted p of 0.031, holding at -0.475. Both are negative: larger tickets and a longer rise each precede a fall.

Four measures were gates and are no longer. Flow acceleration and the one-hour change both cleared a plain significance test and both failed the multiple-testing correction, at adjusted p of 0.615 and 0.781. Liquidity failed at 1.000 and now serves as an execution floor rather than a forecast, since a pool too thin to leave is a limit on size and not a statement about price.

The gates

All must pass. A signal is issued only when every one is satisfied at the same scan.

  • Sellable. Verified against a pons factory on chain, and graduated.
  • Liquidity. Deep enough that a position can be left without moving the price against itself.
  • Direction. Six-hour change below zero, with a floor: a token down more than forty percent in an hour is collapsing rather than cheap.
  • Ticket size. Trade size acceleration at or below one.
  • Market. Median one-hour change above zero with at least forty percent of tokens rising. No entry rule is selective enough to beat a market where nothing is going up, so the correct action there is none.

Stop, target and size

Stop distance is set by volatility rather than a fixed percentage, using average true range over fourteen fifteen-minute bars. A twelve percent stop chokes a token that moves forty percent a day and means nothing on one that moves five.

stop=P1.5ATR14target=P+3.0ATR14\text{stop} = P - 1.5\,\text{ATR}_{14} \qquad \text{target} = P + 3.0\,\text{ATR}_{14}

The ratio is two to one, at which the system breaks even at a win rate of one in three. Position size follows from the stop distance, so the amount at risk is the same on every position however wide the stop:

size  =  risk per tradePstop\text{size} \;=\; \frac{\text{risk per trade}}{P - \text{stop}}

and is capped at one percent of pool liquidity, because beyond that the position moves the price it is trying to enter.

The record

Every signal is stored when issued and closed against subsequent bars: stopped, target reached, or expired after twelve hours. Where one bar reaches both the stop and the target, the stop is taken, since the order within a bar cannot be known and the worse outcome is the honest assumption. Peak and trough while open are recorded alongside the result.

Nothing is edited or removed. A record that can be tidied afterwards is not a record, and losses are published on the same terms as gains.

What this is not

The evidence base is small and recent. The corrections above are what make the current readings defensible rather than impressive, and they are strict enough that most measures tested have failed them. A relationship that holds across a few dozen hours may not hold across a few hundred, which is why the validation repeats rather than concluding.

Strategy executes nothing. It holds no key, moves no asset, and takes no position. It publishes a reading and what became of it.

Performance accounting

Profit and loss is reconstructed entirely from on-chain data. Metacentre reads the wallet's historical swaps, identifying purchases (USDG out, stock in) and sales (stock out, USDG in), and applies average-cost accounting. For each stock, cost basis accumulates on purchases; a sale reduces the basis proportionally and books realized profit against the average unit cost:

realized  =  proceeds    costBasisqty×qtySold\text{realized} \;=\; \text{proceeds} \;-\; \frac{\text{costBasis}}{\text{qty}}\,\times\,\text{qtySold}

Current value uses live realizable sell quotes, the amount a holding would return if sold now, rather than a mark price, so the figure reflects what the user could actually obtain. No user data is stored off-chain.

The charts

Seven figures are drawn from the same measurements described above. Each carries a caption stating what it shows in plain words, because a curve nobody can read is decoration.

  • Composition. Each holding twice: what is held now, and what the order targets. The gap between the two is the drift the agent acts on.
  • Portfolio value. Value recomputed for every trading day since the first trade, from what the wallet actually held and that day’s closing prices, with markers where the agent executed.
  • Trade history. Every swap the wallet has made, read from the chain rather than from any record kept here. Purchases above the line, sales below, spaced by sequence rather than by clock so trades minutes apart remain legible.
  • Drawdown. Distance below the running high, day by day. The summary figure is only the deepest point of this curve; the width of each dip shows how long recovery took.
  • Efficient frontier and capital market line. The frontier from the same optimizer that sets the target, and the tangent from the risk-free rate. Where an order states its own percentages the portfolio sits below the curve, and the vertical distance is the return the same risk could have earned.
  • Security market line. Return against beta, with the CAPM line drawn through it. Vertical distance from the line is alpha. Labels are omitted where points crowd, since betas of similar assets cluster near one.
  • Correlation. How closely each pair has moved. This is what explains why reweighting similar holdings barely changes portfolio risk: assets that move together do not offset each other.

Trading costs

Entering and leaving a position pays a fee at each end, and how much depends on where the trade routes. Two venues are quoted for every leg: Uniswap v4 pools on this chain, and Rialto’s proprietary market-maker pools. The larger output wins, so the venue is chosen per leg rather than per asset.

The two sit close on the buy side, within half a percent across every asset both can price, and diverge on the sell. Measured at a hundred dollars, Rialto returned 2.06% more on AMD, 1.96% more on SNDK and 1.55% more on MU, while GOOGL and TSLA came back marginally better through Uniswap. Quoting both and comparing per leg is what captures a split that runs in both directions.

The difference is fee structure rather than depth: at a hundred-dollar order the price impact measured 0.10% or less on every asset tested. Uniswap routing still probes all four fee tiers and takes the best, so its figure falls on its own if a cheaper pool appears. Rialto charges 5 basis points, taken on the USDG side of the trade. Round-trip cost per asset is shown alongside the market analysis, and anything above 1.5% is marked, because rebalancing pays it each time.

Record and reconstruction

Two separate questions are answered from two separate sources, deliberately.

How much is held comes from token movements in and out of the wallet. Swap history recognises only USDG-paired trades, so a sale settled in any other asset would leave that history believing the wallet still holds something it sold. Movements are the chain’s own record: whatever left, left. Checked against on-chain balances, movements reconcile exactly where swap history did not.

How much money went in comes from those USDG-paired trades, which is the one thing they measure correctly. Where a wallet has traded outside USDG, no profit figure is offered at all rather than one derived from mismatched sources.

Executions are recorded only after the chain confirms them. The client sends a transaction hash and nothing else; the server checks on-chain that the transaction exists, succeeded, and came from the wallet claiming it before writing anything, and takes the timestamp from the block rather than the browser.

Dividends

A share of protocol fee income is paid out daily to wallets using the agent. One asset is paid each day, rotating through the tradable set, and which asset falls on which date follows from the date itself, so the schedule is fixed in advance and published rather than announced after the eligible wallets are known.

A wallet takes part in a round when its standing order already holds that day’s asset and its portfolio is worth at least 5 USDG, measured at the live sell quote when the round is taken. Paying an asset outside the standing order would push a portfolio off target and the agent would then propose selling it, charging a trading fee for having been paid. A share worth less than 0.05 USDG is skipped, since sending it would cost more than it carries.

Within a round, the split follows the value of that day’s asset held. Splitting the same capital across many wallets therefore gains nothing, which a flat per-wallet split would not achieve: modelled against a realistic field, one holder splitting into a thousand wallets would capture 98% of a pool under a flat rule.

These payments are made for using the agent, not for holding a token. They are not a claim on profits, not guaranteed, and vary with the fee balance on the day.

The round is taken and then paid five minutes later, so the shares paid are the shares measured at one moment rather than shares recomputed against holdings the payment itself has already moved. A round that has been taken cannot be taken twice, and a payment already recorded cannot be sent again.

Token

$MCEN is required to use the vault rather than paying its holder. Access is granted either by holding a threshold balance, which lasts as long as the balance does, or by a smaller periodic payment for occasional use. A daily snapshot determines which wallets remain entitled, and automation stops when entitlement lapses.

Vault and token gating are in development. Nothing described in this section is live.

Contracts

Metacentre builds on public infrastructure on Robinhood Chain (chain ID 4663). The tokenized stocks below are issued on-chain; Metacentre reads and trades them but does not issue them. Every address links to the chain explorer for independent verification.

Inclusion requires three checks, because symbol alone proves nothing. Around fifty distinct tokens on this chain claim the QQQ symbol. A token is added only if the issuer naming matches the official pattern, a live sell quote exists, and that quote tracks the listed stock's price.

Tokenized stocks

SymbolCompanyAddress
AAPLApple0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9
AMDAdvanced Micro Devices0x86923f96303D656E4aa86D9d42D1e57ad2023fdC
AMZNAmazon0x12f190a9F9d7D37a250758b26824B97CE941bF54
GMEGameStop0x1b0e319c6a659f002271b69db8a7df2f911c153e
GOOGLAlphabet0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3
METAMeta Platforms0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35
MSFTMicrosoft0xe93237C50D904957Cf27E7B1133b510C669c2e74
MUMicron Technology0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD
NVDANVIDIA0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC
PLTRPalantir0x894E1EC2D74FFE5AEF8Dc8A9e84686acCB964F2A
SNDKSanDisk0xB90A19fF0Af67f7779afF50A882A9CfF42446400
SPCXSpaceX0x4a0E65A3EcceC6dBe60AE065F2e7bb85Fae35eEa
SPYS&P 500 ETF0x117cc2133c37B721F49dE2A7a74833232B3B4C0C
TSLATesla0x322F0929c4625eD5bAd873c95208D54E1c003b2d
BEBloom Energy0x822cc93ffd030293e9842c30bbd678f530701867
COINCoinbase0x6330d8c3178a418788df01a47479c0ce7ccf450b
CRWVCoreWeave0x5f10a1c971b69e47e059e1dc91901b59b3fb49c3
INTCIntel0xc72b96e0e48ecd4dc75e1e45396e26300bc39681
ORCLOracle0xb0992820e760d836549ba69bc7598b4af75dee03
QQQInvesco QQQ0xd5f3879160bc7c32ebb4dc785f8a4f505888de68
SGOViShares 0-3 Month Treasury Bond ETF0x92fd66527192e3e61d4ddd13322aa222de86f9b5
SLViShares Silver Trust0x411efb0e7f985935daec3d4c3ebaea0d0ad7d89f
USARUSA Rare Earth0xd917b029c761d264c6a312bbbcda868658ef86a6
USOUnited States Oil Fund0xa30fa36db767ad9ed3f7a60fc79526fb4d56d344
ASMLASML Holding NV0x47f93d52cbec7c6d2cfc080e154002370a60daea
CCLCarnival Corporation0x9651342cea770ae9a2969ba2a52611523146aef9
COSTCostco0x4ea005168d7f09a7a0ba9d1def21a479950e44c2
DELLDell0x941ae714ec6d8130c7b75d67160ca08f1e7d11dd
MSTRStrategy Inc.0xec262a75e413fafd0df80480274532c79d42da09
NFLXNetflix0xe0444ef8bf4ed74f74fd73686e2ddf4c1c5591e8
NUNu0x408c14038a04f7bd235329e26d2bf569ee20e250
RBLXRoblox0xf0c4bf4c582cb3836e98394b1d4e7b7281101be8
RDDTReddit0x05b37fb53a299a1b874a619e1c4c404d52c36f4c
SKHYSK hynix Inc. American Depositary Shares0x84cab63bc87912e71ad199ff14a0ba45de68fef8
TSMTaiwan Semiconductor Manufacturing0x58ffe4a942d3885baa22d7520691f611ef09e7aa
UPSUPS0xf23250dac154d05bb671cb0d0ebef3c635c79ce2
XLKState Street Technology Select Sector SPDR ETF0x15cd20759ce7f3285c29a319de2d1a2e098c6f43

Contracts Metacentre interacts with

These are the on-chain contracts called directly when a position is opened, rebalanced or unwound. Every trade settles through them; Metacentre adds no contract of its own between the user and the market.

ContractRoleAddress
USDGSettlement stablecoin every position is priced and funded in0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
Universal Router (v2.1.1)Executes the swaps that acquire or unwind a position, on the user's behalf0x8876789976decbfcbbbe364623c63652db8c0904
V4 QuoterPrices each leg before execution so allocations reflect live liquidity0x8dc178efb8111bb0973dd9d722ebeff267c98f94
Permit2Authorizes the router to move the user's tokens, without granting custody0x000000000022D473030F116dDEE9F6B43aC78BA3
ContractRoleAddress
Uniswap v4 PoolManagerHolds the pools and liquidity all trades execute against0x8366a39cc670b4001a1121b8f6a443a643e40951

Metacentre token

TokenSymbolAddress
MetacentreMCEN0x2625a3Af2b73A9336266231C15aC855114b6169F

MCEN carries no claim on revenue and is not required for anything described above; allocation, analysis, and execution run without it. Its role is vault access, which is still in development. The vault contract will be listed here with source references before it holds anything.

Roadmap

Managed allocation, market analysis, and risk measurement all run today. One layer follows them:

  • Vault. Deposit once and let the agent stand the watch, so allocation and rebalancing run without a signature at every step. Contracts will be public before they hold anything.
  • Broader coverage. Coverage follows liquidity rather than choice. Thirty-six issuer-verified stock tokens on this chain have no Uniswap pool at all; eleven of those are quotable through Rialto and ten are included on that basis, the eleventh carrying too little price history for the risk estimates to mean anything. The rest wait on liquidity appearing at either venue.

Risk disclosure

Tokenized stocks carry market risk. Expected-return figures are estimates derived from historical behavior and are not forecasts or guarantees of future performance. Risk metrics describe a past window and do not bound future losses. On-chain liquidity for some stocks may be limited or absent, which can affect the ability to buy or sell at a given size. Optimization improves the risk-return profile of a composition but does not eliminate the risk of loss. Market analysis is context for the user's own judgement, not advice to trade. Users are solely responsible for their own transactions, wallet security, and custody of assets. Nothing here is investment advice.

Open agent