Mithraeum · Agora

Research bots

Handing the search to a machine, without handing it anything else

The unattended search used to be a browser tab left open. Someone would arm a cycle, leave the laptop running, and come back to whatever it had found. That worked, and it had three things wrong with it: it died when the tab did, nothing stopped several of them from overwhelming the application at once, and there was no way to tell afterwards which strategies a machine had produced and which a person had.

A research bot is that loop made into a program. It draws a set-up, mines it, runs the survivors through the proving suite, keeps what clears and labels it — then does it again, until its budget runs out or its own rules tell it to stop. The interesting part of building it was not the searching, which already existed. It was working out everything a bot must not be able to do.


Three questions, decided before any of it was written

QuestionThe answer, and why
Who is a bot? Your own account, never a machine account. A user id the application does not recognise resolves to an unlimited tier — it would meter nothing and audit invisibly. A bot acting as you is subject to every limit you are, and its entitlement is re-checked at every stage, so a lapsed licence pauses it.
What can it reach? Sixteen functions are doors: the market-data seams, the live quote stream, six broker calls, the deploy path, both outbound network paths and the three synthetic-data mints. Each one begins by asking whether the caller is a bot, and refuses if it is. Every request a bot makes is marked as using stored data only.
Who wins when both want the machine? You do, always. Every heavy job in the application — fourteen families of them — now passes through one admission point, and a user starting anything pre-empts a bot's job rather than queueing behind it. Measured at three hundredths of a second.

None of those is a setting. A bot cannot be granted a broker connection by configuration, because the refusal is at the door rather than in a policy the door consults — and the doors are checked by a test that reads the functions themselves, so a new provider or broker call that forgets to add one fails the build.


The honesty floor, which nothing can lower

A bot is given a protocol: how much history to hold back, how many trades a result must rest on, what statistic to cut on, how many strategies it may promote, how long it may run. Most of those you choose. Some of them have a floor, and a protocol that asks for less than the floor is not rejected — it is raised to the floor, and told so in its own record.

Above the floor, a bot can also be told to learn — to lean toward the kinds of set-up that have produced survivors before. Every switch in that group is off by default and each one names what it is doing in the bot's own log, because a search that quietly changes its own aim between runs is one whose results cannot be compared to each other.


Whose strategy is it

A machine producing strategies into the same store a person uses is a provenance problem before it is anything else. Every record carries an origin stamped by the one function that writes records, and the consequences of that stamp are deliberate:

RuleWhat it prevents
A bot's survivor is never marked saved Saving is a person's verb. Adopting a bot's strategy is an explicit act, and it is stamped as an adoption.
Caps evict unadopted machine output first A bot filling the store cannot push out work you did by hand.
A running bot's universe is held against edits Eleven separate places that write to a universe refuse while its bot is live, so nobody edits the ground under a running search.
Bot universes are hidden from the listing unless asked for Machine output does not bury your own by volume.

What the first real run actually said

The first bot to run a full life was read back from its own log afterwards, and most of what it produced was wrong in ways that were only visible because the log recorded every decision and its reason. Three of them are worth stating, because they are the argument for keeping such a log at all.

This is the part worth taking from the whole feature. An unattended researcher is not valuable because it works while you sleep. It is valuable because it does exactly what it was told, thousands of times, and thereby makes the flaws in what it was told impossible to miss. Every one of those three defects existed in the manual workflow first. A person running the cycle by hand would have hit all of them and noticed none.


What changed because of it

Each of those findings became a rule, and the rules became the defaults a new bot is deployed with. A stored bot keeps the protocol it was deployed under — changing a default never silently changes what an existing bot is doing.

The funnel asks the market question by defaultdefault

A floor on beating buy-and-hold sits on the cut, and each out-of-sample window is cut on its own question: the real tail on how the strategy did there, a synthetic bear on whether it lost less than simply holding — which is not the same claim as beating the market, and the funnel does not pretend it is.

A tape must be able to certify the searchdefault

The minimum backtest length a result needs grows with the number of trials looked at. A bot refuses a tape too short to certify what it will search for — and says so. Staging the demonstration for this very site, a bot pointed at a six-year synthetic tape refused to start, naming the rule and the numbers; given a twenty-eight-year tape, it ran. The rule was not loosened to make the demonstration work, which is rather the point.

The noise floor stopped costing half the nightefficiency

Measuring the null was more than half of a bot's compute. It now runs across the process pool and is reused wherever the search it measures has not changed — and the cost-stressed twin every candidate carries is derived arithmetically rather than re-run.

Learning credits survivors, not promotionslearning

A lean toward a kind of set-up is earned by strategies that are still standing under the bot's own floors — not by ones it promoted and later culled. And a promotion that would be a copy of one the bot already made, measured by how closely their returns move together, is refused.

A sealed tail, a head window, a bootstrap legproof

