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.
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.
An order is ordinary language. It is translated into a working instruction under fixed rules, and those rules matter more than the translation itself.
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:
Metacentre selects weights by solving the risk-adjusted objective, where the risk-aversion parameter lambda follows from the order's risk level:
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 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:
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 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:
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:
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 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.
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:
Each holding is described by a set of standard indicators computed on the underlying stock's daily closes.
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:
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.
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:
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:
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.
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:
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:
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.
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:
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.
Every figure has a stated origin.
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.
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:
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.
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 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.
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.
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.
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.
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:
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:
A reading above one means larger trades are arriving than is normal for that token.
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:
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:
A measure that reads significant under the ordinary test and not under this one was never measuring the token. It was measuring the market.
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.
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.
All must pass. A signal is issued only when every one is satisfied at the same scan.
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.
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:
and is capped at one percent of pool liquidity, because beyond that the position moves the price it is trying to enter.
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.
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.
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:
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.
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.
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.
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.
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.
$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.
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.
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.
| Contract | Role | Address |
|---|---|---|
| USDG | Settlement stablecoin every position is priced and funded in | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| Universal Router (v2.1.1) | Executes the swaps that acquire or unwind a position, on the user's behalf | 0x8876789976decbfcbbbe364623c63652db8c0904 |
| V4 Quoter | Prices each leg before execution so allocations reflect live liquidity | 0x8dc178efb8111bb0973dd9d722ebeff267c98f94 |
| Permit2 | Authorizes the router to move the user's tokens, without granting custody | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
| Contract | Role | Address |
|---|---|---|
| Uniswap v4 PoolManager | Holds the pools and liquidity all trades execute against | 0x8366a39cc670b4001a1121b8f6a443a643e40951 |
| Token | Symbol | Address |
|---|---|---|
| Metacentre | MCEN | 0x2625a3Af2b73A9336266231C15aC855114b6169F |
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.
Managed allocation, market analysis, and risk measurement all run today. One layer follows them:
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.