About Dokrion
An engine for the strategy you already have.
Dokrion, Vaquero's AI-assisted backtesting system, turns a strategy you describe in plain words into a specification it can run and tests it over crypto spot and perpetual history, with its assumptions printed beside the answer. This page covers how your work is handled, how the system works, what the engine simulates, the rules that keep a run honest, and who builds it.
Release notesThe division
00The division
The idea is yours.
Vaquero is an AI-assisted quantitative research and backtesting platform that helps you implement and historically test trading strategies you define yourself.
The strategy is yours. Dokrion implements it and tests it. That split holds at every step below, and it is the reason the rest of the page can be specific: once the strategy is yours, the only questions left are whether it was implemented faithfully and whether the test was honest.
Vaquero is
- Quantitative research infrastructure for algorithmic traders
- A historical backtesting engine for crypto spot and perpetual markets
- AI-assisted implementation of strategies you define yourself
- Simulation software whose assumptions are printed with every run
Vaquero is not
- An investment adviser
- A signal provider. No picks, no alerts to act on, no model portfolios
- A brokerage or an execution venue. It places no orders and holds no money
- A strategy recommendation engine
- A forecast or a guaranteed-return product
A backtest is a statement about the past. It is not a promise about what comes next.
Confidentiality
Your work is yours. Here is how we handle it.
What happens to a strategy you write here, as the service works today.
01Who can see it
Private unless you post it.
The sentence you write, the design conversation, the specification and code Dokrion builds from it, its parameters and every result are your private work. Other members cannot read them inside the app, and what your strategy says is yours, as the Terms set out.
A community post is different: you chose to publish it, so other members can read it.
02Processing
What has to read it.
To do what you ask, the service has to read the strategy: the server that takes your signed-in request, the job that designs it and the engine that runs it.
For the design step, what you write in the conversation goes to the AI provider named in the Privacy Policy, together with the specification built so far.
03Our access
Who can reach it directly.
The people who operate Vaquero hold credentials that open the database and the servers directly, outside the per-member rules above. Running and repairing the service needs them.
04Deletion
How to remove it.
To have your account deleted, follow the steps on the Data Deletion page.
How it works
From a sentence to a tested result.
No step asks you for code, and no step involves us deciding what you should trade.
01Describe your strategy
Write it the way you would say it.
Plain words, in whatever order they come out. There is no syntax to learn and no menu of blocks to assemble, because what reads it is a language model and not a form.
A description is complete once it answers four things. Everything else Dokrion either asks about or sets and shows you.
- What it tradesThe universe the strategy draws from, however you would name it out loud.
- What opens a positionThe condition that has to be true before anything is bought or sold short.
- What closes itThe condition that takes the position off, including the one that admits the idea was wrong.
- How often it looksThe cadence at which the strategy re-reads the market and rebalances.
02Dokrion implements it
Dokrion writes the specification.
Dokrion reads your description and writes it out as a structured, executable specification: the universe, the conditions that open and close a position, the rebalance cadence, and the execution assumptions the run will be charged under. That document is the thing the engine actually runs, and you can read it before it runs.
Where your description leaves a rule open, Dokrion asks or sets a value and shows it to you before the run. A description that does not say what happens on a tie, or over how many bars an average is taken, has two possible readings and they do not produce the same curve. Guessing silently at that point is how a backtest ends up answering a question nobody asked.
It also refuses. When a request cannot be expressed exactly as written, the run stops and names the reason rather than running something close to it: a cadence finer than the data's own grid, a window shorter than the signal's own lookback, a universe too wide to price. A refusal is one thing to change and try again. A quiet substitution is a curve that answers a different question in the same font.
03Run it through history
The engine runs it over the record.
The specification becomes a sequence of decision instants. At each one the strategy is handed the bars that had closed and the values that were public on that date, and nothing that was revised afterwards. Orders are filled on the bar the decision was made on, and that bar's costs are charged to them.
The engine below sets out what a decision can see and how a fill is priced. The methodology sets out the guards that keep the first of those true.
04Inspect the result
Then take the answer apart.
The equity curve against the benchmark you chose, where the money went, and what the book held on its last day. For a run whose instruments you named, the fills come back with their price and time, and pressing a point on the curve brings back the holdings at that decision with the timestamp of the decision itself.
Beside it the run prints the execution assumptions and the statistics that say how much the Sharpe can be trusted, which the methodology explains. A result kept from an earlier run that held US single names also carries a fixed survivorship deduction on its grade, printed where the grade is shown.
05Execution settings
What you set before a run.
Six settings, and they belong to the run rather than to the account. They are stored with the result, so a run can be re-read later on the terms it was made under instead of on today's.
- Starting capitalWhat the book begins with.
- Round-trip feeWhat a full entry and exit costs in fees.
- Order participationThe largest share of one bar's traded value a single order may take.
- Impact modelHow the market impact of your own order is priced.
- BenchmarkWhat the curve is scored against.
- Cash rateWhat uninvested cash earns while it waits.
The backtesting engine
What the engine actually simulates.
A backtest is only as honest as the market it pretends to trade in. This part sets out what a decision is allowed to see, how an order gets filled, what the run is charged for it, how far back it can go, and what it may read along the way.
01Visibility
What a decision can see.
At every decision instant the strategy is handed a snapshot. It holds history through the last bar that closed, which is the bar before the decision, together with the values that were public on that date. The price the order is about to fill at is not in it.
Revisions do not travel backwards. A figure restated later is never substituted for the one that stood at the time, and no read path falls back to the newer version when the older one is missing. If a figure had not been published yet on that date, the strategy gets nothing and a condition that depends on it reads false, which is what point-in-time means. A series we do not hold at all is a different case, and it is not answered that way: the run is refused and told which window is missing, rather than handed a curve with the condition quietly switched off.
Every instrument carries its own history and every window ends on the same bar, so a listing from last year does not shorten the window of one that has traded for years.
02Execution
How an order is filled.
Orders fill on the bar the decision was made on, which is the bar the strategy could not see.
Size is not free. A single order may take at most a declared share of what that bar actually traded, and the capacity behind that limit is read from the instrument's own traded value, taken as a rolling median of its recent bars, all of which had already closed. It is not one constant chosen once and applied to everything. A constant like that is what lets a small book look infinitely scalable. When an order is larger than the limit allows, the run refuses it rather than shrinking it to fit and reporting the fill anyway.
An order's market impact is charged as a cost of its own. It is priced off the instrument's volatility and the share of that bar's traded value the order takes, following the empirical law measured on roughly eight million institutional metaorders (Bucci, Benzaquen, Lillo and Bouchaud, Physical Review Letters 122, 108302). The largest participation a run may be given is the top of the range where that law has actually been measured; past that point, the charge would be an extrapolation.
Pricing impact off the spread instead would hide a trap: the size a book is allowed to take falls out of the same expression, so widening the spread to be careful about cost widens the size cap at the same time and the caution reverses sign.
03Costs
What a run is charged.
Costs are taken from the bar that traded, not averaged over the window and sprinkled back.
- FeesCharged on the round trip, at the rate the run declares.
- SlippageCharged on what the order crosses, on every fill.
- ImpactPriced off volatility and participation, per order, on the published law.
- FundingCharged on a perpetual position at the settlements that were actually observed. Spot never pays it.
- BorrowCharged on a margin book with a real cash debt. A perpetual book pays for the same leverage through funding, and charging both would count one cost twice.
- CashUninvested cash earns the declared rate while it waits, so sitting out is priced too.
The engine walks the funding settlements it observed and charges each one against the position that was open at that moment. It never lays a regular grid over the window and invents the settlements missing from it, because settlements are sometimes skipped, and a synthesized grid would bill a strategy for carry it never paid or spare it carry it did.
Where a cost has to be assumed rather than measured, the assumption is set wider than anything we have measured, so the error runs against the strategy instead of for it.
04Period
How far back a run may go.
A run gets the history that exists behind every condition it uses, and not one bar more.
Funding is the clearest case. A perpetual's funding history begins with its first settlement, so a condition that reads funding has nothing before that date. A strategy that starts earlier and reads it does not get a curve with that condition quietly switched off until the settlements begin. It gets a refusal that names the window.
The same holds at the other end. A window shorter than the signal's own lookback is refused rather than padded, and a rebalance cadence finer than the data's own grid is refused rather than rounded up to it and reported as though it had run.
05Data
What the engine reads.
The markets a strategy trades, and the series that describe them. A strategy buys and sells crypto spot and perpetual futures. Macro series, funding and calendar patterns can be read as conditions.
Traded
- Crypto spot
- Perpetuals
Read as conditions
- Funding
- Macro
- FX rates
- Seasonality
Issuer reference
- Form 4
- Earnings
- Financial statements
Filings, earnings and financial statements of US-listed companies are kept as reference, apart from what a strategy trades. Each is stored under the day it became public, not under the date of the event it reports.
A result is scored against a benchmark you pick rather than against nothing: buy-and-hold Bitcoin, or the US stock market total return (the Fama-French market series, from 1926) as an outside yardstick. The choice travels with the run, so a curve can never be re-read against a benchmark it was not measured on.
The scope is narrow on purpose: one engine, and the materials it needs to be honest. Nothing here exists to fill a feature list.
Methodology
What keeps a run honest.
A backtest is a claim about the past, and most of the ways it goes wrong are quiet ones. The curve still climbs, nothing errors, and the mistake is visible only to whoever built it. Dokrion holds every run to the rules below. Each comes with the mechanism behind it and the test that would catch it failing.
01The rule
One rule, applied strictly.
A fact may be used at a decision only if it was already true before that decision. Not on the same day. Before it.
In the code that is a strict comparison, and the missing character is not a detail. With the looser one an instrument becomes selectable on the very bar it first prints, which is knowledge the decision could not have had, and the run still returns a perfectly plausible curve. The test that guards it flips exactly that character and prints the instant it lets through.
02Point in time
Dated by the day it was published.
A company's figures are stored under the day the filing became public, never under the day the period ended.
That distinction carries most of the weight in this part. A quarter closes in September, the report appears in November, and the figure is then restated for years afterwards: for Apple alone, 1,917 annual figures appear in more than one filing. Keying on the period end would hand an October decision a number that did not exist until November, and would then silently replace it every time the company revised it. So there is no fallback to a later revision anywhere in the read path. If nothing had been published by the decision date, the strategy gets nothing.
Revised macro series are read the same way. Ask for US real GDP as it stood on April 15, 2020, and the series ends at the fourth quarter of 2019, because the first-quarter figure was not published until April 29. The version that exists today is not quietly substituted in.
03Identity
A company is its filer, not its ticker.
Ticker symbols are leased, not owned. Our own register of reuse found 1,439 symbols that have been used by more than one filer. A record keyed on the symbol splices two different companies together at the point one of them handed the letters over, and nothing in the price series shows the seam.
So the record is keyed on the filer identity the regulator assigns, and the map that resolved each symbol is stored beside the data. Where that map has a limit of its own, the limit is written down with it rather than left for someone to discover later.
04Coverage
Nothing is discarded quietly.
Every record a collector refuses is counted, and the reason is kept with the count: no filer we could identify, no publication date, a period outside the window, a figure we do not read.
A dropped row that nobody counted is how a dataset comes to look complete. Counting them turns coverage into something a reader can look at rather than something a curve implies.
05Overfitting
The return history travels with the result.
Each result keeps its execution assumptions with the sample length, skewness, and kurtosis measured from its own return history. A Sharpe ratio read on its own is a point estimate. Those three say how short the sample behind it was, and how lopsided and heavy-tailed the returns in it were.
They go into the Probabilistic Sharpe Ratio of Bailey and López de Prado, read against a zero benchmark. It asks how likely it is that the Sharpe on screen reflects something real rather than a short, lopsided, fat-tailed record flattering itself, and the moments it uses are measured from that result's own weekly returns rather than assumed. The figure is computed per result and printed beside the Sharpe.
The difference shows up most on short samples. The same Sharpe from two years of skewed, fat-tailed weekly returns and from ten years of well-behaved ones is not the same evidence, and a result that has thrown its moments away cannot be re-examined later. Keeping them is what makes the number checkable rather than quotable.
06Survivorship
Subtracted, and printed.
The candidate list a cross-section is drawn from is made of instruments that exist today. A cross-section drawn from survivors is one with the failures taken out of it, and every ranking rule measured on it comes out flattered.
Half of that is fixable and it is fixed: an instrument is kept out of the window before it existed, by the same strictly earlier rule everything else obeys. The other half is the names nobody collected before they disappeared, and no amount of care recovers those. So a result kept from an earlier run that held US single names carries a fixed deduction on its grade, and the result prints it. The bias is stated where the grade is read, not left to a line at the bottom of a post.
07The test
The guard is tested by breaking it.
A guard that has never failed has never been tested. So the suite is written the other way around: a fix counts as working only when putting the old code back makes the suite fail.
When one comparison was deliberately widened by a single character, 425 decision points were exposed early and the final equity moved. Had the number not moved, the guard would have been decoration, protecting nothing.
The suite has grown past eighty separate look-ahead checks, and it has to pass on the machine that actually runs the backtests, not only on a developer's laptop. A local sample is smaller and newer than the real record, and checks that passed locally have failed against the full one.
08Reproducibility
Every run keeps its own terms.
The execution settings a run was made under travel with its result, and the specification that produced it is stored beside them. A curve can therefore be re-read months later on the terms it was made under rather than on today's, and the same specification over the same window, on the same data and the same engine code, returns the same numbers.
That is the last of it, and the reason for all of the above. A result nobody can reproduce is an anecdote with a chart attached.
Who builds it
Everyone posts the curve. Nobody posts the test.
Vaquero began with two problems, and no one can get past either of them alone.
01The reason
So we built the testing ground.
The claim you cannot check
Timelines fill with how much an automated strategy made, and with images labeled as backtests. The post shows neither the data behind them nor how many re-runs it took to produce that one picture. Reading alone, nobody can tell a real result from a good story, and what is left is the fear of missing out.
The code is new, the errors are old
People hand a strategy to their own AI agent now. The history within reach is a few years of closing prices, and the code that comes back reads values from after the decision date, or quietly drops every company that got delisted. The curve climbs, and nobody knows what it measured.
The testing ground
Every strategy runs there through the same engine and the same rules, whoever wrote it, and the assumptions, costs included, sit next to the answer instead of behind it. The methodology is that argument in full.
02Who
Built and run by a registered business.
Vaquero is built and operated by a business registered in Korea. The particulars below are published because the law governing online commerce here requires them, and they are the same ones at the foot of every page on this site.
- Business nameVaquero
- RepresentativeAsung Kil
- Business registration no.526-20-02677
- Contact[email protected]
The team is small and the product is deliberately narrow. Vaquero manages no money, takes no share of what you trade, and sells no signals, so there is no arrangement here under which we do better when you trade more. What we sell is the test.
03Today
Where the product stands now.
The engine is not open to the public yet. The first accounts open in a closed beta for people on the waitlist, who are invited in small groups.
What changes in Dokrion from one version to the next is recorded in the release notes.
The product is built in English. If something on this site is wrong, [email protected] is the address that fixes it. Corrections are welcome.
Bring the idea. We will test it.
Research and backtesting infrastructure. No strategy recommendations, no trade signals, no order execution.
Vaquero is a research and education service, not investment advice. We do not recommend buying or selling, we publish no trading signals, and we do not guarantee any return. Credits are the AI usage allowance that comes with a plan. On a paid plan it resets every month from your billing date and does not roll over.