The last months of a bot's tape are sealed until its search is done; the oldest months can be held out as a third window; and a bootstrapped continuation joins the synthetic futures a survivor is judged against. The judging rails run on the process pool, with every stamp reproduced exactly as a single-process run would have made it.

Operating one


Watching one

A bot's page shows what it is working on, how far through the current stage it is, and how it is doing — the count of universes tried, survivors kept, what cleared the gauntlet and what the empirical null says about the body of its results rather than its best row. Every number comes from the bot's recorded state; nothing is parsed back out of its log, because a display that re-derives a fact from prose will eventually disagree with the fact.

The funnel is drawn rather than listed — each stage a band on a logarithmic scale, because four hundred candidates narrowing to twelve would otherwise be a sliver — and the bank of what it kept is drawn as a distribution against the noise floor rather than as a leaderboard.

The Mithraeum — a research bot, opened
The research-bots page with the demonstration bot opened after it finished: three tiles — what it was working on, how far along it got with its trial, universe and promotion bars, and how it did with a small family table; the funnel's stage chips; two cycles drawn as small funnels with their counts; an empty survivors section; and the ledger's newest decisions, from the finish and the sealed tail back through each gate.
One bot, at a glance — and a barren one. What it worked on, how far along it got, how it did; the funnel's stages in order, with each cycle drawn as a small funnel; and the ledger of every decision it took and why. This demonstration bot mined two universes on a long synthetic tape and promoted nothing: the vintage gate failed every row it tested, and the ledger says so in as many words, beside the sealed tail it spent on the way out — a median sealed Sharpe of 0.28, with 18 per cent of rows beating buy-and-hold. Its trials line reads 2,000 of 1,200 because a budget stops a bot between universes, never in the middle of one. It ran inside the demonstration instance with no broker and no data provider reachable — by construction, not by setting.

Bots can be paused, resumed, cloned, continued after they have ended, and deleted — and deleting one offers to clean up what it produced rather than leaving orphans behind. What it mined and promoted survives on its own, still labelled.

Nothing on this page is investment advice or a performance claim. A bot produces candidate strategies and evidence about them; it does not produce results, and no figure here is one. An unattended search that promotes a strategy has established that the strategy survived a battery of tests, which is not the same as establishing that it will work. Trading involves risk of loss.

A personal project. Not advice. Nothing for sale.

This site describes a personal engineering project, written and run by one person in their own time and published under the name Mithraeum Agora. There is no company behind it, no team and no other contributor. It is not a product and not a business. Nothing here is for sale — there is no account to open, nothing to buy, no subscription, no waiting list, and no service is being offered or solicited. Sending a message through the note form creates no customer, client or contractual relationship of any kind. The note form on the contact page is the way to reach me, and it is the only one.

Nothing on this site is investment advice, financial advice, tax advice, or a recommendation, solicitation or offer to buy or sell any security or financial instrument. I am not a financial adviser, a broker, an investment manager or a regulated firm, and nothing here should be relied on as though I were. If you are making decisions about money, take advice from someone qualified and regulated to give it.

Figures do appear on this site, inside screenshots, and none of them is a performance claim. Every one is a demonstration instance's own arithmetic over price series the application generated itself — synthetic data, with no real market behind it — shown to illustrate what the tools display. They are hypothetical and simulated: no capital was at risk, no orders were placed, and a result computed over history with the benefit of hindsight carries limitations that live trading does not forgive. Hypothetical results are not indicative of future returns, and past performance — real or simulated — predicts nothing.

No brokerage, market-data vendor or other company is named anywhere on this site, and where a name appeared inside a screenshot it has been redacted out of the image. Nothing here states or implies that any company is associated with this project, endorses it, sponsors it, supplies it or has reviewed it. None is, and none has.

What this site collects. Nothing, unless you write to me. There is no analytics, no tracking, no advertising, and nothing at all is loaded from another domain. If you use the note form it takes the name, address and message you type, stores them privately where only I can read them, and keeps them for up to a year before they are deleted — sooner if you ask, and you do not have to give a reason. Your IP address is not kept. One thing is stored on your own device: the colour theme you pick, remembered by your browser so the site does not change appearance every time you arrive. It is written only when you choose a theme, and it identifies nothing and nobody. The preference itself never leaves your browser, but the screenshots follow it, so the pictures your browser fetches from this site are the ones drawn in that palette. The contact page answers all of this in more detail.

Terms of use. This site is provided as is and as available, with no warranty of any kind, express or implied. It describes software under active development: anything here may be incomplete, out of date or simply wrong, and it may change or disappear without notice. Nothing on it is a contract, a term of service for any product, or a promise that anything described will be built, released or kept running. To the fullest extent the law allows, I accept no liability for any loss or damage arising from use of this site or from reliance on anything it says. Nothing here excludes or limits any liability that cannot lawfully be excluded or limited.

Trading involves risk of loss.