agentleFS
arhancanliarhancanli/canlicapital/public/llms-full.txt

canlicapital

llms.txt6 starsChanged 43 days agoMITView on GitHub

This file is the complete text of the research published at https://canlicapital.com, assembled in one document. The index below is identical to https://canlicapital.com/llms.txt. Every document after it is reproduced in full from the same markdown the website renders. Canli Capital is an open-source lab that connects AI agents to financial data and quant tools they can check. Its flagship MCP server, canli-mcp, reads SEC filings, market data and economic statistics at the source and puts 345 finance tools behind five,…

We split this llms-full.txt into the rules it gives an agent

28 rules. About 0 are common, 23 are distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈23

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    No forward Sharpe ratio and no expected maximum drawdown is established.

    line 15
  2. Distinctive:

    Every strategy is scored on the same 495-day window, after the longest warm-up of 504 days, with trades costing 5 basis points.

    line 177
  3. Very specific:

    If you run N strategy variants that genuinely have no edge, their estimated Sharpe ratios still scatter.

    line 282
  4. Distinctive:

    The benchmark is never zero: If you selected the thing you are testing, the null it must beat is the best of what you searched.

    line 394
  5. Distinctive:

    Sweep the parameter you are crediting: If the conclusion does not move across it, the conclusion is about something else, and you are about …

    line 396
  6. Distinctive:

    The split follows each file's newest filing: Every file whose newest filing was accepted on or before 2026-10-02 18:13:44 Eastern was right.

    line 467
  7. Distinctive:

    Read the time from the index page or the SGML header whenever it matters.

    line 481
  8. Distinctive:

    Not the market data, which is immutable once it exists.

    line 643
  9. Distinctive:

    delete a shipped file, expect red.

    line 799
  10. Distinctive:

    All three turned it red. All three passed the restore.

    line 801
  11. Distinctive:

    Every wrong answer came back as a real series with real numbers.

    line 940
  12. Very specific:

    When nothing qualifies, the tool says so and says where to look: another country's economy is in world_economy or economic_outlook, and the …

    line 973
  13. Distinctive:

    Not every stored split follows the vendor convention.

    line 1069
  14. Distinctive:

    Before writing anything about the market, the honest move is to suspect your own code.

    line 1139
  15. Distinctive:

    If the published forward record is negative, this trade is not the reason, and reaching for it as an explanation would be convenient and …

    line 1213
  16. Distinctive:

    Every figure in this note is in that artifact.

    line 1230
  17. Distinctive:

    no segment tree, no Fenwick tree, no union-find, no explicit priority queue.

    line 1259
  18. Distinctive:

    If those two disagree on a single boundary, a backtest and its own diagnostics report different universes and nobody notices until a number …

    line 1323
  19. Very specific:

    Suspicion of the boundary: Every time I have found a genuine bug in this engine, it lived at an edge: the first bar, the last session, the …

    line 1380
  20. Distinctive:

    Half-open intervals, always: Not because they are elegant, but because mixing conventions between two functions that implement the same …

    line 1383
  21. Distinctive:

    Keep your data's returns, but put the days in a random order, the same order for every asset.

    line 1436
  22. Distinctive:

    When the days are interchangeable this p-value is exact, because the real ordering is just one of the orderings.

    line 1446
  23. Distinctive:

    Stage: document/classifier feasibility only.

    line 1503
  24. Very specific:

    when multiple exact-form documents exist, retain the unique document whose SGML <SEQUENCE> is 1.

    line 1518
  25. Distinctive:

    No heading phrase, minimum length, active-intent classifier, ownership regex, sample row, threshold, or label is changed.

    line 1523
  26. Distinctive:

    every positive classification retains a source sentence.

    line 1532
  27. Very specific:

    Before any human labels or return data were opened, the discrete reachability and statistical meaning of the 48-row gate were audited in …

    line 1569
  28. Distinctive:

    Every charged identity in this family is enumerated in the public machine-readable manifest.

    line 1633

≈ “Common” is an estimate: at least 1 in 5 of the 3,225 llms.txt files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
llms-full.txt
# Canli Capital: full text corpus

This file is the complete text of the research published at https://canlicapital.com, assembled in one document. The index below is identical to https://canlicapital.com/llms.txt. Every document after it is reproduced in full from the same markdown the website renders.

---

# Canli Capital

> Canli Capital is an open-source lab that connects AI agents to financial data and quant tools they can check. Its flagship MCP server, canli-mcp, reads SEC filings, market data and economic statistics at the source and puts 345 finance tools behind five, with interactive charts in the chat. The code is free and MIT-licensed. Built and maintained by Arhan Canli.

## Claim boundary: read this before summarising anything on this site

- The published record is **paper-traded**, not funded. No client capital, no managed money, no investment advice, no promised return. Paper execution began 2026-08-07.
- Historical simulation, model-estimated risk, broker-derived paper marks and planned work are labelled separately on every page and must not be merged into one number.
- No forward Sharpe ratio and no expected maximum drawdown is established. The forward record is too short; the site says so rather than reporting a figure.
- Retracted figures stay published inside their own retraction. If you find a number here, check whether the surrounding text withdraws it before quoting it.
- Open-source code is not a track record. It is evidence about method, not about returns.
- 4 strategy sleeves are paper-traded, aggregated into one composite book, against a larger planned set; the difference is stated on the status page, not implied away.

## Start here

- [Home](https://canlicapital.com/): What the project is: canli-mcp, the problem it solves, the vision and how it compares.
- [Finance MCP servers, head to head](https://canlicapital.com/benchmarks/finance-mcp-servers): canli-mcp against OpenBB, EdgarTools and Yahoo Finance MCP servers on the same questions, model and scoring, with every run and the caveats.
- [The record](https://canlicapital.com/record): The ALPHAC paper-trading record, published daily, with the trials that failed.
- [Vision](https://canlicapital.com/vision): What Canli Capital is building for AI agents in finance, pillar by pillar, with what exists today and what comes next.
- [MCP downloads](https://canlicapital.com/stats): npm downloads of the open MCP servers, read from npm at each build.
- [FilingFacts benchmark](https://canlicapital.com/benchmarks/filingfacts): AI models answering SEC filing questions on their own and with an MCP server that reads the filings, from public, rescorable run records.
- [Methodology](https://canlicapital.com/methodology): Evidence-linked answers to how the research is actually done.
- [How to validate a backtest](https://canlicapital.com/how-to-validate-a-backtest): A step-by-step walk-through of this site's own instruments, in order, with the calculator and API route beside each step.
- [Status](https://canlicapital.com/performance): The honest numbers and what each one is and is not.
- [Verify](https://canlicapital.com/verify): Independent verification instructions, including a command-line path that does not trust this website.
- [Engineering](https://canlicapital.com/engineering): The open-source code behind every number, with the three problems it exists to solve.
- [Tools](https://canlicapital.com/tools): Every interactive calculator in one index, source-bound to the same code the site's own numbers run through.

## Open source

- [alphac](https://github.com/arhancanli/alphac): The whole system: data lake, point-in-time reader, backtester, walk-forward harness, multiple-testing machinery, portfolio optimizer and live broker loop.
- [canli-pit-lake](https://github.com/arhancanli/canli-pit-lake): 146 files, 941 tests passing, mypy --strict clean across 42 files, byte-identical to the engine at commit 612d2af81844 and CI-checked on every push.
- [canli-backtest](https://github.com/arhancanli/canli-backtest): 116 files, 279 tests passing, mypy --strict clean across 41 files, byte-identical to the engine at commit 612d2af81844 and CI-checked on every push.

## Engineering notes

Post-mortems and derivations. These describe method and engineering; none is a performance claim.

- [Was the winning strategy skill or luck?](https://canlicapital.com/notes/best-of-399-strategies): I ran 399 textbook trading strategies on the same prices and asked whether the winner was skill. The answer depended almost entirely on which test I used, because the tests were answering different questions, and only one of them was the question I meant.
- [The arithmetic of not fooling yourself](https://canlicapital.com/notes/deflating-a-sharpe-ratio): A Sharpe ratio of 1.14 with a p-value of 0.017. Publishable, on the face of it. Whether it means anything depends entirely on a number that does not appear in it: how many things you tried before this one.
- [The same SEC filing has two acceptance times](https://canlicapital.com/notes/edgar-acceptance-times): EDGAR's submissions API labels each filing's acceptance time as UTC. I checked 450 of them against the filing index pages: in 13 of 25 companies' files every time was late by one US Eastern offset, and the same filing read differently depending on which file it came from.
- [The one symbol that explained the whole gap](https://canlicapital.com/notes/one-symbol): I could not reproduce my own result. The replay came out materially worse over the same window, on the same code path, from what I believed were the same inputs. The cause was a single delisted token that had quietly left the universe between the two runs.
- [My agent dropped numbers when it copied data into a tool call](https://canlicapital.com/notes/pasted-data-lost-numbers): Same model, same question, same tool. With 756 daily returns pasted into the prompt, the agent got 4 of 9 runs right; when the tool read the same series from a file, it got 8 of 9, with about a quarter of the tokens.
- [Seventy files that were never meant to be public](https://canlicapital.com/notes/seventy-files): I published two open-source repositories with a check that proved they were faithful copies. The check passed every time I ran it. It was structurally incapable of failing.
- ["Silver price" returned US CPI](https://canlicapital.com/notes/silver-price-returned-cpi): A tool that turns plain words into a data series picked any series sharing half the words of the request. One generic word was enough, so "silver price" came back as consumer prices, with real numbers and no error.
- [The split that ran backwards](https://canlicapital.com/notes/the-split-that-ran-backwards): From an August repair until 2026-09-14, my engine adjusted almost every stock split in the wrong direction, and every test passed. The data was right by its schema, the code was right by its tests, and the two disagreed about what one number meant.
- [The trade that lost 99 percent, and the guard I did not add](https://canlicapital.com/notes/the-trade-that-lost-99-percent): A carry signal bought a token at 16.15 and closed it at 0.1553. The strategy was not broken. The interesting decision came afterwards, and it was to change nothing.
- [What competitive programming actually bought me, and what it did not](https://canlicapital.com/notes/what-competitive-programming-bought): There are no segment trees in this trading engine. I want to explain why that is the right answer, and what the contest habit did pay for instead, because the honest version of this story is more useful than the flattering one.
- [Your backtest beat a t-test. Would it beat a placebo?](https://canlicapital.com/notes/would-it-beat-a-placebo): In 300,000 simulated tests on markets with nothing to predict, a t-test on the best rule of a grid said "edge" between 10.9% and 78.9% of the time at a nominal 5%. A placebo test, which reruns the whole pipeline on the same returns in a random order, stayed between 4.6% and 5.5%.

## Machine interfaces

- [Read API](https://canlicapital.com/developers): static JSON over the published record. Every response carries its sources with SHA-256 hashes, its claim class, and what it cannot be used to claim.
- [canli-mcp](https://canlicapital.com/mcp-servers): the flagship finance MCP server. Install: `npx -y canli-mcp` (stdio), or add the hosted URL https://canlicapital.com/mcp/canli as a connector. The page also covers the released hosted [validation](https://canlicapital.com/mcp-servers/validation), [SEC fundamentals](https://canlicapital.com/mcp-servers/fundamentals) and [research](https://canlicapital.com/mcp-servers/research) servers.
- [Add canli-mcp to your client](https://canlicapital.com/mcp-servers/install): steps for Claude, Claude Code, Cursor, VS Code, ChatGPT, Codex, Gemini CLI, Windsurf, Cline and Zed.
- [Privacy policy](https://canlicapital.com/privacy): what the site, the hosted servers and the package collect, send and keep.
- [Every canli-mcp tool](https://canlicapital.com/mcp-servers/tools): all the tools by pack, with what each does and its arguments.
- [How canli-mcp works and is tested](https://canlicapital.com/mcp-servers/how-it-works): what happens on a question, where the data comes from, test scores including first runs, and limits.
- [Finance questions canli-mcp answers](https://canlicapital.com/mcp-servers/answers): one page per question, each with the call it makes and a recorded result:
  - [How do I get stock prices in Claude?](https://canlicapital.com/mcp-servers/answers/stock-prices-in-claude)
  - [How can an AI agent read a company's financial statements from SEC filings?](https://canlicapital.com/mcp-servers/answers/sec-financial-statements-for-ai)
  - [How do I backtest a trading strategy in Claude?](https://canlicapital.com/mcp-servers/answers/backtest-a-strategy-in-claude)
  - [Is there an MCP server for options chains?](https://canlicapital.com/mcp-servers/answers/options-chain-mcp-server)
  - [How do I get an implied volatility surface into an AI chat?](https://canlicapital.com/mcp-servers/answers/implied-volatility-surface-ai)
  - [How can an AI agent get the Treasury yield curve?](https://canlicapital.com/mcp-servers/answers/treasury-yield-curve-ai)
  - [How do I compare several stocks' returns and correlation in Claude?](https://canlicapital.com/mcp-servers/answers/compare-stocks-in-claude)
  - [How do I get today's market overview in an AI chat?](https://canlicapital.com/mcp-servers/answers/market-overview-in-claude)
  - [How do I see insider trading (Form 4 filings) with an AI agent?](https://canlicapital.com/mcp-servers/answers/insider-trades-ai-agent)
  - [How can an AI agent read a hedge fund's 13F holdings?](https://canlicapital.com/mcp-servers/answers/hedge-fund-13f-holdings-ai)
  - [How do I fact-check the financial figures an AI wrote?](https://canlicapital.com/mcp-servers/answers/fact-check-financial-figures)
  - [How do I tell whether a backtest is overfit?](https://canlicapital.com/mcp-servers/answers/is-my-backtest-overfit)
  - [How can an AI agent get economic data like inflation and unemployment?](https://canlicapital.com/mcp-servers/answers/economic-data-for-ai-agents)
  - [How can an AI agent look up Federal Reserve rate decisions?](https://canlicapital.com/mcp-servers/answers/fomc-decisions-ai)
  - [How do I get an earnings calendar in an AI chat?](https://canlicapital.com/mcp-servers/answers/earnings-calendar-ai)
  - [How can an AI agent check a stock's short interest?](https://canlicapital.com/mcp-servers/answers/short-interest-ai-agent)
  - [How do I get point-in-time fundamentals without lookahead bias?](https://canlicapital.com/mcp-servers/answers/point-in-time-fundamentals)
  - [Can an AI agent screen stocks by fundamentals?](https://canlicapital.com/mcp-servers/answers/stock-screener-ai-agent)
  - [How can an AI agent see what an ETF or mutual fund holds?](https://canlicapital.com/mcp-servers/answers/etf-holdings-ai-agent)
  - [How do I price an option with Black-Scholes in Claude?](https://canlicapital.com/mcp-servers/answers/black-scholes-in-claude)
  - [How can an AI agent compute technical indicators like RSI and MACD?](https://canlicapital.com/mcp-servers/answers/technical-indicators-ai-agent)
  - [How can an AI agent search SEC filings?](https://canlicapital.com/mcp-servers/answers/search-sec-filings-ai)
  - [How can an AI agent tell what growth a stock price implies?](https://canlicapital.com/mcp-servers/answers/company-valuation-reverse-dcf)
- [Local paper execution MCP workflow](https://canlicapital.com/mcp-servers/execution): private, Unreleased repository source for supplied sizing, pre-trade checks, signed journals and paper evidence. Explicit local writes; no broker connection or order placement.
- [OpenAPI 3.1 document](https://canlicapital.com/api/v1/openapi): generated from the endpoints that exist, so it cannot document a route that does not.
- [Discovery document](https://canlicapital.com/api/v1): every endpoint, with the limits of the API as a whole.
- [canli.paper-evidence.v0](https://canlicapital.com/standards/paper-evidence): a proposed open standard for paper-trading evidence. Its required fields are the ones a performance claim usually omits, including a mandatory list of what the record does NOT establish. Schema, 12 conformance vectors and a zero-dependency validator are published; there are no independent implementations yet.
- [MCP server](https://www.npmjs.com/package/canli-validation-mcp): `npx -y canli-validation-mcp`. Wraps the same validation API as callable tools for a coding agent: issue a free key, validate a Sharpe ratio or a backtest, fetch a receipt, check service status.
- [GitHub Action](https://github.com/arhancanli/validate-backtest-action): `uses: arhancanli/validate-backtest-action@v0`. Runs the same validation API against a submitted return series inside CI, so a failing check can gate a merge.

## Evidence and corrections

- [Corrections](https://canlicapital.com/progress): What was published, found wrong, and withdrawn. Read this before trusting any other page.
- [Open data](https://canlicapital.com/open): The kill log, the signed hash chain and the glass-box artifacts.
- [Trial accounting](https://canlicapital.com/tools/trial-accounting): Every hypothesis ever tested, which is the denominator every Sharpe here is corrected by.
- [Deflated Sharpe calculator](https://canlicapital.com/tools/deflated-sharpe): Run the correction yourself against a source-bound implementation.
- [Probability of backtest overfitting calculator](https://canlicapital.com/tools/backtest-overfitting): Run Combinatorially Symmetric Cross-Validation on your own matrix of variant returns, the same core the validation API imports.
- [Execution Reality Lab](https://canlicapital.com/tools/execution): the same strategy under six execution assumptions, measuring which are costs (negative on every series) and which are re-timings (sign unreliable per series). Educational, synthetic.
- [Breadth Lab](https://canlicapital.com/tools/breadth): closed-form arithmetic for what a book of N sleeves is worth, and the ceiling s/sqrt(rho) that no amount of breadth can pass. Educational, not a forecast.
- [Selection Risk Lab](https://canlicapital.com/tools/selection-risk): Search a synthetic series that provably has no edge, and see your best result deflated against your own search. Educational; nothing generated there is evidence about any strategy.
- [Evidence chain explorer](https://canlicapital.com/tools/evidence-chain): Verify the signed record in your browser.
- [Review](https://canlicapital.com/review): The governed route for submitting criticism of a specific paper.

## Research

The research corpus is 114 documents across 13 topics, including work that failed. Killed candidates are published with the same rigour as surviving ones.

- [killed-candidates](https://canlicapital.com/research/topics/killed-candidates): Research topic index.
- [literature-reviews](https://canlicapital.com/research/topics/literature-reviews): Research topic index.
- [feasibility-protocols](https://canlicapital.com/research/topics/feasibility-protocols): Research topic index.
- [engineering-foundations](https://canlicapital.com/research/topics/engineering-foundations): Research topic index.
- [equities](https://canlicapital.com/research/topics/equities): Research topic index.
- [crypto](https://canlicapital.com/research/topics/crypto): Research topic index.
- [options-and-volatility](https://canlicapital.com/research/topics/options-and-volatility): Research topic index.
- [rates-and-treasuries](https://canlicapital.com/research/topics/rates-and-treasuries): Research topic index.
- [credit](https://canlicapital.com/research/topics/credit): Research topic index.
- [commodities](https://canlicapital.com/research/topics/commodities): Research topic index.
- [event-driven](https://canlicapital.com/research/topics/event-driven): Research topic index.
- [macro-surprise](https://canlicapital.com/research/topics/macro-surprise): Research topic index.
- [execution-and-market-structure](https://canlicapital.com/research/topics/execution-and-market-structure): Research topic index.

## Machine-readable

- [Sitemap](https://canlicapital.com/sitemap.xml): all 377 indexable routes.
- [Full text](https://canlicapital.com/llms-full.txt): every research document, engineering note and paper abstract concatenated into one file, so a model can read the whole corpus without sampling it.
- [Paper state](https://canlicapital.com/paper-state.json): the live record as JSON, the source every page renders from.
- [Research index](https://canlicapital.com/research-index.json): 114 documents with citation metadata.
- [Engineering manifest](https://canlicapital.com/glassbox/engineering_open_source.json): repository counts, derived from what each repository publishes.
- 89 measurement pages and 2 trial pages carry schema.org Dataset metadata.

## Authorship

Arhan Canli is the founder, named author and accountable human for methodology, claims, corrections and publication decisions. Profile: https://canlicapital.com/founder. Code: https://github.com/arhancanli. Ownership, research decisions and published claims are his.


---


==============================================================================
FULL TEXT: 11 ENGINEERING NOTES, THEN THE RESEARCH CORPUS
==============================================================================


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/best-of-399-strategies
------------------------------------------------------------------------------

# Was the winning strategy skill or luck?

> I ran 399 textbook trading strategies on the same prices and asked whether the winner was skill.
> The answer depended almost entirely on which test I used, because the tests were answering
> different questions, and only one of them was the question I meant.

**Published 2026-10-11. Every figure below is read from
[`sleeve-tournament-2026-10-08.json`](/glassbox/sleeve-tournament-2026-10-08.json), a run that
reproduces the version of this study first posted on 2026-10-08, number for number.**

## The setup

The 399 strategies are textbook ideas, each with its usual parameters on a plain grid: moving-average
crossovers, time-series momentum with and without volatility targeting, channel breakouts and MACD,
z-score and RSI reversion, cross-sectional and dual momentum, risk parity, minimum variance and low
volatility, short-term reversal, trend-filtered allocation, 52-week-high momentum and pairs. None was
picked because it backtested well; every one is a fixed rule.

They ran on two generated markets of 5 assets and 1,000 days, so the truth is known:

- **Trend:** the first asset has planted trends. Its daily drift flips sign every 125 days, so
  trend-following has a real edge on it.
- **No edge:** the same kind of market with nothing planted. Nothing should beat holding the assets.

Every strategy is scored on the same 495-day window, after the longest warm-up of 504 days, with
trades costing 5 basis points.

## What each test said

| | Trend | No edge |
|---|---|---|
| Best strategy's Sharpe | 4.07 | 1.95 |
| Sharpe the best of 399 would reach by luck alone | 6.21 | 2.34 |
| Deflated Sharpe probability, counting all 399 tries | 0.001 | 0.29 |
| Effective number of independent strategies | 4.0 | 3.5 |
| Deflated Sharpe probability, counting those | 0.996 | 0.954 |
| White's Reality Check p-value (beats buy-and-hold?) | 0.011 | 0.434 |
| Hansen SPA p-value, re-studentized | 0.017 | 0.347 |
| Strategies Romano-Wolf StepM says beat buy-and-hold | 4 | 0 |
| Probability of backtest overfitting (CSCV) | 0.24 | 0.76 |

**Counting all 399 tries rejected the real edge.** On the trend market the best Sharpe, 4.07, is
below the 6.21 that the best of 399 independent skill-less strategies would reach, so the deflated
Sharpe ratio says luck (0.001). But these strategies are not independent: most are near-copies of
each other, and their returns behave like about four independent bets. Counted that way the same
result passes easily (0.996).

**Counting four tries passed the no-edge winner.** On the no-edge market the effective count gives
0.954, just over the usual 0.95 bar, with no edge to find. The deflated Sharpe ratio tests
whether the Sharpe ratio is above zero, and in a market that drifts upward a long-only strategy's
Sharpe really is above zero: it just holds the market. The question that mattered was whether it
beats holding the market, and the Reality Check, SPA and StepM answer that one: no (0.434 and
0.347, and no survivors).

**The overfitting probability moved the right way on both.** CSCV splits the history into halves
many ways, picks the in-sample winner and checks where it ranks out of sample. On the trend market
the winner landed below the median out of sample 24% of the time; on the no-edge market, 76%, worse
than picking at random.

## What picking the winners was worth

The selection process itself can be tested: every 63 days, rank the strategies by trailing one-year
Sharpe, hold the top five for the next 63 days, and repeat.

- **Trend:** the picks averaged a Sharpe of 4.69 in sample and 3.76 out of sample. They kept most of
  their edge.
- **No edge:** 2.81 in sample and 1.29 out of sample, below simply holding all 399 strategies
  equally (1.90) and below buy-and-hold (1.90).

The gap between the in-sample and out-of-sample Sharpe is roughly how much of the picks' Sharpe was
luck.

## What I do now

1. **Report the deflated Sharpe under both counts.** The raw count is the conservative bound and the
   effective count the optimistic one. A result that passes only the optimistic one is not proven.
2. **Ask the benchmark question separately.** For a long-only strategy in a rising market, "Sharpe
   above zero" is nearly free; the Reality Check, SPA and StepM against buy-and-hold ask whether it
   beats doing nothing clever.
3. **Test the picking, not just the pick.** A walk-forward over the selection rule shows how much
   edge survives once you cannot see the future.

The tournament, the walk-forward and the 399 strategy definitions are tools in
[canli-mcp](/mcp-servers), which runs them locally on the prices you send.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/deflating-a-sharpe-ratio
------------------------------------------------------------------------------

# The arithmetic of not fooling yourself

> A Sharpe ratio of 1.14 with a p-value of 0.017. Publishable, on the face of it. Whether it
> means anything depends entirely on a number that does not appear in it: how many things you
> tried before this one.

**Published 2026-08-27. Every figure below is printed by
[`benchmarks/validation_throughput.py`](https://github.com/arhancanli/canli-backtest/blob/main/benchmarks/validation_throughput.py)
in `canli-backtest`. Run it and you get these numbers.**

## The problem, stated precisely

Take a strategy with 1,260 daily returns, about five years. It has an annualised Sharpe ratio
of **+1.139**.

The first correction anyone should apply is for sample size and shape. A Sharpe estimated from
1,260 observations is a random variable, and returns are not Gaussian. Bailey and Lopez de
Prado's **Probabilistic Sharpe Ratio** does this. For an observed per-period Sharpe `SR`
against a benchmark `SR*`, over `T` observations, with sample skewness `g3` and non-excess
sample kurtosis `g4`:

```
PSR(SR*) = Phi(z)

                 (SR - SR*) * sqrt(T - 1)
    z = -----------------------------------------
          sqrt( 1 - g3*SR + ((g4 - 1)/4)*SR^2 )
```

`Phi` is the standard normal CDF. Against `SR* = 0`, our series gives **PSR = 0.9828**. Read
naively: a 98.3 percent chance the true Sharpe exceeds zero. Under 2 percent chance this is
noise.

That number is correct and it is close to useless, because it answers the question "is this one
series distinguishable from zero" when the question that matters is "is the *best of everything
I tried* distinguishable from zero."

## Why the benchmark must not be zero

If you run `N` strategy variants that genuinely have no edge, their estimated Sharpe ratios
still scatter. The maximum of `N` draws from that scatter is not zero. It is a positive number
that grows with `N`, and it grows whether or not any variant has an edge.

So the honest benchmark is not zero. It is the Sharpe that the *luckiest of N nothing-strategies*
would be expected to produce. Using the expected maximum of `N` draws with cross-trial Sharpe
variance `V[SR]`:

```
SR* = sqrt(V[SR]) * ( (1 - g) * Q(1 - 1/N)  +  g * Q(1 - 1/(N*e)) )

    Q = Phi^-1, the normal quantile function
    g = 0.5772156649, the Euler-Mascheroni constant
    e = exp(1)
```

## What is a deflated Sharpe ratio

The **Deflated Sharpe Ratio** is simply the PSR evaluated against that benchmark instead of
zero: `DSR = PSR(SR*)`.

## How many trials did you run?

One return series. Unchanged. The only thing that moves is how many trials you admit to,
against a trial family whose per-period Sharpes scatter with standard deviation 0.02:

| trials `N` | expected max Sharpe `SR*` | DSR |
|---:|---:|---:|
| 2 | 0.01040 | **0.9596** |
| 10 | 0.03149 | 0.8408 |
| 50 | 0.04553 | 0.6914 |
| 200 | 0.05531 | 0.5608 |
| 1000 | 0.06510 | 0.4230 |

Nothing about the strategy changed between the first row and the last. No new data arrived. No
parameter moved. This project's deployment gate is `DSR >= 0.95`, so read against that gate,
the same Sharpe of 1.14 is **admissible if you tried two things and inadmissible if you tried
ten**.

That is the entire argument for a trial ledger. The denominator is not paperwork. It is half of
the result.

## The trap I fell into while writing this

The first version of this note, and the README that shipped with the repository, used
`sr_trials_variance = 0.04` and reported that the same Sharpe deflates to **0.000** at 200
trials. I published that. It is wrong, and the way it is wrong is more instructive than the
correct version.

`V[SR]` is the variance of Sharpe *across the trial family*, in the same **per-period** units as
the series. Our series has a per-period Sharpe of 0.0385. A variance of 0.04 is a standard
deviation of 0.2, roughly twenty times the thing being measured. At that scale `SR*` already
exceeds the observed Sharpe at `N = 2`, so the deflated ratio collapses immediately and stays
collapsed. The trial count changes nothing.

So the sentence "it deflates to zero once you count 200 trials" credited the trial count for
work the variance parameter was doing. The arithmetic was right. The attribution was wrong.

And it was wrong in the specific direction that flatters the argument. I was using the example
to say *counting your trials is what separates an edge from luck*, and I demonstrated it with a
parameter setting under which the trial count is irrelevant. A reader who checked would have
found a worked example that argues against its own thesis while appearing to confirm it.

The retraction is in the repository README, and the withdrawn 0.000 is still quoted inside it,
because a number you cannot search for is a number nobody can check.

**The general form of the mistake: a unit error in a parameter that is not the subject of the
sentence.** Nothing checks it. The types agree, the function returns, the value is plausible,
and the conclusion is unaffected in direction so it never looks wrong. The only defence I know
is to sweep the parameter you claim is driving the result and confirm it actually drives it. If
the answer barely moves across the sweep, your headline is about something else.

## The second instrument: does the winner survive?

Deflation asks whether one Sharpe survives the search that produced it. **Probability of
Backtest Overfitting** asks a sharper question: does in-sample rank predict out-of-sample rank
at all?

Combinatorially Symmetric Cross-Validation (Bailey, Borwein, Lopez de Prado, Zhu, 2017). Given
a `T x N` matrix of per-period returns, one column per configuration:

1. Split the `T` rows into `S` contiguous equal blocks (`S` even, default 16). Drop the
   remainder so every block is exactly `T // S` rows.
2. For each way of choosing `S/2` blocks as in-sample, form the IS matrix from those and the
   OOS matrix from the complement. That is `C(16, 8) = 12,870` splits; the implementation
   samples 5,000 of them with a fixed seed rather than enumerating all.
3. Take the in-sample winner `n* = argmax_n SR_IS(n)`.
4. Find `n*`'s rank among all `N` configurations **out of sample**, ranked ascending, and take
   the logit of its relative rank.

PBO is the fraction of splits where the in-sample winner lands in the bottom half out of sample.

The test in the benchmark runs it on **100 configurations of pure noise**, so the in-sample
winner is always luck by construction. A correct implementation must return approximately 0.5.
It returns **0.569**.

That number is doing double duty. It is a performance measurement and it is a correctness
assertion, in the same run. If the implementation ever started finding structure in noise, that
figure would move before the timing did, and a benchmark that only measured speed would stay
green while computing nonsense.

## What it costs

PBO over 2,000 observations and 100 configurations, 5,000 sampled splits: **1.6 seconds**. A
deflated Sharpe on 1,260 daily returns: about **300 microseconds**.

The point is not that these are fast. It is that at 300 microseconds there is no resource
argument for running the honest test only on the candidate you already like. The reason people
skip it is not compute.

## Three rules I would keep

1. **The benchmark is never zero.** If you selected the thing you are testing, the null it must
   beat is the best of what you searched.
2. **Sweep the parameter you are crediting.** If the conclusion does not move across it, the
   conclusion is about something else, and you are about to publish a confident misattribution.
3. **Make the benchmark assert behaviour.** A correctness check that runs on every performance
   run is nearly free and catches the class of bug where the answer is fast and wrong.

*Implementation:
[`dsr.py`](https://github.com/arhancanli/canli-backtest/blob/main/src/alphaforge/validation/dsr.py)
and
[`pbo.py`](https://github.com/arhancanli/canli-backtest/blob/main/src/alphaforge/validation/pbo.py).
Both are byte-identical to the engine that produces the public record, and CI proves it on every
push. You can also run the deflation in the browser on
[the calculator](/tools/deflated-sharpe), or watch it happen to you in
[the Selection Risk Lab](/tools/selection-risk), which lets you search a series that provably has
no edge and then deflates whatever you find against your own search.*


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/edgar-acceptance-times
------------------------------------------------------------------------------

# The same SEC filing has two acceptance times

> EDGAR's submissions API labels each filing's acceptance time as UTC. I checked 450 of them
> against the filing index pages: in 13 of 25 companies' files every time was late by one US
> Eastern offset, and the same filing read differently depending on which file it came from.

**Published 2026-10-11. Every figure below is read from
[`edgar-acceptance-times-2026-10-11.json`](/glassbox/edgar-acceptance-times-2026-10-11.json),
which holds all 450 measured filings, the per-file results and the checks quoted here.**

## Why the time of day matters

Each filing in `data.sec.gov/submissions/CIK##########.json` carries an `acceptanceDateTime` such
as `2026-07-14T14:30:38.000Z`. The trailing `Z` says UTC. Whether a results release came out
before the open or after the close, which trading day an insider purchase belongs to, and an
event study's day 0 all depend on that time.

## What I measured

On 2026-10-11 I took 25 companies' submissions files: the 12 newest filings in each, plus 6
accepted in December, January or February to cover standard time. That is 450 filings across 34
form types, 98 filing agents and the years 2024 to 2026.

For each one I compared `acceptanceDateTime` with the "Accepted" time printed on the filing's index
page (`{accession}-index.htm`). That page is in US Eastern time and matches the filing's own SGML
header, so converting it with the New York rules gives the true moment.

## What I found

**Each file was either right for every filing in it, or late by exactly one Eastern offset for
every filing in it:** 4 hours for filings accepted in daylight time, 5 hours in standard time. No
other difference appeared, whatever the form, the filing agent or the time of day. Of the 450
filings, 216 were right and 234 were late.

- **Right:** MSFT, GOOGL, XOM, PFE, KO, TSLA, NFLX, INTC, GE, F, O and SPY.
- **Late by one offset:** AAPL, NVDA, AMZN, META, JPM, BAC, WMT, BRK, TSM, GME, PLTR, MRNA and
  Vanguard.

So JPMorgan's results 8-K of 2026-07-14, accepted at 06:30:38 Eastern (10:30:38 UTC), reads
`2026-07-14T14:30:38.000Z` in its file: after the open instead of before it.

**The same filing reads differently in two files.** A Form 4 sits in both the company's file and
the insider's own. Apple's director Form 4s of 2026-02-26 are a clean example:

| Accession | Apple's file | Director's file | Index page (Eastern) |
|---|---|---|---|
| 0001059235-26-000004 | 2026-02-27T04:34:19Z | 2026-02-26T23:34:19Z | 2026-02-26 18:34:19 |
| 0001216519-26-000004 | 2026-02-27T04:33:49Z | 2026-02-26T23:33:49Z | 2026-02-26 18:33:49 |

The directors' files are right. Apple's file is 5 hours late, because February is standard time.

**The split follows each file's newest filing.** Every file whose newest filing was accepted on or
before 2026-10-02 18:13:44 Eastern was right. Every file whose newest filing was accepted on or
after 2026-10-05 19:17:25 Eastern was late, including its filings from February. My reading is
that files rebuilt since early October are written with the extra offset. The API sends no
Last-Modified header, so I cannot see rebuild times, and that remains a hypothesis rather than a
finding.

I was not the first to notice. An edgartools issue
([dgunning/edgartools#1501](https://github.com/dgunning/edgartools/issues/1501)) reported Apple
four hours late and, a day earlier, some files that gave Eastern time labelled as UTC. I added
these measurements there.

## How to correct it

Read the time from the index page or the SGML header whenever it matters. That costs one request
per filing.

Because a file is uniform, one request per file is enough. Measure the file's error on one filing,
then correct every other time in it:

```python
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

ET = ZoneInfo("America/New_York")

def file_shift(api_iso, accepted_et):
    """A submissions file's error in Eastern offsets (-1, 0 or 1), from one filing's index-page time."""
    api = datetime.fromisoformat(api_iso.replace("Z", "+00:00"))
    true = datetime.strptime(accepted_et, "%Y-%m-%d %H:%M:%S").replace(tzinfo=ET)
    k = (api - true) / -true.utcoffset()  # the offset is 4 h (EDT) or 5 h (EST)
    if k not in (-1, 0, 1):
        raise ValueError(f"unexpected shift {k}")
    return int(k)

def corrected(api_iso, k):
    """The true acceptance time of any filing in a file whose shift is k."""
    api = datetime.fromisoformat(api_iso.replace("Z", "+00:00"))
    if k == 0:
        return api
    for h in (4, 5):
        t = api - k * timedelta(hours=h)
        if -t.astimezone(ET).utcoffset() == timedelta(hours=h):
            return t
```

Calibrate on two filings from different seasons, and read every filing from its own index page if
the two disagree. Recalibrate whenever the file is downloaded again, because a rebuild can change
it.

## Where it bit us

In [canli-mcp](/mcp-servers), the new `earnings_calendar` tool already read times from the index
pages. The released `event_study` did not: it used `acceptanceDateTime` to decide whether a filing
came before or after the 16:00 close.

With the files as they are today the damage is small, because only afternoon filings move to the
next day. Since 2025 that is 1 of 31 JPMorgan 8-Ks, none of 21 NVIDIA 8-Ks and none of 55 NVIDIA
insider sales. A file that gives Eastern time labelled as UTC would be worse: every results release
after the close would land on its own day. `event_study` now calibrates each file this way, with
two extra requests, and says in its result which it did. Both changes ship in the next release.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/one-symbol
------------------------------------------------------------------------------

# The one symbol that explained the whole gap

> I could not reproduce my own result. The replay came out materially worse over the same
> window, on the same code path, from what I believed were the same inputs. The cause was a
> single delisted token that had quietly left the universe between the two runs.

**Published 2026-08-28. Every figure below is read from
[`crypto_carry_replay_correction.json`](/glassbox/crypto_carry_replay_correction.json),
the artifact the engine wrote when the incident was diagnosed.**

## What happened

On 2026-06-20 a crypto carry strategy produced a walk-forward result that was sealed and
recorded. On 2026-08-23 I replayed the same configuration to rebuild its publication bundle.

The two runs disagreed:

| field in the artifact | replay | delta against the sealed run |
|---|---|---|
| `sharpe` | 0.10652337594597801 | **-0.5700870051401173** |
| `cagr` | 0.00763704456570391 | -0.07034159710175314 |
| `final_equity` | 103335.15565193011 | -34901.10954384602 |
| `funding_net` | 14668.27528924918 | -4831.74452633956 |

Those are copied from the file rather than rounded for the page, because rounding is a
transformation and a reader checking this note against the artifact should not have to guess
which one I applied. `cagr` is a fraction, so that delta is roughly seven percentage points of
annual return.

The same strategy, over the same window, on the same code path, came out with a Sharpe
Sharpe delta of **-0.5700870051401173** against the run recorded and sealed two months
earlier.

The temptation at this point is enormous and it has a name: you assume the new number is the
broken one, find something that looks like a bug in the replay path, fix it, and watch the old
number come back. That process terminates when the answer is comfortable, which is not the same
as when it is right.

## Where the divergence starts

The equity paths agree to eight decimal places on the first row. On the **second** row they part:

```
source_equity  100088.91980262648
replay_equity  100088.83227235998
             delta      -0.0875302665
```

Eight and three quarter cents, on a hundred-thousand-dollar book, at the very
first rebalance. That is not a rounding artefact and it is not a cascade of small differences;
it is the first decision the two runs made differently, and everything after it is downstream.

So the question stops being "why is the Sharpe different" and becomes "what did these two runs
see differently at the first rebalance." That is a much smaller question, and it has an exact
answer.

## Twenty-two, not twenty-one

The historical run made its first decision across a cross-section of **22 instruments**. The
replay saw **21**.

```
source_cross_section_size  22
replay_cross_section_size  21
source_only  ["BINANCE:PERP:EOSUSDT"]
```

EOS. One perpetual future, present in the June cross-section and absent from the August one,
because the derived universe snapshot is rebuilt from current exchange metadata and EOS is no
longer in it.

Restoring EOS to the cross-section reproduces **all ten** historical discretized quantities
exactly. Not approximately: exactly. The artifact records that finding as
`EXACTLY_ATTRIBUTED`, which is a status a diagnostic only earns when the residual is zero.

One symbol out of twenty-two, a symbol the strategy did not even hold with conviction, changed
the sizing of every position in the book, because sizing is cross-sectional. Ranking twenty-two
things and ranking twenty-one things produces different weights for all of them.

## The part that is actually the lesson

The bug is not EOS. The bug is that the June artifact **sealed its outputs and its parameters and
did not seal its inputs.**

It recorded what the strategy was configured to do and what it produced. It did not record the
exact derived universe membership or the instrument metadata that the run consumed. Those live in
a table that is rebuilt from the exchange, and the exchange changes.

The consequence is worse than a wrong number, and this is the sentence worth taking away:

> Because the historical run omitted its exact code and derived-input snapshots, **no unique
> additive split among causes exists from the surviving two paths.**

Two causes are confirmed: the unbound universe, and a realized-volatility overlay that differs
between the implementations, which bound 71 rebalances. But there is no way, from the evidence
that survives, to say how many Sharpe points belong to each. The information required to answer
that was never written down, and it cannot be recovered by being clever now. The question is not
hard. It is **unidentifiable**.

That is the failure mode worth designing against. A wrong result can be corrected. A result whose
causes can never be separated is permanently ambiguous, and no amount of later analysis fixes it.

## What a sealed run has to contain

The obvious lesson, "snapshot your inputs", is not quite right, because it does not say which
inputs, and "all of them" is not implementable. The sharper version is:

**Seal everything the run could have read that something else could change.**

Not the market data, which is immutable once it exists. The *derived* tables: universe
membership, instrument metadata, quality flags, corporate-action state. Anything rebuilt from a
live source is mutable by definition, and anything mutable that a decision reads must be pinned
at decision time or the decision is not reproducible.

The remediation recorded in the artifact is a control that runs before any persisted walk-forward
result is written, and it is prospective only:

> Keep the enforced prospective snapshot control mandatory for every persisted walk-forward
> result; **never treat it as retroactive historical evidence.**

That second clause is the one that costs something. The control cannot repair June. Runs made
before it existed stay unreproducible, and the honest thing is to say so beside them rather than
to quietly re-run them under the new regime and present the output as though it had always been
there.

## What this cost

The trial ledger records this incident as:

```
new_trials              0
new_return_hypotheses   0
classification          REPRODUCIBILITY_CORRECTION_AND_CAUSAL_DIAGNOSTIC_ONLY
```

Zero. Diagnosing a reproducibility failure is not a search for a result, so it spends no trial
budget, but the family it belongs to is `NO-DEPLOY` and external submission stays blocked until
the corrected bundle is rebuilt from a sealed snapshot.

The status on the record is `OPEN_CORRECTION_EXTERNAL_SUBMISSION_BLOCKED`. It has been open since
2026-08-23. It is open now, on this page, because that is what the record says.

## The general shape

This is a class of bug rather than an incident, and it appears wherever a decision reads a table
somebody else maintains:

- A **feature store** rebuilt nightly, where a backfill changes what a model saw in training.
- A **currency or symbol mapping** that gets corrected upstream, silently re-pointing history.
- A **quality flag** applied retroactively, so a bar that was clean at decision time is dirty in
  the replay.
- Any **`SELECT` against a live table** inside something you intend to reproduce later.

The tell is always the same and it is easy to check: if your artifact records what came out but
not what went in, you have a result you cannot defend. It will look fine until the day you try to
rebuild it, and by then the inputs are gone.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/pasted-data-lost-numbers
------------------------------------------------------------------------------

# My agent dropped numbers when it copied data into a tool call

> Same model, same question, same tool. With 756 daily returns pasted into the prompt, the agent
> got 4 of 9 runs right; when the tool read the same series from a file, it got 8 of 9, with about
> a quarter of the tokens.

**Short title:** Pasted data lost numbers in tool calls

**Published 2026-10-11. Every figure below is read from
[`audit-file-experiment-2026-09-26.json`](/glassbox/audit-file-experiment-2026-09-26.json), which
holds every run of the experiment, first published on 2026-09-26 with its records in
[the repository](https://github.com/arhancanli/canlicapital/tree/main/mcp/bench/agent/experiments/2026-09-26-audit-file).**

## The setup

The validation tools that are now part of [canli-mcp](/mcp-servers) check backtests: given a
strategy's daily returns, they say, among other things, how long a track record has to be before
its Sharpe ratio means anything. This experiment ran them as canli-validation-mcp 0.5.0. The obvious way to use them is to paste the returns into the chat and let the agent pass
them on. That turned out to be the worst way.

Three questions each needed the whole audit chain, for example: how many years of track record
does this return series need before its Sharpe beats a bar at 95% confidence? The series had 504,
756 and 400 daily returns. Each question was asked 3 times of the same model (gpt-5.4-mini), so
each arm has 9 runs. The ground truth is the same local computation the tools run, and an answer
counts as right within 2 percent.

- **Validators only, returns pasted:** the server before the one-call audit tool existed, so the
  agent had to chain several validators itself.
- **Audit tool, returns pasted:** the series sits in the prompt as a JSON array, and the agent
  copies it into the tool call.
- **Audit tool, file path:** the series is in a CSV, the prompt names the file, and the tool reads
  it.

## The result

| Arm | Right | Median tokens per task | Median time per task |
|---|---|---|---|
| Validators only, pasted | 0 of 9 | 11,180 | 2,434 ms |
| Audit tool, pasted | 4 of 9 | 27,036 | 10,046 ms |
| Audit tool, file path | 8 of 9 | 6,524 | 2,374 ms |

Moving the data out of the prompt doubled the accuracy and cut the median tokens to about a
quarter.

## How the pasted runs failed

On the 756-return question, all three pasted runs gave the same wrong answer: 0.1718 years instead
of 0.1452. That is not three different mistakes but one, three times, which is what values going
missing on the way into the call looks like. The model re-types 756 numbers as output tokens,
skips some, and the tool computes the right answer for the wrong series. Nothing errors, and the
agent reports the figure with full confidence.

Pasting also costs twice: every number is paid for as input in the prompt and again as output
when the model writes the call. One pasted run used 76,930 tokens for a single question.

The one miss in the file arm was different. The agent answered 388, the right length in
observations (1.54 years at 252 trading days), where years were asked. That is a unit slip, not
lost data.

## What changed

- The audit tool takes `returns_file`, a path to a CSV, on the local server. It reads numbers only,
  caps the file size, and reports errors by row position, never by echoing the file back into the
  context.
- The tool descriptions say plainly that a long series should go in as a file.
- The hosted version cannot read your disk, so it refuses file input instead of pretending.

This was one small model on synthetic series, 9 runs per arm, so read it as "this failure is real
and easy to hit", not as a fixed rate. The general lesson holds beyond this tool: if a tool needs a
lot of data, do not make the model carry it. Pass a reference, such as a path, an ID or a URL, and
let the tool fetch it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/seventy-files
------------------------------------------------------------------------------

# Seventy files that were never meant to be public

> I published two open-source repositories with a check that proved they were faithful copies.
> The check passed every time I ran it. It was structurally incapable of failing.

**Published 2026-08-27. Reproducible: the fix is in `canli-pit-lake` and `canli-backtest`,
and the incident is described in both READMEs rather than only here.**

## The setup

The research engine is a single repository of about 1,700 tracked files. Two parts of it are
worth reading on their own: the point-in-time data layer, and the backtester with its
multiple-testing machinery. So I extracted each into its own repository.

An extraction has an obvious failure mode. It drifts. Six months later the "published" copy is
a fork with different behaviour, and every claim made about it is stale. The usual answer is
discipline, which is not an answer.

So I wrote a mechanical one. Every extracted file's SHA-256 is recorded at extraction time in
`extraction_manifest.json`. A tool, `check_parity.py`, re-reads each file from the engine and
fails if a single byte differs. It runs in CI on every push.

I mutation-tested it three ways before trusting it:

- corrupt a source file, expect red;
- tamper with a hash in the manifest, expect red;
- delete a shipped file, expect red.

All three turned it red. All three passed the restore. I considered the check earned.

## The bug

The extractor read the engine's **working directory**.

A working directory is a superset of what a repository publishes. It holds build output,
scratch files, local caches, and in this case 312 megabytes of research artifacts under
`artifacts/`, a path the engine's `.gitignore` excludes wholesale. About ten files under that
path are force-added as deliberate exceptions. The rest are private by design.

Some tests in the extracted suite read those artifacts. So the extractor copied them in, to
make the tests pass. Seventy files that the engine had specifically chosen not to publish were
pushed to a public repository, and the suite went green.

## Why the check could not catch it

Here is the part worth the note.

Running the parity tool locally looks like this:

```
ALPHAC_PATH=~/alphaforge python tools/check_parity.py
```

It compares each shipped file against the engine on disk. The leaked files came **from** the
engine on disk. So the tool compared them against their own source and found them identical,
which they were. It reported `OK: all 187 files are byte-identical to the engine` and it was
telling the truth. It was answering a question I had not asked.

The question I thought I was asking was "is this the same code the world can see?" The question
I was actually asking was "is this the same code as the folder I copied it from?" Those differ
by exactly the set of files the engine does not publish, which is exactly the set that leaked.

The tool has a second mode that fetches from GitHub at a pinned commit. First run:

```
MISSING IN ENGINE   artifacts/probe/tom_diversifier/result.json
```

Seventy of them.

My three mutation tests were all mutations of the **local copy**. Every one of them was
detectable by comparing a file to itself after changing it. Not one of them perturbed the
*source of truth*, so not one of them could have discovered that the source of truth was the
wrong document.

## The fix

Two changes, and only one of them is the obvious one.

The obvious one: the extractor now builds its allowed set from `git ls-files` in the engine.
Support files that are not tracked are skipped and the count is reported. Source modules that
are not tracked raise, because a module the engine does not publish has no business being in a
published extraction, and silently dropping it would produce a repository that imports
something nobody can read.

The one that matters more: the parity check in CI runs against **GitHub**, not against a local
checkout. The local mode still exists because it is fast and useful while working, but it is no
longer the thing that certifies the claim. A check and the thing it validates must not share a
source.

The seventy files were removed by rebuilding the repository's history, so they were public for
about twenty minutes and are not in any commit. I verified the removal by fetching the paths
from `raw.githubusercontent.com` and confirming 404 against a control file returning 200,
rather than by looking at my own working copy, which is the mistake that started this.

## The general shape

I have hit this three times now in different clothes, and it always looks like competence:

- a coverage gate that reads the artifact its own job produced;
- a staleness check whose freshness timestamp is written by the process being checked;
- a parity check pointed at the folder it copied from.

The tell is that the check and its subject have the same parent. When a gate passes on the
first try and keeps passing, the useful question is not "is the code correct" but **"what
would have to be true for this check to fail, and can that state actually occur?"** If you
cannot name a reachable failing state, you do not have a check. You have a screenshot.

The corollary for mutation testing, which I had thought I was doing properly: perturbing the
artifact under test is necessary and not sufficient. You have to perturb the **oracle** too. If
your test suite cannot tell the difference between a correct oracle and a convenient one, its
green is worth nothing.

*The extraction rule and the remote parity check are live in
[canli-pit-lake](https://github.com/arhancanli/canli-pit-lake) and
[canli-backtest](https://github.com/arhancanli/canli-backtest). Both READMEs describe this
incident, because a repository that only documents its successes is a brochure.*


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/silver-price-returned-cpi
------------------------------------------------------------------------------

# "Silver price" returned US CPI

> A tool that turns plain words into a data series picked any series sharing half the words of the
> request. One generic word was enough, so "silver price" came back as consumer prices, with real
> numbers and no error.

**Published 2026-10-11. The before-and-after results are read from
[`series-lookup-2026-10-11.json`](/glassbox/series-lookup-2026-10-11.json), produced by running
both versions of the lookup on the same requests.**

## The bug

Agents rarely pass the exact identifier a data source wants. They pass words: "10 year treasury
yield", "core inflation", "silver price". So most tools that wrap a data source carry a small
resolver from words to an identifier.

In canli-markets-mcp 0.1.0, `economic_series` took a FRED series ID or plain words. The plain-word
path scored each of its 47 common series by the share of the request's words found in the series
description, and took the best one if at least half matched:

```js
const words = s.toLowerCase().match(/[a-z0-9&]+/g) ?? [];
const scored = COMMON_SERIES
  .map(([id, text]) => [id, words.filter((w) => text.split(" ").includes(w)).length / words.length])
  .sort((a, b) => b[1] - a[1]);
if (!scored.length || scored[0][1] < 0.5) throw new NotFound(/* ... */);
return { id: scored[0][0] };
```

A request of two words needs only one shared word to reach half. The consumer price index is
described as "cpi consumer price index inflation all items", so "price" alone was enough:

| Request | 0.1.0 returned | Now |
|---|---|---|
| silver price | CPIAUCSL (US consumer prices) | refused, pointing to `price_history` |
| copper price | CPIAUCSL | refused |
| bitcoin price | CPIAUCSL | refused |
| japan inflation | CPIAUCSL | refused, pointing to `world_economy` |
| uk unemployment rate | UNRATE (US unemployment) | refused |
| wage growth | A191RL1Q225SBEA (real GDP growth) | CES0500000003 (average hourly earnings) |
| house prices | refused | CSUSHPINSA (Case-Shiller home prices) |
| inflation | CPIAUCSL | CPIAUCSL |
| 10 year treasury yield | DGS10 | DGS10 |

Every wrong answer came back as a real series with real numbers. The result did carry the series
title, so the mistake was there for anyone who read it. Nothing made an agent read it.

The words that decide each question ("silver", "japan", "uk") are the ones that matched nothing.
The words that did match ("price", "inflation", "rate") say what kind of number is wanted, not
which one.

## The rule that replaced it

One function now serves three resolvers: FRED series, World Bank indicators and OECD outlook
measures. Each word of a request falls into one of three groups:

- **Filler** is ignored: "what is", "show me", "since", "this year", and four-digit years.
- **Kind words** say what sort of number: rate, growth, index, level, daily, monthly. They count
  toward the best match but are never required.
- **Specific words** are everything else, and every one of them must appear in the entry.

```js
export function matchWords(entries, textOf, request, vocab) {
  const asked = split(request).filter((w) => !vocab.filler.has(w) && !/^(1[89]|20)\d\d$/.test(w) && !/^[a-z]$/.test(w));
  const specific = asked.filter((w) => !vocab.kind.has(w));
  if (!specific.length) return null;
  let best = null, most = 0;
  for (const entry of entries) {
    const has = new Set(split(textOf(entry)));
    if (!specific.every((w) => has.has(w))) continue;
    const shared = asked.filter((w) => has.has(w)).length;
    if (shared > most) { best = entry; most = shared; }
  }
  return best;
}
```

When nothing qualifies, the tool says so and says where to look: another country's economy is in
`world_economy` or `economic_outlook`, and the price of a commodity, currency, crypto or stock is in
`price_history`. An agent that gets that refusal can call the right tool next. An agent that got
consumer prices had nothing telling it to.

## Test the refusals first

The old tests checked that good requests found their series, and they all passed. None asked
whether a request for something the tool does not have gets refused. The test file now opens with
9 requests that must be refused, then 42 plain requests that must each resolve to one exact series.
The list of common series grew to 73 at the same time.

A resolver from words to identifiers is a search engine that returns one result. It needs a way
to return none, and the tests that prove it can are the ones to write first. The code is in
`mcp-markets/src/words.mjs` in the
[canlicapital repository](https://github.com/arhancanli/canlicapital), and the tool is part of
[canli-mcp](/mcp-servers).


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/the-split-that-ran-backwards
------------------------------------------------------------------------------

# The split that ran backwards

> From an August repair until 2026-09-14, my engine adjusted almost every stock split in the
> wrong direction, and every test passed. The data was right by its schema, the code was right by
> its tests, and the two disagreed about what one number meant.

**Published 2026-09-25. Every figure below is read from
[`split_direction_before_after.json`](/glassbox/split_direction_before_after.json), which runs
the same audit over the same stored splits twice: once through the price-adjustment code exactly
as it was before the fix, loaded from git and hashed, and once through the code as it is now.**

**Sources:** split_direction_before_after.json

## What a split does to a price series

On 2020-08-31 Apple split four-for-one. The closing price went from 499.23 to 129.04 overnight.
Nothing happened to the company. Each old share simply became four new ones.

A backtest that reads raw prices sees a crash on that day. So every research engine adjusts: the
prices before the split are divided by the split factor, which puts the whole history in today's
share terms, and the ex-date becomes an ordinary day. Apple's adjusted close the day before the
split should be 124.81, a normal step down to 129.04.

## What mine did instead

My data lakes store a split the way the data vendors publish it: new shares per old share. Apple's
split is stored as 4.

The adjustment code multiplied the pre-split prices by that number instead of dividing by it.
Apple's adjusted close the day before the split came out at 1,996.92. To anything reading the
adjusted series, Apple fell by more than nine tenths in one day.

It was not one bad row. The audit classifies a split as DOUBLED when the adjusted jump on the
ex-date is twice the raw jump, which is the signature of a factor applied upside down. Through the
old code, 4,272 of the 4,802 splits the audit can classify in the Polygon lake came out doubled.
In the Sharadar lake it was 4,000 of 4,440.

The momentum signal that picks the equity sleeve's stocks reads those adjusted prices. A stock
that had split inside its lookback window looked to the signal like it had collapsed.

## Why every test passed

There were two conventions, and each was consistent with itself.

- The data layer stored the vendor's factor, new shares per old. Its schema documents that.
- The adjustment code's tests encoded a two-for-one split as one half: old shares per new share.
  Against those fixtures, multiplying is exactly right.

Both sides had tests. Every test passed. No test put a real split from the lake through the real
adjustment code, so nothing ever compared the two conventions with each other.

It had also been worse before. Earlier, splits were not being applied at all, because of a
timing condition no stored split could satisfy. The August repair made them apply, in the wrong
direction, and the code's existing tests agreed with it. In September a research script noticed the inverted prices and worked around them locally, inside the script, without
touching the shared code. That workaround made one result correct and left the defect in place
for everything else.

## The fix

- The adjustment code now divides by the stored factor, and it refuses a factor that is zero or
  negative instead of producing a number.
- The code's own test fixtures now use the vendor convention.
- A new guard takes Apple's real 2020 split out of both production lakes, runs it through the real
  adjustment code, and checks that the day before comes out at a quarter of the raw price. That
  is the test that was missing: it checks the two sides against each other rather than each
  against itself.
- The research script's local workaround was removed, so there is one place where this is decided.

Through the current code, the same audit neutralizes 3,948 splits in the Polygon lake and 3,746
in the Sharadar lake.

## What is still not clean

Not every stored split follows the vendor convention. The audit finds 90 rows in the Polygon lake
and 93 in the Sharadar lake stored the other way up, most of them depositary-receipt ratio
changes. Under the fixed code those rows are now the wrong ones. I did not fix them by
re-inverting inside a consumer, which is how the September workaround hid the original defect.
Since 2026-09-23 a correction layer at the data reader applies corrections to them, each one
checked through the adjustment code, and the stored rows are left as the vendor sent them.

Nine days later I found that corporate actions had not been ingested at all for seven weeks,
because the weekly job that loads them had only ever been run by hand. Taken together, that was
enough to stop trusting the forward record built on those prices. I withdrew it in public on
2026-09-23 and restarted it on 2026-09-24 on data the engine can vouch for. The withdrawal and
what it covered are on the [progress page](/progress).

## What I took from it

A test proves that code does what its author believed. It does not prove that the author and the
data agree. The failures that survive a full test suite are the ones where two parts of a system
are each correct by their own definition. The only test that catches those is one that runs real
data from one side through the real code of the other.

The code is open, including the guard:
[canli-backtest](https://github.com/arhancanli/canli-backtest) for the backtester and
[canli-pit-lake](https://github.com/arhancanli/canli-pit-lake) for the data layer, both extracted
from [the engine](https://github.com/arhancanli/alphac).


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/the-trade-that-lost-99-percent
------------------------------------------------------------------------------

# The trade that lost 99 percent, and the guard I did not add

> A carry signal bought a token at 16.15 and closed it at 0.1553. The strategy was not
> broken. The interesting decision came afterwards, and it was to change nothing.

**Short title:** The trade that lost 99 percent

**Published 2026-08-27. Evidence: `crypto_lab_carry_crash_incident.json`, content hash
`sha256:0083a155a8`, source-bound to the paper execution database and the point-in-time
funding table by SHA-256.**

## What happened

On 2026-07-05 at 16:00 UTC the crypto carry sleeve opened a long in `BINANCE:PERP:LABUSDT`:
114 units at an entry price of 16.15. On 2026-07-30 at 00:00 UTC the scheduled rebalance closed
it at 0.1553 and opened a short.

Twenty-four days. A price return of **-99.0384 percent**, and after entry and close fees a
realised loss of **1,824.37** quote units.

The token did not drift down. It collapsed, and a venue delisted it.

## The signal was not wrong. It was answering a different question.

Funding carry on a perpetual future is not a directional bet. When funding is negative,
shorts pay longs, so holding a long collects a stream of payments. The signal asks: *who is
being paid to hold this?* It does not ask: *will this thing still exist next month?*

While the position was held there were 221 funding settlements. 68 were negative, with a mean
rate of -0.0017 and a minimum of -0.02. The first non-negative settlement arrived on
2026-07-08, three days in. Funding later changed sign, which is precisely why the scheduled
rebalance closed the long and flipped short: the carry had gone the other way.

So the sleeve harvested the carry it was designed to harvest, and the principal underneath it
went to approximately zero. Both statements are true at once. A strategy can execute its
mandate perfectly and still lose almost everything, and if your reporting cannot express that
sentence, your reporting is lying to you.

## First question: was this us, or was this the market?

Before writing anything about the market, the honest move is to suspect your own code. A 99
percent loss looks identical to a contract-identity defect: a stale symbol mapping, a
mis-scaled contract multiplier, a token that redenominated while the position record kept the
old units. Any of those would produce exactly this shape.

So the incident record binds two artifacts by hash and reads them rather than trusting memory:

- `var/trading_crypto_perp.sqlite`, `sha256:d5827f3e0248f2...`, the actual paper execution
  database with the three orders in it;
- `data/lake/funding/instrument_id=BINANCE:PERP:LABUSDT/year=2026/data.parquet`,
  `sha256:233336b834ce62...`, the point-in-time funding series.

And it cites independent, dated market evidence that has nothing to do with this system: third
party historical prices for the token across the July collapse, and a venue's public delisting
announcement.

The verdict recorded is `GENUINE_MARKET_CRASH_NOT_CONTRACT_IDENTITY_DEFECT`. The price really
did that. Our books are right.

That verdict is worth more than the loss cost, because the alternative finding would have
invalidated every crypto number the system has ever published.

## Second question: what do I change?

This is the part I want to argue for, because the intuitive answer is wrong.

The intuitive answer is a price-jump guard. Add a rule: exit any position that falls more than
X percent in a day, or refuse to enter instruments whose realised volatility exceeds some
threshold. It feels like risk management. It would have saved 1,824 units. It is easy to
implement and it would look responsible on a page like this.

The decision recorded is `PRESERVE_LOSS_NO_PRICE_JUMP_GUARD_NO_WEIGHT_CHANGE`.

Here is why. I have exactly **one** observation of this failure. A threshold chosen after
seeing that observation is not a risk control; it is a parameter fitted to a single point,
with the answer already visible. I could not tell you whether X should be 40 percent or 80,
and neither could the data, because there is one event and any X between them fits it equally
well. The honest name for choosing a number under those conditions is overfitting, and it does
not stop being overfitting because the motivation was prudence rather than performance.

Worse, the guard would have a second effect nobody measures: it would change the behaviour of
the sleeve across every instrument, in every regime, forever, on the strength of one July.
That trade has to be paid for out of the same trial budget as any other parameter, and its
benefit has to be demonstrated prospectively, not asserted.

There is a real design question underneath the incident, which is whether a carry signal
should size by funding alone or should also carry a survivorship or liquidity term. That is a
research question with a pre-registration and a holdout, not a patch. It stays open.

So the record keeps the loss, at full size, in the published equity curve, and adds nothing.

## Third question: what could I not answer?

The incident record contains a section I would rather not have had to write.

Position snapshots at the time retained quantity and average entry price, but **not** the exact
cycle mark or the instrument-level unrealised PnL. So the question "what did this position
look like on 2026-07-18?" cannot be answered from the record. It can only be estimated from
aggregate equity, and an estimate presented as a measurement is a fabrication.

The record says so, in the artifact, under `observability_correction`. The fix is prospective:
future paper cycles persist the exact order-book mark, the mark source, market value and
unrealised PnL through an additive nullable schema migration. It does not retroactively invent
the missing history, because there is nothing to invent it from.

An incident report that only documents what you can explain is marketing. The gap is the part
a reader cannot get anywhere else.

## What this episode does not explain

One boundary, stated because it would be easy to imply otherwise: the LABUSDT long closed on
2026-07-30. The flagship forward record starts on 2026-08-07. The incident is classified
`PRE_FLAGSHIP_WINDOW_DOES_NOT_EXPLAIN_CURRENT_FORWARD_LOSS`.

If the published forward record is negative, this trade is not the reason, and reaching for it
as an explanation would be convenient and false.

## The general rule

The three questions, in order, and none of them is "how do I stop this happening again":

1. **Is the loss real, or is it my accounting?** Bind the artifacts by hash and read them.
   Suspect yourself before you suspect the market.
2. **Do I have enough observations to justify a change?** One event supports a research
   question. It does not support a threshold.
3. **What can I not reconstruct?** Publish that gap in the same document, or the report is an
   advertisement.

The loss is on the curve. It is supposed to be.

*Source: [`/glassbox/crypto_lab_carry_crash_incident.json`](/glassbox/crypto_lab_carry_crash_incident.json).
Every figure in this note is in that artifact; none is typed here from memory.*


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/what-competitive-programming-bought
------------------------------------------------------------------------------

# What competitive programming actually bought me, and what it did not

> There are no segment trees in this trading engine. I want to explain why that is the right
> answer, and what the contest habit did pay for instead, because the honest version of this
> story is more useful than the flattering one.

**Short title:** What competitive programming bought me

**Published 2026-08-27. Code links go to the published extractions; the measurement at the end
is reproducible from the snippet given.**

## The flattering version

The tempting thing to write is that competitive programming gave me a toolkit of exotic data
structures, and that a backtest engine is where they finally paid off. Segment trees for range
queries over time. A Fenwick tree for rolling aggregates. Union-find for grouping correlated
instruments.

That would be a nice story. Here is the actual inventory of the engine's source tree:

- `bisect`, in two files;
- `deque`, in one;
- no segment tree, no Fenwick tree, no union-find, no explicit priority queue.

Knowing when a structure is not the answer is most of what the training is for. A segment tree
buys you `O(log n)` range updates **interleaved with** queries, online, in arbitrary order. My
range updates are not interleaved with queries and they are not online. They arrive as a batch
of intervals, all known in advance, and are consumed as one dense array afterwards. That is the
case where you paint the intervals and skip the tree entirely.

Reaching for the sophisticated structure there would cost a log factor, several hundred lines,
and a new place for an off-by-one to live. The contest instinct that actually matters is
recognising which problem you have, and the answer here is "offline range assignment", not
"dynamic range query".

## What it did buy, one: the boundary is where the bug is

This engine is full of "what was true at time t" questions. Trading calendars are the sharpest
case, because the naive answer is arithmetic and the arithmetic is wrong.

The naive next bar after timestamp `ts` is `ts + tf.ms`. Add a day to Friday and you get
Saturday, a session that does not exist. Nothing raises. You get a phantom bar, your strategy
"trades" on it, and your backtest quietly earns returns on a day the exchange was shut.

The real answer is a predecessor and a successor query over the sorted array of session opens:

```python
# last session open at or before ts
idx = bisect.bisect_right(opens, ts) - 1
if idx < 0:
    raise ValueError(f"ts {ts} precedes the first XNYS session {opens[0]}; widen the horizon")
return opens[idx]

# first session open strictly after ts
idx = bisect.bisect_right(opens, ts)
if idx >= len(opens):
    raise ValueError(f"ts {ts} is at or past the last cached session; widen the horizon")
return opens[idx]
```

Three details, all of them contest reflexes:

**`bisect_right` minus one, not `bisect_left`.** For "at or before", `bisect_right` puts you
past every element equal to `ts`, so stepping back once lands on `ts` itself when it is a
session open. `bisect_left` minus one would skip it and silently return the *previous* session
whenever you ask about a real trading day. Both are one-liners. One is wrong in a way that only
shows up on exact matches, which is to say on the boundary.

**The empty-side guards raise; they do not clamp.** `idx < 0` means the question is outside the
cached horizon. Returning `opens[0]` there would be an answer, and it would be a lie: the caller
asked about 1994 and would receive a 1997 session as though it were the truth. Clamping is how
a range error turns into a plausible number. The contest version of this is returning `0` for an
out-of-range query and watching the judge disagree on test 14 with no idea why.

**The interval is half-open.** `[effective_from, effective_to)` throughout, everywhere, without
exception. Which brings me to the second thing.

## What it did buy, two: consistency between two implementations of the same predicate

Universe membership is stored as intervals. "Was instrument `i` in the universe at time `t`?"

There are two implementations of that predicate in the codebase, and they must agree exactly:

- `membership_asof(t, i)`, the scalar version, used for point queries;
- `_membership_mask(...)`, which produces the whole boolean grid at once for research panels.

If those two disagree on a single boundary, a backtest and its own diagnostics report different
universes and nobody notices until a number cannot be reproduced. The scalar version defines the
predicate as `effective_from <= t` and (`effective_to` is null or `> t`). The vectorised version
has to reproduce that exactly, which it does by using `side="left"` on **both** searches:

```python
lo = int(np.searchsorted(ts_grid, eff_from, side="left"))
hi = ts_grid.size if eff_to is None else int(np.searchsorted(ts_grid, eff_to, side="left"))
if lo < hi:
    member[lo:hi, j] = True
```

`side="left"` at `lo` includes a grid point landing exactly on `effective_from`. `side="left"` at
`hi` excludes one landing exactly on `effective_to`, and Python's own half-open slice
`member[lo:hi]` then does the rest. The half-openness of the interval and the half-openness of
the slice line up, so the boundary case needs no special handling at all.

Instruments with no interval stay `False` everywhere, and consumers reindex with
`fill_value=False`, so a coverage gap is a non-member rather than a silent `True`. Fail closed at
the edge: the same instinct as raising instead of clamping.

## What it did buy, three: seeing the rewrite immediately

The naive way to build that grid is the obvious way. For every `(t, i)` cell, call
`membership_asof(t, i)`. It is correct, it is readable, and on a research panel it is unusable.

The rewrite is the one every contest teaches: **stop asking per element, start assigning per
interval.** Instead of one point query per cell, do two binary searches per interval and one
vectorised slice assignment. The cost stops scaling with the number of cells you are asking
about and starts scaling with the number of intervals you actually have, which is smaller by
orders of magnitude.

Measured on a grid the size of this project's equity panel, 7,500 sessions by 3,000
instruments, 22.5 million cells, 9,000 membership intervals:

| approach | time |
|---|---:|
| per-cell point query (1% sample, extrapolated) | 3.9 s |
| two searches per interval, then paint | **0.022 s** |

About **180x**, and the gap widens as the panel grows, because one side scales with cells and
the other with intervals. That is the whole trick, and it is the same trick as a difference
array in a contest problem: the work belongs on the edges of the ranges, not on the points
inside them.

The comment in the source says it more bluntly than I would have: *one `searchsorted` pair per
interval, NEVER a per-row `membership_asof` sweep*.

## The part that transfers, and the part that does not

What does not transfer: the exotic structures, mostly. Real systems are dominated by input and
output, by data that does not fit the shape you want, and by correctness constraints that make
the clever version unmaintainable. I have written far more code deciding *what is knowable at
time t* than optimising anything.

What transfers, and I did not expect how much:

1. **Suspicion of the boundary.** Every time I have found a genuine bug in this engine, it lived
   at an edge: the first bar, the last session, the exact-equality case, the empty set. Contests
   train you to test `n = 1` before anything else.
2. **Half-open intervals, always.** Not because they are elegant, but because mixing conventions
   between two functions that implement the same predicate is a bug you cannot see in either
   function alone.
3. **Failing loudly at the edge of the domain.** Clamping produces plausible answers, and a
   plausible wrong answer survives review.
4. **Knowing the structure you are choosing not to use.** "No segment tree here, because the
   updates are offline" is a decision. Never having heard of one is not.

The engine has no clever data structures in it. That is the result of the training, not the
absence of it.

*Code: [`core/calendar.py`](https://github.com/arhancanli/canli-pit-lake/blob/main/src/alphaforge/core/calendar.py)
and [`data/universe/store.py`](https://github.com/arhancanli/canli-pit-lake/blob/main/src/alphaforge/data/universe/store.py)
in `canli-pit-lake`. Both are byte-identical to the engine behind the public record, and CI
proves it on every push.*


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/notes/would-it-beat-a-placebo
------------------------------------------------------------------------------

# Your backtest beat a t-test. Would it beat a placebo?

> In 300,000 simulated tests on markets with nothing to predict, a t-test on the best rule of a
> grid said "edge" between 10.9% and 78.9% of the time at a nominal 5%. A placebo test, which
> reruns the whole pipeline on the same returns in a random order, stayed between 4.6% and 5.5%.

**Short title:** Would your backtest beat a placebo?

**Published 2026-10-11. The rule, the run and the evaluation were pre-registered and are in
[the repository](https://github.com/arhancanli/canlicapital/tree/main/scripts/research/placebo/v1);
every rate below is read from
[`placebo-v1-evaluation.json`](/glassbox/research/placebo-v1-evaluation.json).**

## Two things that look like skill

You test 11 moving-average crossovers on five years of daily prices. The best one has a Sharpe of
1.2, and a t-test on its returns says p = 0.01. Is it real? Two things can produce that result
without any skill.

**The search.** The best of 11 rules is the best of 11 draws, and even with no edge the maximum is
high. On flat simulated markets, an 11-rule SMA grid's best Sharpe averaged 0.30 with nothing to
find. That is what Bonferroni and the deflated Sharpe ratio correct for, if you know how many
rules you really tried.

**What the market does on its own.** A long-only rule earns the drift of a rising market without
predicting anything. A cross-sectional ranking that buys past winners earns the gap between assets
with different long-run average returns, again without predicting anything. A t-test on a
strategy's returns asks "did it make money?", not "did it predict?", so drift and dispersion pass
for skill, and dividing the significance level by the number of rules does nothing about that.

## The placebo

Keep your data's returns, but put the days in a random order, the same order for every asset. Each
asset keeps its own returns, fat tails and average; each day keeps its cross-section; but nothing
about one day tells you anything about the next. That is a placebo: a market with the same raw
material and nothing to predict.

Then run the whole pipeline on the real data and on 19 placebos: the same search, the same filters,
the same parameter choices. If the real result beats all 19, the chance of that by luck is 1 in 20,
a p-value of 0.05. Every choice the pipeline makes is counted, because it makes it again on every
placebo, and drift and dispersion are in the placebos too, so they stop looking like skill.

When the days are interchangeable this p-value is exact, because the real ordering is just one of
the orderings. Volatility clustering breaks that, so the study measured it.

## The study

The rules were written down before anything ran: three ways of reordering (a full permutation, a
permutation of blocks of days, and a stationary bootstrap), a bar of at most 6% false positives at a
nominal 5% in every simulated market, and the rule that picks the winner.

- **Markets with nothing to predict:** five return shapes (normal, fat-tailed, negatively skewed,
  GARCH volatility clustering, volatility regimes), each flat or drifting, or, for the
  cross-section, with equal or dispersed average returns.
- **Pipelines:** an SMA crossover grid, a time-series momentum grid and a cross-sectional momentum
  grid, each reporting its best Sharpe.
- **30 combinations with 10,000 tests each,** with 19 placebos per test, and planted trends with
  2,000 tests each to measure power.

The full permutation met the bar in all 30: 4.6% to 5.5%, including the GARCH and regime markets.
The block permutation also met it, at 5.8% at worst, with less power. The stationary bootstrap was
far too cautious, never above 1.5%, so it would miss real edges.

The usual fix for testing many rules, Bonferroni, held in flat markets but said "edge" 8.0% to
10.3% of the time when the market drifted upward, and 58.5% to 59.7% of the time when assets
differed only in their average returns.

How often does the placebo catch a real edge? With a planted trend that a perfect forecaster would
trade at a Sharpe of about 2, the SMA grid beat all 19 placebos 45.1% of the time and the
time-series grid 47.3%; at a Sharpe of about 1, both were near 14.8%. The cross-sectional grid
caught its strongest planted trend 89.0% of the time. With only 19 placebos, Bonferroni catches some
trends more often in flat markets, where it is valid; more placebos give a finer p-value.

## What it does not tell you

Beating the placebos shows that the real order of your returns holds more than random orders of
the same returns. It says nothing about costs, capacity or whether the edge lasts. And it counts
only the search this pipeline runs: if you tried and dropped other pipelines before this one, those
trials are not in the number.

The placebo is the `placebo_test` tool in [canli-mcp](/mcp-servers): `plan` writes your price file
and the placebo files, you run your pipeline on each, and `compare` returns the p-value. It runs on
your machine, so your code never leaves it.


==============================================================================
RESEARCH CORPUS: 114 DOCUMENTS, INCLUDING EVERY FAILED CANDIDATE
==============================================================================


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/active-ownership-item4-v3-feasibility
------------------------------------------------------------------------------

# Active ownership escalation — Schedule 13D Item 4 source-schema v3

**Short title:** Active ownership Item 4 v3
**Author:** Arhan Canli
**Declared:** 2026-08-16 after v2 closed `DATA_GATED` and before running v3 aggregate results.
**Stage:** document/classifier feasibility only. Prices, returns, event outcomes, and portfolio data
remain forbidden; zero return identities are spent.

## Why v3 is a source correction, not parser tuning

V2 used the unchanged 160-accession sample and added the SEC structured Schedule 13D schema, but
the implementation required the primary bytes to begin with an XML declaration. Actual EDGAR SGML
wraps structured primary documents inside an outer `<XML>` envelope, so all ten sampled 2025
structured filings bypassed the schema parser. One legacy submission also contained two exact-form
documents; the v1/v2 parser ignored the standard SGML sequence field and therefore could not select
the sequence-1 primary document.

V3 may change only these source mechanics:

1. unwrap one outer EDGAR `<XML>` envelope before parsing the namespaced `edgarSubmission` tree;
2. when multiple exact-form documents exist, retain the unique document whose SGML `<SEQUENCE>` is
   `1`; and
3. retain the v2 structured `item4/transactionPurpose` extraction and legacy heading patterns
   unchanged.

No heading phrase, minimum length, active-intent classifier, ownership regex, sample row, threshold,
or label is changed. The original 160 accessions remain frozen. This protocol does not replace or
erase either failed result.

## Unchanged machine and human gates

- 160/160 submissions succeed;
- at least 98% have one exact primary after the sequence-1 rule;
- at least 90% yield Item 4;
- every positive classification retains a source sentence;
- positive class rate remains between 10% and 90%; and
- the frozen 48-row human audit must eventually achieve at least 95% positive precision, 80% recall,
  and 90% exact ownership agreement.

Machine success with incomplete labels is `HUMAN_AUDIT_REQUIRED`, not a pass to returns. Any machine
failure is `DATA_GATED`. The unchanged sample may be used as a source-schema regression corpus; a
future return protocol still requires a disjoint untouched event holdout.

## Pre-label scoring clarification — 2026-08-22

The original scorer left `ownership_exact_rate` permanently null, making the declared ownership
gate impossible to pass even after all labels were complete. Before any of the 48 human labels was
opened, the scoring contract was therefore completed as follows: the frozen machine percentage
output is the sole candidate when exactly one candidate exists, and `unresolved` otherwise. Exact
agreement requires equality to the human percentage or agreement on `unresolved`; there is no
tolerance, inference, summation, or post-label rule selection. This clarification does not alter the
regex, corpus, thresholds, classifier, or machine results and can make the gate fail.

The blind packet under `artifacts/labeling/active_ownership_13d_item4_v3_blind/` contains all 48
source excerpts, an empty review sheet, a blank independence-attestation template, exact frozen
labeling rules, and a standard-library-only verifier in deterministic shuffled order. The
authoritative packet identity is the self-verifying `content_hash` in `manifest.json`; no copied
hash in this prose may supersede it. Before labeling, the independent reviewer runs
`python3 verify_review.py` and proceeds only on `PACKET_VALID`. After completing copies named
`completed_labels.csv` and `completed_attestation.json`, the reviewer reruns the verifier and
returns exactly those two files only on `REVIEW_RETURN_VALID`.

The governed importer independently verifies the manifest, source lineage, immutable row metadata,
templates, completed files, and independence attestation before it can alter the canonical frozen
labels. The packet and its deterministic handoff archive deliberately exclude machine
classifications, matched sentences, percentage candidates, prices, and returns. Structural
verification cannot itself prove reviewer independence or label correctness; those remain the
reviewer's attested responsibility and the subsequent frozen scoring gate.

## Prospective gate-interpretation audit — 2026-08-26

Before any human labels or return data were opened, the discrete reachability and statistical
meaning of the 48-row gate were audited in
`docs/design/ACTIVE_OWNERSHIP_HUMAN_GATE_AUDIT.md`. The existing 95% precision, 80% recall, and 90%
ownership point thresholds remain unchanged. They govern eligibility to proceed to return
preregistration; they do not, by themselves, establish confidence-bound classifier accuracy.

The frozen packet contains eight machine-predicted positives, so the precision point gate requires
8/8 and fails on one false positive. Even 8/8 has a one-sided 95% exact lower bound of only about
68.8%. Any passing report must therefore publish raw confusion counts, point metrics, and exact
confidence bounds. Before sleeve admission, a disjoint independent confirmatory corpus must meet
the same thresholds on one-sided 95% exact lower bounds. This interpretation was fixed while all
48 human labels remained blank and zero return identities had been spent; it cannot rescue a known
classification or investment outcome.

## Machine outputs

- `artifacts/feasibility/active_ownership_13d_item4_v3/document_audit.parquet`
- `artifacts/feasibility/active_ownership_13d_item4_v3/frozen_human_labels.csv`
- `artifacts/feasibility/active_ownership_13d_item4_v3/result.json`

## Claim boundary

V3 can establish document extraction feasibility only. It cannot establish classification accuracy
until frozen labels are complete, and it cannot establish returns, Sharpe, drawdown, correlation,
capacity, or sleeve admission.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/alphamax-equity-momentum-lineage
------------------------------------------------------------------------------

# AlphaMax equity momentum: signal, trial lineage, and evidence boundary

**Short title:** AlphaMax equity momentum: complete trial lineage

**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `alphamax_equity_momentum`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-24

## Abstract

AlphaMax is ALPHAC's US-equity long/short momentum program. Its canonical signal is 12-minus-1
cross-sectional momentum: rank securities by split-adjusted return from approximately twelve
months ago through one month ago, then hold a dollar-neutral long/short portfolio. This paper
does not present a single favourable backtest as proof. It reconciles the entire charged family:
115 distinct hypothesis identities recorded from 2026-06-20 through 2026-08-17 across the primary
and Sharadar research ledgers.

The evidence is deliberately uncomfortable. A frozen 2023–2026 construction reported net Sharpe
0.91 and maximum drawdown 8.68% in the persisted deployed-path artifact. The later, preregistered
2005–2026 replication reported net Sharpe approximately -0.05 and a drawdown exceeding one third, failing
its DSR and return gates. Construction studies did not rescue the family: a 4-by-4 weighting and
breadth grid failed its family-wise Reality Check, and beta-neutral, volatility-scaling, and
short-tail modifications were not adopted. The correct claim is therefore not “momentum is
proven.” It is that AlphaMax is a live paper research sleeve with a plausible mechanism, a selected
short-window survivor, a failed deep-history replication, and an explicit forward burden of proof.

## Claim boundary

This paper supports four claims only:

1. The economic hypothesis and implementation can be stated precisely.
2. Every charged identity in this family is enumerated in the public machine-readable manifest.
3. Positive, null, and negative results are preserved together, including later corrections.
4. Current paper trading is forward evidence collection, not external attestation and not proof of
   the governing Sharpe or drawdown objectives.

It does **not** establish a forward Sharpe, expected maximum drawdown, future return, investment
capacity, or live-money performance. The program remains paper-only and not externally attested.

## Economic mechanism and falsifiable hypothesis

The hypothesis is delayed cross-sectional price adjustment: stocks with high intermediate-horizon
returns continue to outperform recent losers for a limited horizon. ALPHAC excludes the most recent
month because short-horizon reversal can contaminate the continuation signal. The mechanism is
falsified for this implementation if a point-in-time, survivorship-aware, net-of-cost walk-forward
cannot produce positive and statistically defensible returns after the complete family-wide search
is charged.

The literature motivates a prior, not a result:

- Jegadeesh and Titman document intermediate-horizon return continuation and later partial
  reversal in US equities ([Journal of Finance, 1993](https://doi.org/10.1111/j.1540-6261.1993.tb04702.x)).
- Asness, Moskowitz, and Pedersen find common momentum structure across asset classes and connect
  it to funding-liquidity risk ([Journal of Finance, 2013](https://doi.org/10.1111/jofi.12021)).
- Daniel and Moskowitz show that momentum can crash during panic-state rebounds, making tail and
  regime tests load-bearing rather than decorative
  ([Journal of Financial Economics, 2016](https://doi.org/10.1016/j.jfineco.2015.12.002)).
- Barroso and Santa-Clara study volatility management as a response to momentum's time-varying
  risk ([Journal of Financial Economics, 2015](https://doi.org/10.1016/j.jfineco.2014.11.010)).
- Korajczyk and Sadka demonstrate that trading costs and capacity materially constrain momentum
  implementations ([Journal of Finance, 2004](https://doi.org/10.1111/j.1540-6261.2004.00656.x)).
- Novy-Marx isolates the intermediate horizon as the principal source of the effect
  ([Journal of Financial Economics, 2012](https://doi.org/10.1016/j.jfineco.2011.05.003)).

These papers do not validate ALPHAC's data, universe, execution, or selected configuration.

## Literature and overlap decision

The literature supports treating intermediate-horizon momentum as one economic family. It does not
support counting each allocator, universe, cadence, quality overlay, volatility forecast, or breadth
choice as an independent sleeve. ALPHAC therefore assigns all 115 identities below to one family,
charges every implementation to the union trial denominator, and grants the family at most one
portfolio-sleeve slot. Residual momentum, reversal overlays, and quality-conditioned momentum are
not credited as diversification unless future evidence demonstrates both an independent mechanism
and sufficiently low out-of-sample return correlation. None does so here.

## Exact ALPHAC implementation

The canonical feature is `eq_mom_252_21`:

```text
signal(i,t) = ln(adjusted_close(i,t-21) / adjusted_close(i,t-252))
```

The factor is computed on the equity session grid and cross-sectionally standardized inside the
point-in-time eligible universe. Corporate actions must be knowable by the decision timestamp;
universe membership is applied before cross-sectional transforms. Portfolio weights decided using
information through session `t` become effective on `t+1`, preventing same-close execution.

The pre-registered deep-history specification fixed a top-200 liquidity universe with hysteresis,
30 names per side, dollar neutrality, quarterly rebalancing, a trailing-126-session 12% volatility
target, 2.0-times gross cap, purged anchored-expanding walk-forward, and explicit equity costs. A
later operational construction used a wider top-2000 universe, 100 names per side, inverse-volatility
leg weights, quarterly signal horizon, and explicit commission, spread, latency, and borrow costs.
Those are different hypotheses. The ledger correctly charges changes in universe, breadth, cadence,
allocator, or signal; only `start`/`end` rolling-window changes are exempt from the hypothesis count.

## Trial lineage

The public manifest binds this family key to 115 distinct identities. The grouping below is an
accounting view, not permission to collapse the denominator.

| Identity group | Charged identities | Research question |
|---|---:|---|
| Canonical `eq_mom_252_21` | 23 | Universe, cadence, horizon, and walk-forward implementations |
| Weighting × breadth forensic grids | 48 | The 16-cell primary grid plus 16 no-drift and 16 volatility-guard return configurations |
| Construction forensic arms | 8 | Cadence, breadth, universe, and train/test attribution |
| Live-window hysteresis arms | 6 | Exit-band and minimum-hold settings on the selected K=30 construction |
| Deep-history turnover arms | 8 | Monthly/quarterly cadence crossed with baseline, hysteresis, hold, and combined settings |
| Volatility-scaling overlays | 5 | Whether alternative ex-ante risk forecasts improve the sleeve |
| Momentum + short reversal | 5 | Whether recent reversal repairs the core signal |
| Momentum + operating margin | 5 | Whether quality conditions the momentum exposure |
| Momentum + earnings yield | 3 | Whether value conditions the momentum exposure |
| Residual reversal | 1 | Whether residualized reversal adds independent information |
| Signal-to-noise momentum | 1 | Whether volatility normalization improves ranking |
| Momentum ensemble | 1 | Whether fixed horizon blending improves robustness |
| Short-horizon equity momentum | 1 | Whether a 63/42-session definition generalizes |
| **Total** | **115** | Every row remains in the family-wide search burden |

Machine labels covered by this family are `eq_mom_252_21`, `eq_rev_21`,
`eq_operating_margin`, `eq_earnings_yield`, `eq_rev_resid_21`, `eq_mom_sn_252_21`,
`eq_mom_ens`, `eq_mom_63_42`, `forensic_alphamax_construction`,
`forensic_alphamax_weighting`, `alphamax_hyst_live`, `alphamax_turnover`, and
`alphamax_volscale`. Variant identifiers remain attached to
their exact hypothesis keys in the manifest rather than being treated as independent economic
families.

The machine-readable source of truth is
[`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json). Select identities
where `research_family_key` equals `alphamax_equity_momentum`; each row provides the exact
`hypothesis_key`, immutable first measurement, source ledger, candidate papers, and missing packet
sections.

## Results and decisions

### Selected short-window artifact

The persisted `k30_dn_63` deployed-path artifact covers 2023-07-06 through 2026-06-01 and reports
net Sharpe 0.9071, cumulative return 24.54%, annualized volatility 13.07%, maximum drawdown 8.68%,
and annual turnover 4.11. It is the historical survivor that motivated paper deployment. These are
backtest statistics from a selected configuration, not forward performance.

### Fresh-vendor clean-workspace replay

On 2026-08-24, I reacquired the available Polygon stock data under the owner's current licensed
access, reconstructed the exact 375-identifier strategy-window universe union, sealed a private
input inventory, and ran the historical command at pinned source commit
`fd3e930f41b0a62b222ecda4ab83bae21a4ce9f2` in a temporary workspace outside the repository. The
current entitlement begins on 2021-08-23. It excludes 58 requested sessions from 2021-06-01
through 2021-08-20, so the manifest does not claim a complete historical universe lookback. The
gap precedes the first leg's training and test periods but intersects the global feature warm-up.

The replay did not reproduce the historical result exactly. Timestamps and configuration matched,
but the equity frame and log returns differed. The largest absolute equity-path difference was
$574.69. Historical annualized Sharpe was 0.9071; the fresh-vendor replay produced 0.9213. The
historical final equity was $124,536.21; the replay produced $124,987.26. Historical maximum
drawdown was 8.68%; the replay reported 8.60%. The 27-trial validation context was retained rather
than recomputed from a smaller search: historical DSR was 0.3406 and replay DSR was 0.3479. Both
failed the 0.95 portfolio-maturity threshold.

This is a failed exact reproduction even though the headline metrics are close and the fresh
result is slightly more favourable. The surviving 2026-06-20 artifact remains the historical
record and is not regraded. The divergence is consistent with at least one unrecovered historical
input difference, including revised vendor rows, exact per-date membership, corporate-action
state, or the unavailable warm-up interval. The available evidence does not identify a unique
cause. A reviewer must therefore treat the short-window result as version-sensitive and not as a
portable strategy reproduction.

### Deep-history preregistered replication

The 2005-01-04 through 2026-06-01 preregistered momentum run reports net Sharpe -0.0493, cumulative
return -15.07%, annualized volatility 10.66%, a maximum drawdown exceeding one third, and DSR below
the 0.95 gate.
It was killed under its preregistered rule. This contradiction dominates any honest interpretation:
the short-window survivor does not establish durable historical replication.

### Construction attribution

The eight-arm construction study showed that universe and cadence decisions materially changed the
measured result. On its common 2022–2026 basis, arm Sharpes ranged from 0.172 to 1.613 and DSR values
from 0.025 to 0.529. None met the complete admission standard. This dispersion is evidence of
specification sensitivity, not a menu from which to select the largest number.

The later 4-by-4 weighting/breadth grid used the 2005–2026 research panel. Challenger net Sharpes
ranged from -0.293 to +0.066 against -0.062 for the incumbent cell. Although individual cells could
look better, the preregistered White Reality Check returned p=0.315. Zero cells were adopted.

That report also generated two complete 16-cell robustness surfaces that were initially omitted
from the ledger. The no-drift modelling convention produced net Sharpes from -0.564 to -0.077;
the volatility-eligibility guard produced -0.245 to +0.081. They were explicitly labelled
robustness views, but they still changed portfolio returns and therefore still consume selection
identities. All 32 are now charged. Their persisted summaries do not preserve exact daily curves or
higher moments, so this correction cannot manufacture current-union DSR values for them.

Two turnover studies account for another 14 identities. The selected-window K=30 hysteresis screen
reported net Sharpes from 1.282 to 1.630 over only 728 sessions and large turnover reductions for
several exit bands. The deep-history broad-universe study, however, reported net Sharpes from
-0.192 to -0.134 across all eight cadence/hold settings. These are parameter screens, not new
sleeves; identical ex-post results under some minimum-hold settings are still charged because the
settings were separately tried. No short-window improvement is presented as a deep-history or
forward Sharpe result.

The beta-neutral study rejected its own premise: estimated market beta was approximately -0.014 on
the research panel but +0.319 on the live-book sample, and the treatment had opposite effects across
the two contexts. Volatility-scaling and short-tail controls likewise failed their adoption gates.
No failed construction is silently promoted into the paper program.

## Uncertainty, selection, and forward burden

The family-level annualized Sharpe observations in the identity manifest range from approximately
-0.744 to +1.813. That range is not a confidence interval; it is a warning about configuration and
sample sensitivity. ALPHAC applies its Deflated Sharpe Ratio against the union of every return
hypothesis across all research profiles, not only the variants displayed in this paper. As of this
evidence date that union contains 228 identities, and no current legacy restatement clears DSR
0.95.

The governing program objective is an honest forward Sharpe of 1.5 with expected maximum drawdown
near 11%, pursued across a diversified book of up to 14 sleeves. AlphaMax has not established those
targets. The only acceptable path is a sufficiently long, continuous, broker-reconciled paper record
followed by external replication or scrutiny. Targets are design objectives, never guaranteed
outcomes and never reasons to weaken a gate.

## Execution, costs, and capacity boundary

The research path models one-way equity costs including commission, half-spread, latency, realized
turnover, and short borrow. The strategy is dollar-neutral and positions drift between rebalances.
The backtester replays point-in-time corporate actions and applies next-session execution semantics.

Capacity claims remain conditional. Breadth and liquidity screens can support a modelled estimate,
but borrow availability, market impact, locates, crowding, and crisis liquidity require security-level
forward evidence. The website must therefore distinguish modelled capacity from broker-observed
execution and must not describe either as live-money proof.

## Reproduction map

Primary implementation and evidence paths:

- `src/alphaforge/features/library/equity_price.py`: canonical feature implementation.
- `docs/design/EQUITIES_SLEEVE.md`: point-in-time equity data and feature contract.
- `docs/design/PRE_REGISTRATION.md`: deep-history gate and fixed momentum specification.
- `var/experiments.jsonl` and `var_sharadar/experiments.jsonl`: immutable charged identities.
- `artifacts/walkforward/k30_dn_63/`: selected short-window backtest artifact.
- `artifacts/publication/alphamax_upstream_replay_manifest.json`: public hash-only binding to the
  private fresh-input packet, source reconstruction, rights boundary, and disclosed entitlement
  gap.
- `artifacts/publication/alphamax_upstream_clean_workspace.json`: author-run clean-workspace replay
  receipt and failed exact comparison.
- `artifacts/walkforward/prereg_momentum/`: preregistered deep-history result.
- `artifacts/sweep/alphamax_construction/`: eight-arm attribution study.
- `artifacts/probe/alphamax_weighting/`: family-wise weighting/breadth grid.
- `scripts/probe_alphamax_betaneutral.py`, `scripts/probe_alphamax_shorttail.py`, and
  `scripts/probe_alphamax_volscale.py`: rejected construction probes.
- `artifacts/research/trial_packet_manifest.json`: exact family/identity join and packet debt.

Reproduction requires the pinned project environment and licensed/source datasets represented by
the artifacts. Public artifacts permit claim auditing; they do not imply that every underlying
licensed market-data row can be redistributed.

## Packet completeness and legacy limitations

This family paper materially improves lineage coverage but does not retroactively create evidence
that did not exist. At publication time, the manifest still marks every identity packet incomplete.
In particular, some legacy identities lack a contemporaneous preregistration, complete return
series, or independently rerunnable data bundle. Those absences must remain explicit. A later
validator may bind this paper to exact identities and credit only sections it can prove; it must not
convert “documented legacy absence” into “verified preregistration.”

## Decision

**Research decision:** retain AlphaMax as a paper-only forward experiment; do not claim the
historical edge is established; do not adopt any failed construction enhancement; continue
broker-reconciled observation under the frozen operational specification.

**Publication decision:** publish the positive survivor, failed deep-history replication, complete
family trial count, and unresolved evidence debt together. Any future promotion requires new
forward evidence under unchanged gates, not a more flattering retrospective window.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/alphatrend-managed-futures-lineage
------------------------------------------------------------------------------

# AlphaTrend managed-futures trend: complete trial lineage and evidence boundary

**Short title:** AlphaTrend: managed-futures trend lineage  
**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `managed_futures_trend`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

AlphaTrend is ALPHAC's managed-futures trend program. It takes volatility-normalized directional
positions from medium- and long-horizon price trends across liquid exchange-traded market proxies,
then combines them under a covariance-aware risk budget. This paper reconciles all 21 charged
hypothesis identities in the family rather than presenting the strongest backtest alone.

The result is promising as a diversifier but statistically unresolved. Nineteen identities have
finite Sharpe estimates ranging from -0.238 to +0.345. Six identities retain complete
walk-forward artifacts, seven retain source-bound summary reports, and eight retain immutable
ledger summaries without full curves. Thirteen have persisted artifact-era DSR values; zero clear
the 0.95 gate. The 17-market baseline had Sharpe 0.289 and 9.69% vol-matched maximum drawdown in a
replica screen. Correlation whitening reduced Sharpe to 0.186, a single 110-session signal reached
0.271, and expanding to 33 ETFs reduced Sharpe to 0.128 while worsening vol-matched drawdown to
14.42%. AlphaTrend remains a paper evidence-collection sleeve, not an established forward result.

## Claim boundary

This paper establishes the implemented hypothesis, complete family trial count, persisted results,
evidence gaps, and historical decisions. It does not establish future return, an achieved forward
Sharpe, expected maximum drawdown, capacity, live-money performance, or external attestation.
Paper execution through Alpaca is clearly separated from historical simulation.

## Economic hypothesis and literature

The falsifiable hypothesis is that the sign and magnitude of an asset's medium-horizon excess-price
move contains information about its next return, and that combining trends across genuinely
different markets improves risk-adjusted performance. Possible mechanisms include slow information
diffusion, investor underreaction, positioning constraints, and compensation for bearing reversal
risk. These mechanisms motivate a prior; they do not validate ALPHAC's implementation.

- Moskowitz, Ooi, and Pedersen document time-series momentum across futures and forward markets
  ([Journal of Financial Economics, 2012](https://doi.org/10.1016/j.jfineco.2011.11.003)).
- Hurst, Ooi, and Pedersen examine long historical evidence for trend following
  ([Journal of Portfolio Management, 2017](https://doi.org/10.3905/jpm.2017.44.1.015)).
- Lempérière and coauthors study trend following over roughly two centuries and emphasize crisis
  behavior and risk management
  ([Journal of Investment Strategies, 2014](https://doi.org/10.21314/jois.2014.043)).
- Baltas and Kosowski analyze momentum and trend construction in futures markets
  ([SSRN working paper](https://doi.org/10.2139/ssrn.1968996)).

## ALPHAC implementation

The core signal blends three volatility-normalized price trends:

```text
trend(i,t,L) = [log P(i,t) - log P(i,t-L)] / [sigma(i,t) * sqrt(L)]
signal(i,t)  = mean(trend(i,t,63), trend(i,t,126), trend(i,t,252))
```

Weights are determined from information available through session `t` and become effective on the
next session. The principal ETF implementation uses 17 proxies spanning equities, rates,
commodities, and currencies, a 33-session volatility estimate, covariance-aware allocation,
monthly rebalancing, gross and name caps, 6 basis points per side, and 50 basis points annualized
short borrow. The full walk-forward path uses purged anchored-expanding windows. A separate
futures-proxy experiment is retained as a distinct identity because its instruments and data path
are different.

## Trial lineage

| Identity group | Charged identities | Evidence retained |
|---|---:|---|
| Core signal/cadence/universe studies | 14 | Six full walk-forwards; eight immutable ledger summaries |
| Allocator and signal-horizon screen | 3 | Source-bound summary report |
| Fixed and selected breadth screen | 4 | Source-bound summary report |
| **Total** | **21** | Every identity remains in the family and union burden |

The breadth count includes two post-hoc procedures: dropping the largest full-sample PnL
contributor and greedily adding markets only when estimated effective breadth rises. These are not
free diagnostics. They generated measured return configurations and are charged as selection
identities. Rounded equality between the ARP baseline and breadth baseline is not used to collapse
them because their exact return curves were not preserved together.

The machine-readable source of truth is
[`/glassbox/alphatrend_family.json`](/glassbox/alphatrend_family.json). It binds every hypothesis
key to the immutable ledger, strongest available artifact, source hash, exact configuration,
evidence grade, and missing measurements.

## Complete walk-forward evidence

| Configuration | Sharpe | Max DD | Turnover/yr | Artifact-era DSR | Decision |
|---|---:|---:|---:|---:|---|
| 63/126/252 blend, 17 ETFs, 21-session rebalance | 0.263 | 10.29% | 6.44× | ~0.000 | Fail DSR |
| 126-session signal | 0.175 | 13.32% | 5.47× | 0.704 | Fail DSR |
| 252-session signal | 0.182 | 11.52% | 4.93× | 0.700 | Fail DSR |
| Blend, 5-session rebalance | 0.278 | 10.91% | 12.31× | 0.798 | Fail DSR |
| Blend, 10-session rebalance | 0.311 | 10.19% | 9.39× | 0.816 | Fail DSR |
| Real-futures proxy path | -0.238 | 16.03% | 8.97× | ~0.000 | Fail DSR |

The highest complete-artifact Sharpe is not adopted as proof. It was one of several cadence and
signal choices, remained below the historical DSR gate, and increased turnover materially.

## Allocator and signal-horizon screen

All three rows share 5,161 sessions and are historical summaries without daily curves or kurtosis.
Maximum drawdown is shown after matching each stream to baseline realized volatility.

| Variant | Sharpe | Realized vol | Vol-matched max DD | Turnover/yr | Artifact-era DSR |
|---|---:|---:|---:|---:|---:|
| Baseline 63/126/252 blend | 0.289 | 4.49% | 9.69% | 4.65× | 0.000 |
| Correlation-whitened allocator | 0.186 | 2.75% | 12.76% | 7.79× | 0.000 |
| Single 110-session signal | 0.271 | 4.56% | 10.57% | 5.31× | 0.000 |

Correlation whitening did not improve the baseline. The 110-session signal was close but weaker.
Neither is promoted.

## Breadth experiment

| Basket/procedure | Sharpe | N_eff | Avg. pair correlation | Vol-matched max DD | Decision |
|---|---:|---:|---:|---:|---|
| Baseline 17 | 0.289 | 13.52 | 0.127 | 9.69% | Control |
| Expanded 33 | 0.128 | 11.01 | 0.250 | 14.42% | Reject |
| Expanded minus largest contributor (SHY) | 0.217 | 10.11 | 0.264 | 10.04% | Reject |
| Greedy N_eff-pruned 22 | 0.204 | 14.76 | 0.153 | 9.58% | Reject |

More tickers did not mean more independent bets. The 33-market expansion raised average
correlation, reduced effective breadth, reduced Sharpe, and worsened drawdown. The selected
22-market basket raised estimated N_eff relative to baseline but still reduced Sharpe. This is a
useful null: breadth acquisition must be exposure-aware and independently validated, not counted by
ticker quantity.

## Uncertainty, missing evidence, and capacity

Eight identities have only immutable ledger summaries; two of those have non-finite Sharpe because
their reduced instrument sets did not support a valid estimate. They remain charged and visible.
Summary-only ARP and breadth reports preserve no exact daily curves or kurtosis, so current-union
DSR cannot be honestly reconstructed for those rows. The family packet therefore reports original
DSR only where it exists and never substitutes a rounded estimate.

No persisted AlphaTrend capacity sweep measures market impact, ETF creation/redemption effects,
borrow availability, or stressed liquidity across AUM. Capacity is **unmeasured**. A gross cap and
liquid ticker list are implementation controls, not capacity evidence.

## Paper execution and forward burden

AlphaTrend is one of the broker-executed Alpaca paper sleeves. Its public paper record is useful
only if it remains continuous, broker-reconciled, and configuration-controlled. The record is too
short to establish a forward Sharpe or the program's expected maximum-drawdown objective. Historical
simulations selected from the 228-identity union cannot be relabelled as forward evidence.

The family earns at most one sleeve slot. It remains in evidence collection because the mechanism
is distinct and the paper program needs diversifiers, not because a backtest passed the governing
standard. Any production change requires a versioned declaration; any future research variant must
be registered before returns are inspected.

## Reproduction and provenance

Run from the repository environment:

```text
uv run python scripts/audit_alphatrend_family.py
uv run python scripts/build_trial_packet_manifest.py
uv run pytest -q tests/unit/test_alphatrend_family.py tests/unit/test_trial_packet_manifest.py
```

The audit reads only immutable experiment ledgers and persisted artifacts. It opens no holdout,
records no trial, and fails if identity count, artifact Sharpe, source hash, or evidence mapping
drifts. Authorship and research leadership are credited to Arhan Canli; that credit does not alter
the statistical claim boundary.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/alphavintage-macro-surprise-lineage
------------------------------------------------------------------------------

# Point-in-Time Inflation Surprise and the Equity Size Spread

## A corrected null, a deployment-governance failure, and a frozen forward experiment

**Author:** Arhan Canli, Founder and Quantitative Researcher, Canli Capital  
**System:** ALPHAC / AlphaC Algorithms · AlphaVintage sleeve  
**Version:** 1.0, 2026-08-23  
**Status:** public working paper; not peer reviewed  
**Capital boundary:** historical research simulation and a separately labelled Alpaca paper account

## Abstract

This paper reports a point-in-time inflation-surprise strategy applied to the dollar-neutral
IWM-minus-SPY equity size spread. The fixed specification constructs headline and core CPI
surprises from expanding AR(3) forecasts fit within each historical macro-data vintage, enters
after the vintage date, clips exposure, and charges 6 basis points one-way per leg. The original
active-day evaluation appeared to pass its four preregistered reading rules. Two subsequent
integrity findings changed that conclusion: a missing adjacent CPI observation could cause an old
change to be reused under a new vintage, and zero-exposure trading sessions were omitted from the
portfolio calendar. A single sealed correction, with no retuning and zero new hypotheses, produced
net Sharpe **0.2298**, Newey-West t-statistic **1.2673**, and maximum drawdown **-25.1%** over
6,296 sessions. The t-statistic failed the locked 1.5 threshold, so the research verdict is
**KILLED**.

AlphaVintage had entered an Alpaca paper account six days before that corrected verdict. It was
not removed after the result because the forward composition had already been frozen and because
historical portfolio diagnostics showed lower dependence and drawdown despite a slightly negative
book-Sharpe contribution. This is not presented as validation. It is a prospective paper-trading
experiment whose continuation, correction history, and conflict between standalone alpha and
portfolio diversification are disclosed here. The central result is therefore not a profitable
anomaly claim. It is an auditable case study in point-in-time data engineering, falsification, and
deployment governance.

## 1. Claim boundary

The corrected historical signal is **not research-admitted**. The Alpaca account is paper-only;
its broker-derived record is self-published, short, and not an independent attestation. Nothing in
this paper establishes funded performance, a forward Sharpe, an expected live drawdown, causal
price underreaction, or future returns. Repository publication is not peer review.

The paper distinguishes three decisions that are easy to conflate:

1. **Did the standalone historical signal pass its locked rule?** No.
2. **Did the sleeve historically diversify the specified four-sleeve book?** Descriptively yes on
   the measured window, though not prospectively established.
3. **Should it remain allocated?** No conclusion is drawn here. The current paper allocation is a
   frozen experiment, not an endorsement.

## 2. Motivation and prior evidence

Macroeconomic announcements can move equities through discount-rate, risk-premium, and cash-flow
channels. Pearce and Roley (1984) emphasize the unexpected component of announcements; Wachter and
Zhu (2018) study the concentration of equity premia around scheduled announcements; Modugno and
Palazzo (2025) relate aggregate activity and price news to equity-market and firm outcomes. Those
papers motivate studying macro news, but none establishes the specific delayed IWM-minus-SPY
effect tested here.

The data problem is equally important. Croushore and Stark's real-time-data work shows why the
vintage available to an historical decision maker can differ materially from today's revised
series. The Philadelphia Fed's Real-Time Data Set for Macroeconomists publishes vintage snapshots
for that purpose. CPI is released on a schedule maintained by the U.S. Bureau of Labor Statistics.
The strategy deliberately uses historical vintages rather than a modern revised history and
delays entry until the first trading close strictly after the recorded vintage date.

The proposed mechanism was that unexpectedly high inflation disadvantages small companies through
financing and margin channels, producing a gradual relative rotation from IWM toward SPY. This is
a falsifiable economic story, not evidence that the effect exists. The experiment does not isolate
financing costs, margins, institutional flows, or announcement-time reactions, so the mechanism
remains conjectural.

## 3. Frozen specification

The implementation is `scripts/probe_cpi_surprise_size.py`. Exactly one configuration was tried:

| Element | Locked value |
|---|---|
| Tradable instruments | IWM and SPY |
| Placebo market input | QQQ, used only for the QQQ-minus-SPY falsification test |
| Portfolio | dollar-neutral IWM minus SPY spread |
| Macro inputs | point-in-time headline CPI (`PCPI`) and core CPI (`PCPIX`) vintages |
| Forecast | expanding ordinary-least-squares AR(3), fit strictly before the new observation |
| Surprise | forecast residual divided by in-sample residual standard deviation, clipped to +/-3 |
| Composite | simple mean of headline and core standardized surprises |
| Weight | negative clipped surprise, bounded to [-1, +1] |
| Entry | close of first trading day strictly after the vintage date |
| Exit | next vintage date |
| Trading costs | 6 bp one-way on each leg at rebalance |
| Configurations tried | 1 |

Growth is differenced **within each vintage column**. Differencing a first-release series across
vintages can mix seasonal re-estimation and base changes. The corrected implementation additionally
requires the expected release month and its immediately preceding month to be finite. It skips an
unusable vintage rather than filling, interpolating, carrying forward, or relabelling an older
change.

The portfolio return calendar retains every exchange session between first and last exposure.
Sessions with no position receive an explicit zero. This is necessary because annualizing only
active observations changes the time basis of the estimator.

## 4. Preregistered decision rule and trial lineage

The candidate was to be added only if all four conditions held:

- standalone net Sharpe exceeded its correlation-adjusted book hurdle;
- Newey-West t-statistic was at least 1.5;
- the apparent portfolio benefit came from mean return rather than variance dilution; and
- a QQQ-minus-SPY placebo remained insignificant.

Failure of any condition meant `KILLED`. The CPI candidate spent one configuration. Five later
macro-vintage variants were declared and reported as the same information family, not independent
sleeves. The public family lineage therefore contains seven immutable identities. The correction
repaired the existing CPI identity and spent **zero** additional return hypotheses.

## 5. Integrity corrections

### 5.1 Missing-release fail-open defect

The historical lake contains no October 2025 headline or core CPI level. A later vintage could
contain November while the immediately preceding October value remained absent. The old
`diff().dropna()` path could then leave an older computable change at the tail and treat it as the
new release. The corrected rule requires the two adjacent latest months and otherwise emits no
signal.

### 5.2 Active-day annualization defect

The original curve persisted only days with nonzero exposure. That removed legitimate zero-return
sessions from the first-to-last portfolio interval. The corrected curve contains 6,296 portfolio
sessions, of which 5,998 are active. The former active-day net Sharpe of **0.3382** is superseded;
it is retained solely in the correction record.

### 5.3 Sealed re-evaluation

The correction protocol was written before revised performance was opened. AR lags, direction,
clipping, costs, timing, instruments, scale, and gates were unchanged. The revised result replaced
the prior result whether better or worse.

| Measurement | Corrected value | Reading |
|---|---:|---|
| Gross annualized Sharpe | 0.44100360008192313 | diagnostic |
| Net annualized Sharpe | **0.2298** | below any strong standalone claim |
| Newey-West t-statistic | **1.2673** | fails locked 1.5 gate |
| QQQ-SPY placebo Sharpe | -0.0205 | placebo remains dead |
| QQQ-SPY placebo NW t | -0.11700964029171129 | placebo remains dead |
| Maximum drawdown | **-25.1%** | economically material |
| Portfolio sessions | 6,296 | correct calendar basis |
| Active sessions | 5,998 | diagnostic only |
| Verdict | **KILLED** | binding result |

Three of four reading checks remained true; the significance check failed. A near-pass is a fail
under a preregistered conjunction. No threshold was lowered to preserve the sleeve.

## 6. Deployment chronology and governance finding

AlphaVintage first held a position in its dedicated Alpaca paper account on **2026-08-10**. The
corrected re-evaluation was sealed on **2026-08-16**. The public state continued displaying the
superseded 0.3403 Sharpe and 1.82 t-statistic until **2026-08-19**. That three-day publication lag
and the fact that deployment preceded the final corrected verdict are governance failures, not
footnotes.

The present system records the sleeve as paper-only, labels the corrected `KILLED` verdict, and
requires any composition change to begin a new declared forward epoch. Current broker
reconciliation confirms a dedicated active paper account and exact overlapping equity marks, but
it does not convert the historical null into alpha evidence.

The process lesson is concrete: deployment eligibility must require a machine-verified sealed
outcome, and public claims must be generated from the same artifact rather than copied into prose.
The project now treats correction latency and source binding as engineering controls.

## 7. Portfolio evidence: diversification without standalone validation

On the current 1,061-row common research window, AlphaVintage's correlations to the other sleeves
are +0.0393 to crypto carry, -0.0620 to equity momentum, and -0.0444 to managed-futures trend. Its
fixed-to-cash marginal contribution changes full-book research Sharpe from 1.7909 without the
sleeve to 1.7846 with it, a **-0.0063** delta. Thus the current exact study does not show a positive
historical Sharpe contribution.

An older composition comparison on the same row count found that including AlphaVintage reduced
average pairwise correlation from +0.0724 to +0.0260, increased the diversification ratio from
1.6425 to 1.9427, and reduced historical maximum drawdown from 3.81% to 2.75%. These are
retrospective composition diagnostics. They were known before this paper, are not independent,
and do not authorize a reweighting decision.

The distinction matters: a weak-mean component can reduce covariance and drawdown, but variance
dilution alone is not evidence of alpha. Conversely, deleting a frozen sleeve after seeing the
comparison would select the composition in sample. The forward experiment exists to resolve that
tension prospectively.

## 8. Execution, capacity, and unresolved realism

IWM and SPY are liquid exchange-traded funds, and monthly turnover is low by construction. That
does not make the backtest executable by default. The historical model uses a fixed 6 bp one-way
cost per leg and does not fully model bid-ask variation, short borrow availability and fees,
dividends on the short leg, locate failures, market impact, auction behavior, tax, or financing.
The historical maximum drawdown is large relative to the weak mean estimate. A publication-grade
capacity claim therefore remains **not established**.

The Alpaca paper record can test order generation, broker marks, holdings, fills, and operational
continuity. It cannot test borrow economics or market impact with real capital. Funded deployment
would require a new capital decision and a separately governed evidence standard.

## 9. Reproducibility and provenance

Canonical commands:

```text
uv run python scripts/probe_cpi_surprise_size.py
uv run python scripts/export_alphavintage_sealed_outcome.py
uv run python scripts/analyze_current_book_diversification.py
uv run python scripts/analyze_book_without_alphavintage.py
```

A PEP 723/`uv --isolated` path reacquired CPI vintages from the Philadelphia Fed and IWM, SPY, and
QQQ histories from Yahoo, then recomputed the core signal, returns, costs, significance, and
placebo outside the repository data tree. It matched 6,296 portfolio sessions, 5,998 active
sessions, both gates, and the `KILLED` verdict. Net-Sharpe and Newey-West-t differences were
0.0000006327801884142836 and 0.000004964325143186343; the largest of six metric differences was
0.00001345836069367723. Yahoo data
were not byte-identical (maximum relative price difference 0.0000013794), so the receipt says
numerically near-identical core reproduction. Its four-decimal tolerance was selected after the
observed drift and is diagnostic, not preregistered. This author-run replay excludes the separate
diversification-strategy generation, vendor-row redistribution, and independent human replication.

All three upstream benchmark strategies now have completed author-run replays, with different
outcomes. A temporary workspace extracted pinned source commit
`577555f12636e4df81e42a3940184678d0cceb7e`, copied a pre-refresh sealed snapshot of AlphaTrend's
408-file ETF lake plus its instrument and experiment state, and reran the declared 2003-01-01
through 2026-08-24 trend gauntlet. The resulting 5,191-row `mf_live_fwd/equity.parquet` is
byte-for-byte identical to the curve consumed by this trial; every timestamp, equity value, and log
return matches, and 466 of 467 output files match. Only `walkforward.json` differs: the committed
source sees 13 trials, whereas the historical run used the later 228-identity DSR union. The
historical DSR remains the published value and is not regraded.

AlphaMax was replayed in a clean workspace from a newly acquired 375-instrument Polygon panel.
Fifty-eight earlier lookback sessions were unavailable under the current entitlement, and the
fresh-vendor curve did not reproduce the surviving historical curve. Timestamps and configuration
match, but the maximum absolute equity-path difference is $574.69; annualized Sharpe is 0.9071 in
the historical artifact and 0.9213 in the replay. Historical and replay DSR values are 0.3406 and
0.3479, so both fail the 0.95 gate. The stored historical artifact remains unchanged. The replay
closes execution debt but not exact historical-input or output equivalence.

The historical `prereg_investment` comparison was replayed from the surviving Sharadar archives in
a separate temporary workspace. The loader rebuilt 24,085,990 price rows and the exact 6,835-name,
11,359-interval XUSE membership state. The strategy then reproduced all 779 output files byte for
byte, including the 5,385-row equity parquet and its 75-trial validation block. The first disclosed
attempt failed before strategy execution because the predecessor profile rebuilt only 1,050 XUSE
identities. The corrected attempt bound three run-critical files from the first post-run commit,
which restored the documented wide-universe state. This was source-lineage adjudication, not
performance tuning. `prereg_investment` remains a non-sleeve historical gate input whose original
run was not covered by its later preregistration.

These replays establish two exact historical strategy-output equivalences and one completed
fresh-vendor divergence. They do not recover every dirty historical source tree, grant vendor-row
redistribution rights, validate the non-preregistered comparison prospectively, or constitute
independent reproduction.

The sealed corrected curve is
`artifacts/probe/cpi_surprise_size/equity.parquet` with SHA-256
`d277c63ddf2bed6e9314aa863dbbf6adf3f4adb55bd89e8166aee4a19aab415f`. The result is
`artifacts/probe/cpi_surprise_size/result.json` with SHA-256
`686654b4617efb8322f6fda37f2e71a375423aecc6de03477a0186cf2844e509`. The auditable
restatement is `artifacts/engineering/alphavintage_sealed_outcome.json`. Trial identities are in
`artifacts/research/macro_economic_trend_family.json` and the union trial manifest.

The public bundle includes a versioned PDF, HTML and LaTeX source, machine-readable paper metadata,
environment bindings, a data-rights manifest, checksums, a software bill of materials, RO-Crate,
and the portable receipts. Data-rights review, exact AlphaMax historical-input recovery, a complete
multi-sleeve end-to-end reproduction, and independent human reproduction remain explicit blockers
before the release can be called externally replicated.

## 10. Limitations

- The surprise is an AR residual, not a survey-based market expectation.
- The vintage stamp is conservative but is not the exact BLS release timestamp for every month.
- The IWM-SPY spread is an imperfect proxy for firm-size exposure and can load on sector, quality,
  profitability, duration, and financing conditions.
- The Newey-West estimator does not solve all overlap, regime, and specification uncertainty.
- The 1.5 threshold is a preregistered reading rule, not a universal evidentiary standard.
- The family contains related macro tests; a single-configuration label does not erase broader
  research multiplicity.
- Historical diversification is measured on a post-2022 window and is not crisis-complete.
- The forward record is too short to support a performance or drawdown conclusion.

## 11. Conclusion

The point-in-time CPI-surprise size-spread hypothesis did not survive its corrected locked test.
That result remains published because a research platform is more credible when failed signals,
software defects, delayed corrections, and awkward deployment decisions are first-class evidence.
AlphaVintage's low measured dependence makes it a useful frozen forward experiment; it does not
make it a validated alpha sleeve. Success for this project means resolving that distinction with
time, broker-reconciled evidence, and independent reproduction, not changing the standard after
seeing the answer.

## References

- Croushore, D., and T. Stark (1999/2001), “A Real-Time Data Set for Macroeconomists: Does the
  Data Vintage Matter?”, Federal Reserve Bank of Philadelphia Working Paper 99-21 and *Journal of
  Econometrics* 105, 111-130. https://www.philadelphiafed.org/the-economy/macroeconomics/a-real-time-data-set-for-macroeconomists-does-the-data-vintage-matter
- Modugno, M., and D. Palazzo (2025), “Decoding Equity Market Reactions to Macroeconomic News,”
  Federal Reserve Finance and Economics Discussion Series 2025-007.
  https://doi.org/10.17016/FEDS.2025.007
- Pearce, D. K., and V. V. Roley (1984), “Stock Prices and Economic News,” NBER Working Paper
  1296. https://doi.org/10.3386/w1296
- U.S. Bureau of Labor Statistics, “Schedule of Releases for the Consumer Price Index.”
  https://www.bls.gov/schedule/news_release/cpi.htm
- Wachter, J. A., and Y. Zhu (2018), “The Macroeconomic Announcement Premium,” NBER Working Paper
  24432. https://doi.org/10.3386/w24432

## Authorship and contribution statement

**Arhan Canli** directed the research, specified the strategy and governance, built the software
and evidence system, investigated the corrections, and wrote the paper. He is responsible for
every claim, decision, and correction.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/alphavintage-missing-release-correction
------------------------------------------------------------------------------

# AlphaVintage missing-release correction protocol

**Declared:** 2026-08-16  
**Status:** REVISED RETURNS SEALED / VERDICT KILLED  
**Hypothesis-ledger impact:** zero new hypotheses; this repairs an existing identity.

## Confirmed defect

The point-in-time RTDSM lake has no October 2025 headline or core CPI level.  The December 15,
2025 vintage contains November, but its immediately preceding October level is null.  The locked
signal function computed monthly log differences, dropped null differences, and selected the last
remaining difference as the newly released surprise.  Consequently an older computable change
could be repeated under a later vintage date even though no new month-over-month CPI change was
computable.  This is fail-open behavior and can splice a stale signal into a new holding period.

## Correction locked before revised performance

For every monthly vintage dated `V`:

1. The newly released observation must be the calendar month immediately preceding `V`.
2. That observation and its immediately preceding calendar month must both exist and be finite.
3. If either check fails, the vintage emits no signal.  No fill, interpolation, carry-forward, or
   substitution is permitted.
4. Interior gaps remain missing; only adjacent finite monthly changes enter the AR history.
5. The signal may resume only when two adjacent latest monthly levels exist again.

The live writer imports the research signal function directly, so this one correction governs
both paths.  Regression tests must pin the exact November-present/October-missing shape before any
revised curve is generated.

## Re-evaluation rule

After code and tests pass, regenerate the existing AlphaVintage result once under the corrected
data rule.  Do not tune AR lags, sign, clip, costs, entry timing, instruments, scale, or gates.  The
revised result replaces the invalid result whether it improves or worsens.  Publish the before/after
metrics, changed vintage count, curve hash, code hash, and unchanged hypothesis count.  If any
admission gate no longer clears, remove the sleeve from research-validated/book arithmetic; do not
respecify it.

## Calendar-integrity defect found during re-evaluation

The prior curve persisted only `net[w.abs() > 0]`. That deleted zero-exposure trading sessions
inside the first-to-last activity window, including the monthly transition dates. An active-day
sample is not a portfolio return calendar and inflates annualization. The corrected curve retains
every trading session between first and last exposure and records an explicit zero when the sleeve
has no position. No return-bearing observation was added, removed, or tuned.

## Sealed outcome

The unchanged identity was regenerated once after both corrections. Calendar-correct net Sharpe is
`0.2298358829`, Newey-West t is `1.2673190577`, and maximum drawdown is approximately `-25.1%`
over 6,296 portfolio sessions (5,998 active sessions). The superseded active-day Sharpe was
`0.3382071994`. Gate `b_nw_t_ge_1p5` fails, so the final preregistered verdict is `KILLED` and
AlphaVintage is not research-admitted. This correction adds zero hypotheses.

- Curve SHA-256: `d277c63ddf2bed6e9314aa863dbbf6adf3f4adb55bd89e8166aee4a19aab415f`
- Result SHA-256: `686654b4617efb8322f6fda37f2e71a375423aecc6de03477a0186cf2844e509`
- Runner SHA-256: `80b55488c7caab97dcf121c7d0f744a05d80981f75aaa6529dc17613808c48ed`


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/author-protocol-approval-protocol
------------------------------------------------------------------------------

# Author review for approval-gated research protocols

**Owner and intended author:** Arhan Canli

**Current state:** two hash-bound blank packets; zero author protocol approvals

## Why this exists

The merger-announcement and Treasury-auction redesigns have passed their no-return structural
tests, but software cannot decide that Arhan understands or approves them. A chat reply also should
not silently authorize the next research stage without binding the exact protocol and evidence
versions being reviewed.

Each tracked packet therefore freezes the protocol SHA-256, evidence-file SHA-256, evidence content
hash, six author questions, six technical checks, the exact approval decision, and the narrow next
stage it would authorize. Every answer and judgment remains blank. The packets are preparation,
not approval.

## Current packets

- `merger-announcement-identity-v2` binds the disjoint no-return confirmation design. Its governed
  approval would authorize only acquisition and freezing of the 2006–2015 SEC confirmation corpus.
- `treasury-auction-state-machine` binds the no-return schedule state machine. Its governed approval
  would authorize only writing a separate return preregistration.

Neither decision authorizes a return run, sleeve admission, external submission, independent-review
claim, or performance claim.

## Workflow

Prepare a private response outside the tracked publication tree:

```text
uv run python scripts/verify_author_protocol_approval.py prepare \
  --review-key merger-announcement-identity-v2 \
  --output var/author_reviews/merger-announcement-identity-v2.json
```

or:

```text
uv run python scripts/verify_author_protocol_approval.py prepare \
  --review-key treasury-auction-state-machine \
  --output var/author_reviews/treasury-auction-state-machine.json
```

Arhan must personally complete every answer, confirm every technical check with evidence, disclose
all AI assistance, review every retained claim, record corrections, and bind the decision to the
current protocol and evidence hashes. He must also change the response status to
`AUTHOR_COMPLETED_RESPONSE`. Automation may explain a prompt but may not write, paraphrase, or
approve Arhan's response.

Verify a completed response without writing a tracked receipt:

```text
uv run python scripts/verify_author_protocol_approval.py verify \
  --input var/author_reviews/merger-announcement-identity-v2.json
```

Only after Arhan explicitly authorizes importing the verified result may an unused output path be
provided. The verifier refuses to overwrite an existing receipt.

```text
uv run python scripts/verify_author_protocol_approval.py verify \
  --input var/author_reviews/merger-announcement-identity-v2.json \
  --output artifacts/governance/author_protocol_approvals/merger-announcement-identity-v2-v1.json
```

## Fail-closed rules

Verification fails when a bound file changes, a question or technical check is absent, evidence is
missing, the AI-assistance declaration is incomplete, the decision differs from the registry, any
blocking issue remains, or the approved hashes do not match the current files.

A passing receipt is still self-attestation. It does not independently prove who typed the answers,
does not count as external review, and does not establish alpha, Sharpe, drawdown, diversification,
or sleeve admission.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/bond-etf-nav-dislocation-feasibility
------------------------------------------------------------------------------

# Bond-ETF NAV dislocation — locked no-return source feasibility protocol

**Short title:** Bond-ETF NAV dislocation: feasibility

**Declared:** 2026-08-16 before collecting issuer page payloads or computing historical coverage.
**Stage:** source and execution-measurement feasibility only. No ETF prices from a market-data
vendor, no TRACE transaction records, no returns, and no signal parameter may be opened.

## Frozen identity boundary

- Instruments: HYG and LQD, representing liquid US high-yield and investment-grade corporate-bond
  ETFs under one issuer disclosure format.
- Research period: 2016-01-01 through 2025-12-31.
- Economic identity: secondary-market correction of a valuation gap after distinguishing stale NAV
  from ETF price discovery. It is not authorized-participant creation/redemption arbitrage.
- Official issuer premium/discount is a source input, not a trade signal and not proof of mispricing.
- A future return protocol, if authorized, must enter no earlier than the next eligible session after
  all prior-day source values are public and must lock hedge, sign, horizon, costs, and stress rules.

## Frozen source routes

1. Fetch and hash the official iShares HYG and LQD product pages. Parse the embedded
   `performance.premiumDiscountChartData` dates and values without requesting ETF market history.
2. Fetch and hash each official `latest-holdings.csv`. This tests current schema only; it cannot be
   counted as historical holdings coverage.
3. Fetch FINRA's official TRACE historical-data information page and verify whether the stated
   transaction-level route requires an agreement/fees. Do not request transaction records.
4. Bind the SEC Rule 6c-11 disclosure requirement as source-contract evidence: recent daily data and
   recent premium/discount charts are not a permanent ten-year archive.

## Locked gates

All are required to advance to a separate licensed-data preregistration:

- issuer premium/discount dates cover at least 98% of XNYS sessions in 2016–2025 for each fund;
- at least one hash-addressed holdings snapshot per month exists for each fund (120 per fund), with
  CUSIP/identifier, quantity, weight, and an as-of date known before the next session;
- a transaction-level TRACE route with timestamps, price, size, corrections/cancellations, and
  stable bond identifiers is contractually available for the full period;
- constituent valuation timestamps and evaluated-price methodology are available point-in-time;
- ETF quote/trade data can support NBBO spread, latency, partial-fill, impact, and closing-auction
  stress, while underlying bonds support stale-print and no-trade treatment.

Failure of any gate is `DATA_GATED`. Passing does not authorize returns. Thresholds and routes are
not modified after collection. iNAV is not accepted as executable underlying value without a
separate stale-input audit.

## Machine outputs

- `artifacts/feasibility/bond_etf_nav_dislocation/issuer_premium_discount_manifest.parquet`
- `artifacts/feasibility/bond_etf_nav_dislocation/source_probe_manifest.parquet`
- `artifacts/feasibility/bond_etf_nav_dislocation/result.json`

## Claim boundary

This protocol measures source sufficiency only. It cannot establish a gap sign, threshold, return,
Sharpe ratio, drawdown, correlation, capacity, or sleeve-admission claim.

## Locked result

Both official issuer pages and current holdings files were retrieved and hash-bound successfully.
The embedded premium/discount series contains 249 target-period dates for each fund against 2,514
XNYS sessions in 2016–2025: 9.9045% coverage for HYG and LQD, far below the locked 98% gate. The
series begins on 2025-01-02, consistent with recent-disclosure availability rather than a permanent
ten-year archive. Each public holdings route supplied one current snapshot, versus 120 monthly
snapshots required per fund.

FINRA's official metadata confirms that transaction-level historical TRACE data exists through an
agreement and paid delivery route. No TRACE transaction was requested. Public issuer pages do not
supply the missing historical valuation timestamps or synchronized ETF/bond execution state needed
to distinguish stale bond marks from ETF mispricing.

**Decision:** `DATA_GATED`. Zero ETF market records, underlying bond transactions, returns, signs,
thresholds, horizons, or portfolio statistics were opened, and zero return identities were spent.

Machine-readable result:
`artifacts/feasibility/bond_etf_nav_dislocation/result.json`.

## Reachability classification — 2026-08-22

These four failures are not extraction-engineering tasks. A crawler cannot manufacture the
measured 0.8809546539379475 fractional issuer-coverage shortfall, 119 missing monthly holdings
snapshots per fund, point-in-time evaluated bond marks, or synchronized executable ETF and bond records. The
family is therefore `PAID_ARCHIVAL_AND_EXECUTABLE_DATA_REQUIRED`, not “nearest to passing.”

The next action is an owner spending and licensing decision. Purchasing access would authorize
collection only; it would not pass a gate, open returns, or admit a sleeve.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/borrow-execution-foundation
------------------------------------------------------------------------------

# Point-in-time securities-borrow foundation

AlphaForge now has tested primitives for security-level borrow availability, locates, fees,
recalls, and forced-buy-in deadlines, plus optional event-driven integration for locate caps,
dynamic fees, and recall cover orders. This is engineering evidence, not historical borrow
coverage, return evidence, or a sleeve-admission result. No market returns were opened and no
research hypothesis was spent.

## What is enforced

- Borrow quotes carry observation, availability, and exact validity timestamps.
- Easy, hard, and unavailable states are explicit. An unavailable quote cannot report lendable
  quantity.
- Locates may be granted, quantity-capped, or denied; a grant cannot exceed requested or observed
  availability.
- The required locate covers only incremental short exposure after netting long inventory and
  existing shorts.
- Security-level fees accrue on ACT/365 only when one quote covers the entire interval.
- Recall notices are point-in-time and cover no more than the recalled quantity or remaining short.
- A missed cover deadline becomes an explicit forced-buy-in instruction. No execution price or fill
  is fabricated.

When a borrow provider is supplied to the event-driven backtester, incremental short orders are
denied or quantity-capped from the PIT locate, and open shorts accrue the security-level fee whose
quote covers the complete holding interval. With no provider, the existing general-collateral path
and golden master remain unchanged.

Known recalls become reduce-only next-bar cover orders. Conflicting strategy orders are
superseded, deadline breaches are labeled `forced_buy_in`, and an obligation is reduced only by
the quantity actually filled. Dropped or partial orders therefore retry on later bars.

## Deliberate boundary

The platform does not yet ingest a historical securities-lending feed, reserve broker locates,
model rebates/collateral, persist outstanding obligations across process restarts, allocate
partial recalls across strategies, simulate buy-in auctions, or route and reconcile live orders.
Existing general-collateral assumptions and current broker
`easy_to_borrow` flags are not historical evidence.

The machine-readable capability statement is published at
[`/glassbox/borrow_execution_contract.json`](/glassbox/borrow_execution_contract.json).


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/cftc-hedging-pressure-feasibility
------------------------------------------------------------------------------

# CFTC hedging pressure — no-return feasibility protocol

## Scope

This stage audits only identifiers, dates, market labels and commodity classifications from the
CFTC Disaggregated Futures Only dataset (`72hh-3qpy`). It deliberately excludes producer,
dealer, managed-money and other position columns; it loads no prices and calculates no returns.

## Point-in-time constraint

CFTC says each report normally contains Tuesday positions and is released Friday at 3:30 p.m.
Eastern, with holiday exceptions. CFTC also says a complete history of actual release dates does
not exist and only the recent 13 months are available. Therefore `report_date + 6 days` is stored
only as a conservative Monday default; it is not called a verified release timestamp.

## Locked gates

1. At least 100,000 metadata rows and 15 calendar years.
2. At least 99% completeness for identity, report date, market and commodity identifiers.
3. Dataset IDs are unique even though CFTC does not warrant a formal primary key.
4. At least 98% of report dates are Tuesdays.
5. Exact historical release lineage covers at least 95% of observations.
6. A separately reviewed mapping from CFTC market codes to liquid tradable contracts is sealed.

The last two gates fail closed until evidenced. A structurally clean dataset cannot pass to a
return test without them.

## Next action and kill rules

If metadata gates pass but release lineage fails, publish `DATA_GATED`. A future branch may use
archived CFTC pages to reconstruct release dates or preregister a lag conservative enough to cover
known disruptions, but it must do so before returns are opened. Kill if release timing remains
unverifiable, contract mapping is unstable, lagged positions add nothing beyond trend and curve
carry, stressed costs fail, or correlation to AlphaTrend exceeds 0.35. No failed return identity
may be rescued by changing the sign, lag, normalization or market set.

## Reachability audit — 2026-08-22

The exact-release gate is now measured unreachable as preregistered. CFTC's
[COT documentation](https://www.cftc.gov/MarketReports/CommitmentsofTraders/index.htm) states
that no historical release-date list exists and only 13 months of release dates are available.
Even granting exact timestamps to every observation in that full window, only 8.37% of the
183,676 metadata rows could be covered, versus the locked 95% requirement. CFTC's
[special announcements](https://www.cftc.gov/MarketReports/CommitmentsofTraders/HistoricalSpecialAnnouncements/index.htm)
also document holiday, incident, and shutdown delays that make a universal Friday timestamp
false.

Building the fixed tradable-contract map is therefore not authorized for this protocol: it cannot
rescue the independent release-lineage failure, and the family registry already binds this
mechanism to the retired killed `cot_positioning` campaign. A future conservative-lag redesign
would require a new preregistered identity and a documented novelty distinction. It cannot be
called completion of this candidate.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/corporate-action-basis-reconstruction
------------------------------------------------------------------------------

# Reconstructing corporate-action basis without opening strategy returns

**Short title:** Corporate-action basis reconstruction  
**Author:** Arhan Canli  
**Project:** AlphaC Algorithms / Canli Capital  
**Research status:** Corrected reproduction complete; factor remains killed; global split gate failed

## Abstract

An immutable operating-margin replay exposed a corporate-action data defect: dividend values from
the frozen Sharadar ACTIONS archive were being treated as raw cash amounts even when they were
expressed on a later split-adjusted basis. This note records the diagnosis, issuer-anchored repair
contract, versioned materialization, full-lake validation, external cross-check, path-exposure
audit, exact issuer verification, and one fail-closed corrected reproduction. The dividend gate
passes after repair, while the global split-boundary gate remains failed. The corrected
operating-margin result improves materially but remains negative and **KILLED**; it does not earn
sleeve admission or production promotion.

## Trigger and preserved result

The valid historical operating-margin result remains **KILLED**: Sharpe
`-0.4173809362582861`, maximum drawdown `0.39623483315571484`, and final equity
`63911.64507926929`. A later apparent Sharpe of `0.2595404513705637` is rejected because its replay
was contaminated by unverified corporate-action units. The first divergence was a legitimate
RGLD dividend; the largest distortion was a CMCT cashflow produced by interpreting a split-adjusted
dividend as raw cash. Historical results are not rewritten by this investigation.

## Diagnosis and repair contract

Across 167,120 positive dividend rows, 422 exceeded the full pre-ex-date raw close. Applying the
product of same-ticker raw `action='split'` values on or after each dividend date reconciled 421 of
those 422 rows. Raw `adrratiosplit` rows were treated as metadata, not as a second executable share
mutation.

Apple provides the ordinary-event anchor. The frozen source contains a dividend value of `0.205`
on 2020-05-08 and a later four-for-one split. Their product, `0.82`, exactly equals Apple's
issuer-declared cash dividend. This supports—but does not elevate beyond inference—the following
normalization:

`raw cash amount = source dividend value × product of later same-ticker market split ratios`

The sole unresolved impossible row, VATE on 2020-05-14, was quarantined exactly after issuer and
independent-provider evidence failed to support it. A zero-value HDB marker was also quarantined
exactly. No amount was imputed. The source archive and original lake remain immutable. The sealed
repair receipt has content hash
`sha256:48fcfde04e3c7f7d28bc349c93b55911f97514317e74bac67fca80980b621e47`.

## Versioned materialization

The corrected corporate-action lake is a new physical version, not an in-place edit. It maps
171,924 base rows to 171,780 normalized rows: 167,118 dividends were normalized, 31,807 dividend
amounts changed, 142 ADR-ratio metadata rows were removed from execution, 4,662 market-split rows
were preserved, and exactly two source rows were quarantined. Non-corporate-action datasets are
hard-linked and the original lake is preserved by hash. The materialization receipt has content
hash `sha256:178c4564f9c5e0b917db752879c08a2f25c3133e614f92f0ecec6af3c33ef1c0`.

## Full-lake validation

The dividend gate passes: all 167,118 dividend rows were checked; zero exceed the full pre-ex-date
close; the maximum observed multiple is `0.9836065573770493`; and 259 rows lack a two-sided price
boundary and remain explicitly counted.

The split gate fails. Of 4,662 market-split groups, 4,189 are consistent, three would verify under
the reciprocal ratio, 109 have unexplained price boundaries, and 361 lack a two-sided price
boundary. In total, 473 failed or unverifiable events affect 401 instruments. The validation
receipt therefore records `CORPORATE_ACTION_VALIDATION_FAILED_SPLIT_BOUNDARIES`, content hash
`sha256:6ed09e42b6e6a744df4dfb3c9bbd927b58ac70a813c9c819a1592daa8afae583`.

The engine now fails closed when an exposed position or order encounters a split that violates its
price-boundary sanity check. It may no longer log the defect and continue with unconverted
exposure, which could fabricate profit and loss.

## Independent split cross-check

A GET-only Polygon reference audit downloaded 28,079 split records from 1997-12-31 through
2026-08-23 and cross-checked all 473 local failed or unverifiable events by
date and ticker alias. The external provider confirms the stored ratio for 114 events, confirms the
reciprocal of the stored ratio for one event (BMNR on 2021-04-27), reports a materially different
event ratio for two events (ACHC on 2011-11-01 and JHG on 2017-05-30), and has no matching event for
356. Three initially apparent conflicts resolve at the source's recorded five-decimal precision.

These classifications narrow the next investigation; they do not close the gate. Stored-ratio
confirmation does not explain a disagreeing or absent local price boundary. BMNR is a candidate
for a separately sealed reciprocal-ratio repair, not an authorized mutation. Conflicting and
unmatched events remain closed. The external cross-check receipt has content hash
`sha256:b401c5260988ba900d0acac857bfeda28a3cb353d6a18db3b9ef55890dc67a32`.

## Lifecycle and sealed-path accounting

The 473 failed or unverifiable events were then classified against each instrument's frozen price
lifecycle. Of these, 332 precede the first price, 23 occur on the first-price boundary with no
pre-existing exposure, five follow the final price, 112 occur within a price lifecycle, and one
lacks a frozen lifecycle. This narrows the global unresolved set without deleting a source event
or declaring the lake valid. The lifecycle receipt has content hash
`sha256:deed344bd2823f820e326b69f510f704a11b3ba3d2621100594da2600f78cb2d`.

Within the operating-margin window, 71 in-lifecycle failed events were audited against the sealed
historical order and position path. Fifty-one had independent-provider support and 20 remained
unresolved. Sixty-nine had no observed pre-boundary position or queued order. Exactly two were
held: ADTX on 2022-09-14 and SPCE on 2024-06-17. This is historical-path evidence, not an assumption
about an unseen counterfactual path. The exposure receipt has content hash
`sha256:c9d379d6a7bd9a7991f561e84162ba1f8c78715b32d540b7b56b6d179eaf6dfd`.

Issuer filings independently confirm ADTX's one-for-50 reverse split and SPCE's one-for-20 reverse
split on the exact stored dates. The corrected reproduction therefore accepted only two exact
`(instrument, ex-date, ratio)` tuples—ADTX at `0.02` and SPCE at `0.05`—as authorization to bypass
the price-gap heuristic. A wrong instrument, date, or ratio still failed closed. The exact-event
verification receipt used by that reproduction has content hash
`sha256:fa8595944365c27e6a8a49a490ccdafd7f37db31808e569da527c8926fb1b550`.

## Global fail-closed routing and subsequent issuer resolutions

Every one of the 473 failed events now has exactly one governance route. Three hundred sixty-six
are non-executable under frozen lifecycle evidence, 25 have exact issuer authorization, 12 are
issuer-verified composite actions that remain quarantined, 16 have issuer conflicts or date
mismatches, and 52 have provider corroboration but remain failed closed because their local price
boundary still disagrees. Two remain unresolved within a price lifecycle; the sole no-lifecycle
event is now an issuer-timeline conflict. The global gate therefore remains failed. The policy
receipt has content hash
`sha256:20dceb4995121d0895223f830d87e858c5f527e2936cadb5cdf3a98778ab2b28`.

The two additional exact authorizations are AMPE and EVHC. Ampio's filing establishes a
fifteen-to-one reverse split effective on 2022-11-09 and the first resumed NYSE American trading
date on 2022-11-22. The frozen five-decimal ratio `0.06667` is the rounded form of `1/15`; the
authorization binds that exact stored tuple and creates no general tolerance. Envision's filing
establishes a `0.334` merger exchange conversion and first Newco trading under `EVHC` on
2016-12-02. The batch receipt has content hash
`sha256:beceafdeb0917e77ccd2c30d2bd95fd39b18e7f55e115307a36d5cb13199567e`.

Ocean Rig is the fifth exact authorization. Its issuer release establishes a 1-for-9,200 reverse
split effective on 2017-09-21. The frozen `0.00011` ratio is the five-decimal representation of
`1/9,200`, and the 2017-09-22 event date is the first frozen price bar after the issuer-effective
date. Concurrent restructuring issuance explains why the local price gap cannot validate the
split mechanically; the authorization covers only the old-share mutation, not any entitlement to
new restructuring shares. The receipt has content hash
`sha256:d5b2e24b502dffc1c059e82525c30829a657a0add8354896ed57b60f474d06ea`.

ETS1 is the sixth exact authorization. The issuer filing establishes a one-for-eight reverse split
effective on Friday, 2005-10-28. The frozen event on Monday, 2005-10-31 is the first subsequent
price bar, and its stored ratio is exactly `0.125`. No nearby companion action is recorded, so the
authorization binds only that exact instrument, event date, and ratio. The receipt has content
hash `sha256:855fdfd19c27b5cdb0250bec08fa9d443acd966c3c3b08a912d5891a0b596ce1`.

Six further plain splits complete the 12 exact authorizations. Issuer filings bind BNI's
three-for-one distribution, EPAC's two-for-one distribution, GDW's three-for-one distribution,
HAFC's and JAKK's three-for-two distributions, and LNG's one-for-four reverse split to the frozen
event date or first frozen post-distribution bar. Each has an exact scalar shareholder mutation,
no nearby companion action, and no general ratio tolerance. The batch receipt has content hash
`sha256:6342504521c9d41ce2e22eb7fd54273ba7db85ca46a3ab00a24557c52fa400da`.

Four further events bring the exact authorization set to 16. CuraGen's filing binds its
two-for-one distribution on 2000-03-30 to the first subsequent frozen bar. Wild Oats' filings
bind its three-for-two splits effected on 1998-01-07 and 1999-12-01 to their respective first
subsequent frozen bars. Intermedia's filing similarly binds its two-for-one split paid on
1998-06-15 to the 1998-06-16 frozen event. All four lack nearby companion actions. Allaire remains
quarantined because its filing confirms the split and record date but does not establish the exact
distribution or trading-effective date needed to bind the frozen event. The batch receipt has
content hash `sha256:e6885c1f1b355f5fb71f030a0edb9d21baf3a5bacd07de0ce99f38f0ea435a1c`.

UTI Energy is the 17th exact authorization. Its filing states that the board authorized a
two-for-one stock split in the form of a stock dividend, paid on 2000-10-03 to holders of record
on 2000-09-25. The issuer payment date, frozen event date, and stored ratio `2.0` agree exactly,
and there is no nearby companion action. The receipt has content hash
`sha256:4fd9b0d804c589bbf619ab89ed1146a57d8a6448911cc847da1bcdead781533a`.

Three further events bring the exact authorization set to 20. McLeodUSA's filings bind its
two-for-one distribution on 1999-07-26 and three-for-one distribution effective 2000-04-24 to
their respective first subsequent frozen bars. Metzler's filing binds its three-for-two stock
dividend directly to 1998-04-01. The separate NCI1 event on 1998-04-02 is not authorized because
the issuer describes only the April 1 action. The exact batch receipt has content hash
`sha256:61f151501bd8c35b483517399632062aeea7e48938129ee6b91fbe373aa6bbf3`.

Five further plain events bring the exact authorization set to 25. Beyond.com and Network
Commerce each completed one-for-15 reverse splits on their frozen event dates. Worldwide Xceed
completed a one-for-10 reverse split on its frozen date. ACE Limited's three-for-one distribution
and Cellular Communications International's three-for-two distribution bind to their respective
first frozen post-distribution bars. Each stored ratio is the exact issuer ratio or its explicit
five-decimal representation, and none has nearby companion-action context. The batch receipt has
content hash `sha256:3fe329129db627a4fa26b3a6f51d75ddc70ac77d5857f788de68c399b08384ac`.

Twelve composite share mutations are issuer-verified but not executable. ITT completed a one-for-two
reverse split after distributing Exelis and Xylem; Sabra's REIT conversion delivered one Sabra
share for every three Old Sun shares; NorthStar completed a one-for-two reverse split alongside
its asset-management separation; IHG exchanged 11 new shares for every 15 old shares plus £1.65
cash per old share; and Tyco completed a one-for-four reverse split immediately after distributing
Tyco Electronics and Covidien. CMO paired its one-for-two reverse split with a $7.30 special cash
dividend on the same ex-date. ATNI's `0.4` share mutation accompanied one Emerging Communications
share per old share, while KSU's one-for-two reverse split accompanied two Stilwell shares per old
share. KMI1's three-for-two split was distributed concurrently with a cash dividend that is absent
from the frozen actions feed. AT&T's one-for-five reverse split followed its same-day Broadband
spin-off and Comcast-share distribution. Redback's approximate 73.39:1 reverse split accompanied
new creditor equity and stockholder warrants under its bankruptcy plan. Sodexho Marriott's
one-for-four reverse split was part of Marriott's spin-off and merger transaction: each old share
also received one share in each of two New Marriott classes, and the issuer completed the
transaction four days after the frozen event date. Applying only the share mutation would corrupt
shareholder value, so all 12 remain composite-action quarantines. The
receipt has content hash
`sha256:e1d1d9fb384877b52199e86d0924e126b4eb208a7a9382ef3c9fc2aa5e60334b`.

Sixteen records remain hard quarantined because primary issuer evidence conflicts with the frozen
event semantics. GEVA's one-for-five effective date differs from the stored event date; MHGVY's
filing says each ADS represented one ordinary share rather than the stored `0.1`; DIAL1's
200-for-one reverse split became effective before the frozen event date; and PRTK's one-for-five
mutation occurred inside a merger that also issued `0.14134` shares per target share, before the
frozen event date. IPAR, USB, and CDR have issuer distribution or occurrence dates that differ
from their frozen events. NVEC's stored one-for-five mutation occurred inside a merger that also
issued 3.5 surviving-company shares per acquired-company share, before the frozen event date.
NCI1's April 2 row duplicates the issuer's single April 1 stock dividend. Peregrine's issuer filing
binds its old-to-new equity conversion to the August 7 reorganization effective date and states
that new stock traded from August 8, not the frozen October 17 event date. Ambev's issuer filing
places its one-for-five share conversion and stock bonus on May 31, not the frozen June 9 event.
Eni's filing places its two-for-one reverse split and ADS-ratio change on June 18, not the frozen
June 22 event. EXMCQ's filing shows stable shares outstanding across the alleged split window and
identifies `0.05` as a rights-offering exercise price rather than a share mutation. None is
executable as a plain split. Atlas Air's issuer filing reports 19,815,338 shares at 2005 year-end
and 20,049,108 at 2006 Q2, contradicting the frozen six-for-one mutation. Alcon's filing reports
308,519,051 shares at 2003 year-end and 305,654,454 at 2004 year-end, contradicting the frozen
one-for-ten mutation. Arizona Aircraft Spares' filing states that the public company was
incorporated in December 2000 and that `AZAA` trading began on 2003-10-01; the frozen 2000-11-10
event predates both the issuer and ticker lifecycle. None of the three additions authorizes a
ratio repair. The conflict receipt has content hash
`sha256:fa5c744c0268e1c05c32d3fbfd286db01073a9e1a6367331ca908dae04145395`.

Six records are resolved in the opposite direction. BASXQ, TDW, CIVI, KEGX, EGLE2, and CQB all cross
bankruptcy or recapitalization boundaries where old equity was canceled and replacement value
included a new CUSIP, warrants, aggregate ownership allocations, new shares, or combinations of
those instruments. Chiquita's old preferred, preference, and common stock was exchanged for an
aggregate new-equity allocation plus seven-year warrants. A scalar stored ratio is not a complete
supported old-to-new shareholder conversion for any of the six. Each row is preserved in lineage and routed as a non-executable
lifecycle discontinuity; a simulated position crossing one must abort. The receipt has content
hash `sha256:af66b2190bc8aac83320d7ff7b8b540d57372698bd8a6d9cfde96f668d7f44dc`.

## Corrected zero-trial reproduction

A trial-specific authorization bound the corrected lake, failed global split status, lifecycle
accounting, sealed-path exposure, exact issuer events, and execution-code hashes before returns
were reopened. One reproduction of the immutable `single_operating_margin` identity then ran in a
new content-addressed directory. It spent zero hypotheses and left the historical result and
experiment ledger unchanged.

| Measurement | Immutable result | Corrected reproduction |
|---|---:|---:|
| Annualized Sharpe | -0.4173809363 | -0.1457641219 |
| Maximum drawdown | 39.62348332% | 24.46692315% |
| Final equity | $63,911.65 | $84,805.92 |
| Total return | Not separately sealed | -15.19408261% |

The correction removes a material distortion, but it does not rescue the factor: Sharpe, CAGR,
and total return remain negative. The verdict remains **KILL**. The sealed reproduction receipt
has content hash
`sha256:04c000216be3ba13f1ba3e196d8543e77ff1f18a876753005c6b13a7b856ed0f`.

## Claim boundary and next decision

This study reconstructs corporate-action data and reports one corrected reproduction of an
already-spent identity. It spends no new strategy hypothesis and establishes no sleeve,
live-performance, capacity, or forward-performance result. The global split gate remains failed;
future identities may not treat this lake as globally valid while two events remain genuinely
unresolved. A runner may bind only an explicitly sealed exact authorization and must abort on any
other exposed failed event. Unmatched records cannot be made green by deletion.

Primary issuer and schema references:

- [Apple dividend history](https://investor.apple.com/dividend-history/default.aspx)
- [Apple 2020 dividend filing](https://www.sec.gov/Archives/edgar/data/320193/000032019320000050/a8-kexhibit991q2202032.htm)
- [Sharadar equity-prices documentation](https://sharadar.com/docs/stocks)
- [Sharadar corporate-actions documentation](https://sharadar.com/docs/actions)
- [ADTX reverse-split filing](https://www.sec.gov/Archives/edgar/data/1726711/000121390022061276/ea166672-8k_aditxt.htm)
- [SPCE reverse-split filing](https://www.sec.gov/Archives/edgar/data/1706946/000119312524159991/d829568d8k.htm)
- [AMPE reverse-split and trading-resumption filing](https://www.sec.gov/Archives/edgar/data/1411906/000155837022018084/ampe-20221117xex99d1.htm)
- [EVHC merger conversion and first-trading-date filing](https://www.sec.gov/Archives/edgar/data/1678531/000167853117000044/evhc-2016123110k.htm)
- [Basic Energy Services emergence filing](https://www.sec.gov/Archives/edgar/data/1109189/000110918916000402/basic-form8xkforemergence.htm)
- [Basic Energy Services new-equity trading notice](https://www.sec.gov/Archives/edgar/data/1109189/000110918916000402/exh992201623pressrelease.htm)
- [Ocean Rig restructuring and reverse-split release](https://www.sec.gov/Archives/edgar/data/1447382/000091957417006882/d7659156_ex99-1.htm)
- [Tidewater emergence filing](https://www.sec.gov/Archives/edgar/data/98222/000119312517242513/d431632d8k.htm)
- [Tidewater new-equity trading notice](https://www.sec.gov/Archives/edgar/data/98222/000119312517242513/d431632dex992.htm)
- [Bonanza Creek emergence filing](https://www.sec.gov/Archives/edgar/data/1509589/000095010317004047/dp75602_8k.htm)
- [Key Energy emergence filing](https://www.sec.gov/Archives/edgar/data/318996/000119312516794624/d313262d8k.htm)
- [Key Energy restructuring allocation](https://www.sec.gov/Archives/edgar/data/318996/000119312516794624/d313262dex991.htm)
- [Eagle Bulk emergence filing](https://www.sec.gov/Archives/edgar/data/1322439/000143774914018448/egle20141015_8k.htm)
- [ITT spinoff and reverse-split filing](https://www.sec.gov/Archives/edgar/data/216228/000095012311095346/y93291e8vk.htm)
- [Sabra REIT conversion filing](https://www.sec.gov/Archives/edgar/data/1492298/000119312510261436/d8k.htm)
- [NorthStar reverse-split disclosure](https://www.sec.gov/Archives/edgar/data/1273801/000127380114000061/nrf0630201410-q.htm)
- [IHG scheme share exchange and cash consideration](https://www.sec.gov/Archives/edgar/data/858446/000115697305000999/u49002e6vk.htm)
- [Tyco distributions and reverse-split disclosure](https://www.sec.gov/Archives/edgar/data/833444/000110465907052190/a07-17393_3ex99d1.htm)
- [GEVA reverse-split filing](https://www.sec.gov/Archives/edgar/data/911326/000119312511294917/d251415d8k.htm)
- [MHGVY ADS-ratio filing](https://www.sec.gov/Archives/edgar/data/1578526/000110465914032214/a14-11076_120f.htm)
- [DIAL1 reverse-split filing](https://www.sec.gov/Archives/edgar/data/771950/000095012309035313/c89015e10vq.htm)
- [PRTK merger and reverse-split filing](https://www.sec.gov/Archives/edgar/data/1178711/000119312509020145/d8k.htm)
- [ETS1 reverse-split filing](https://www.sec.gov/Archives/edgar/data/846909/000095013505006345/b57408ene10vq.htm)
- [HAFC stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/1109242/000091205701539508/a2062901z10-q.htm)
- [JAKK stock-dividend filing](https://www.sec.gov/Archives/edgar/data/1009829/000095014899002339/0000950148-99-002339.txt)
- [LNG reverse-split filing](https://www.sec.gov/Archives/edgar/data/3570/000119312504049308/d10k.htm)
- [BNI stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/934612/000093461298000017/0000934612-98-000017.txt)
- [EPAC stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/6955/000095013198002327/0000950131-98-002327.txt)
- [GDW stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/42293/000004229300000009/0000042293-00-000009.txt)
- [CuraGen stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/1030653/000092701600001788/0000927016-00-001788.txt)
- [Wild Oats 1998 stock-split filing](https://www.sec.gov/Archives/edgar/data/909990/000092735698000444/0000927356-98-000444.txt)
- [Wild Oats 1999 stock-split filing](https://www.sec.gov/Archives/edgar/data/909990/000089973300000020/0000899733-00-000020.txt)
- [Intermedia stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/885067/000095014498009211/0000950144-98-009211.txt)
- [UTI Energy stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/912899/000095012900005078/0000950129-00-005078.txt)
- [ATNI split-off filing](https://www.sec.gov/Archives/edgar/data/879585/000095013098001580/0000950130-98-001580.txt)
- [K N Energy split and concurrent-dividend filing](https://www.sec.gov/Archives/edgar/data/54502/000095013499001524/0000950134-99-001524.txt)
- [KSU Stilwell distribution and reverse-split filing](https://www.sec.gov/Archives/edgar/data/54480/000005448000000020/0000054480-00-000020.txt)
- [McLeodUSA 1999 stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/919943/000092838599002618/0000928385-99-002618.txt)
- [McLeodUSA 2000 stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/919943/000092838500001564/0000928385-00-001564.txt)
- [Metzler three-for-two stock-dividend filing](https://www.sec.gov/Archives/edgar/data/1019737/000095013198002261/0000950131-98-002261.txt)
- [Beyond.com reverse-split filing](https://www.sec.gov/Archives/edgar/data/1060531/000109581101504316/f74865e10-q.htm)
- [Network Commerce reverse-split filing](https://www.sec.gov/Archives/edgar/data/1087879/000113724301500051/form10qnci.txt)
- [Worldwide Xceed reverse-split filing](https://www.sec.gov/Archives/edgar/data/721176/000091205701508952/a2045655z10-q.txt)
- [ACE three-for-one split filing](https://www.sec.gov/Archives/edgar/data/896159/000090256198000175/0000902561-98-000175.txt)
- [Cellular Communications International stock-dividend filing](https://www.sec.gov/Archives/edgar/data/870762/000087076298000021/0000870762-98-000021.txt)
- [CMO special-dividend and reverse-split filing](https://www.sec.gov/Archives/edgar/data/766701/000095013401503792/d88804e8-k.txt)
- [CDR stock-split filing](https://www.sec.gov/Archives/edgar/data/761648/000095012303009594/y88871sv11.htm)
- [IPAR stock-dividend split filing](https://www.sec.gov/Archives/edgar/data/822663/000093041301501460/c22238_10q.txt)
- [NVEC merger and reverse-split filing](https://www.sec.gov/Archives/edgar/data/724910/000091205700052325/a2032378z8-k.txt)
- [USB stock-split filing](https://www.sec.gov/Archives/edgar/data/36104/000104746999007568/0001047469-99-007568.txt)
- [AT&T Broadband spin-off and reverse-split filing](https://www.sec.gov/Archives/edgar/data/5907/000095012303003510/e84804e10vk.txt)
- [Redback bankruptcy securities and reverse-split filing](https://www.sec.gov/Archives/edgar/data/1081290/000119312504042090/d10k.htm)
- [Marriott spin-off, merger, and one-for-four reverse-split filing](https://www.sec.gov/Archives/edgar/data/1048286/000092838598000674/0000928385-98-000674.txt)
- [Peregrine reorganization conversion and trading-date filing](https://www.sec.gov/Archives/edgar/data/1031107/000104746904014838/a2134573z10-k.htm)
- [Ambev share conversion and stock-bonus filing](https://www.sec.gov/Archives/edgar/data/1113172/000114420407063976/v089496_20-f.htm)
- [Eni reverse-split and ADS-ratio filing](https://www.sec.gov/Archives/edgar/data/1002242/000131143505000018/sj0605en20f2.htm)
- [EXMCQ shares-outstanding and rights-offering filing](https://www.sec.gov/Archives/edgar/data/725282/000072528298000006/0000725282-98-000006.txt)
- [Atlas Air shares-outstanding filing](https://www.sec.gov/Archives/edgar/data/1135185/000093041306005893/c43889_10-q.htm)
- [Alcon shares-outstanding filing](https://www.sec.gov/Archives/edgar/data/1167379/000116737905000020/acl20f2004.htm)
- [Arizona Aircraft Spares formation and trading-history filing](https://www.sec.gov/Archives/edgar/data/1141880/000109432804000079/arizona10ksb041404woex.txt)
- [Chiquita reorganization equity-and-warrant filing](https://www.sec.gov/Archives/edgar/data/101063/000102140802003831/d10k.txt)


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/corporate-action-lifecycle
------------------------------------------------------------------------------

# Corporate-action and delisting lifecycle replay

AlphaForge now replays point-in-time splits, cash dividends, and metadata-confirmed delistings
inside the event-driven backtester. This is engineering evidence, not a claim of complete
historical coverage or investment performance. No return data was opened and no research
hypothesis was spent.

## Enforced behavior

- Every split and cash dividend retains its ex date and source availability timestamp.
- An event published after its ex boundary fails closed; the engine will not rewrite an earlier
  holding with information that was unavailable then.
- Splits convert held shares, average entry prices, and pre-ex queued quantities before the ex-date
  fill. A price-discontinuity guard rejects inconsistent split records.
- Cash dividends accrue against the signed position entering the ex date: longs receive and shorts
  pay. The current schema lacks a payable date, so this is explicitly booked as an ex-date
  receivable or payable.
- Applied transformations and cashflows persist in `corporate_actions.parquet` with each backtest.
- A terminal price history is liquidated only when SCD2 instrument metadata supplies a qualifying
  `delisted_ts`. If metadata still says active, the run halts instead of inventing an exit.

## Defects closed

The prior engine ignored dividend rows already present in the point-in-time lake. It also treated
any terminal price history as a delisting and sold at the last close, even when lifecycle metadata
said the instrument was active. Finally, a split converted an existing position but did not rescale
a pre-ex order when the book was flat, allowing a reverse split to multiply intended exposure.
Focused regressions now pin all three cases.

## Deliberate boundary

The platform does not yet model payable-date settlement, withholding tax, fractional-share
cash-in-lieu, mergers, tender consideration, spin-offs, rights, symbol changes, bankruptcy
recoveries, delisting auctions, vendor correction histories, or live broker reconciliation.
Complex same-boundary split/dividend combinations fail closed when the holding is exposed because
the current lake does not encode deliverable-basis ordering.

The machine-readable contract is available at
[`/glassbox/corporate_action_contract.json`](/glassbox/corporate_action_contract.json).


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crowding-risk-foundation
------------------------------------------------------------------------------

# Point-in-time crowding and stressed capacity

AlphaForge now has a coverage-aware crowding gate in the shared pre-trade path. It keeps
institutional ownership, short interest, borrow utilization, fund flows, and liquidation time as
separate observables rather than compressing them into an attractive but unauditable score.

## Enforced behavior

- Every observation has explicit availability and validity timestamps.
- Missing required metrics produce `UNASSESSABLE`; they are not imputed from current data.
- Each limit breach is named independently.
- Liquidation days use a configured daily ADV participation ceiling and are repeated under an
  explicit ADV haircut.
- `BLOCK` and `UNASSESSABLE` reject new risk in the shared pre-trade checker.
- Reduce-only orders remain permitted.

## Evidence boundary

The arithmetic and pre-trade gate are implemented and tested. Historical ownership and mapped
fund-flow coverage are not yet available across the traded universe, thresholds are not empirically
calibrated to unwind losses, and correlated portfolio liquidation is not modeled. Therefore this
does not claim that any historical or current sleeve passed a crowding test.

The deterministic stress cases and source hashes are published at
[`/glassbox/crowding_risk_contract.json`](/glassbox/crowding_risk_contract.json).


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-carry-lineage
------------------------------------------------------------------------------

# Crypto perpetual carry: trial lineage, capacity failure, and live evidence boundary

**Short title:** AlphaForge crypto carry: complete trial lineage

**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `crypto_carry`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-24

## Abstract

AlphaForge studies cross-sectional carry in USDT-margined perpetual futures, ranking contracts by
the negative trailing mean of observed funding: expensive longs rank as shorts and
negative-funding contracts as longs. This paper reconciles all 25 charged hypothesis identities.

The historical `carry_fund_21` walk-forward grew a simulated $100,000 to $138,236.27 from
2022-02-08 through 2026-06-01, with Sharpe 0.6766 and maximum drawdown 19.60%, but failed its DSR
gate. A later eight-configuration matrix reported PBO 0.8818, no deflated winner, and a
**NO-DEPLOY** verdict. Seven identities belong to a broader multi-factor engine, making their
capacity sweep context rather than carry capacity; the sole carry-tilted arm had Sharpe 0.0618.

An exact-timestamp current-state replay on 2026-08-23 does not reproduce the selection: final
equity is $103,335.16, Sharpe 0.1065, and maximum drawdown 20.98%. At the first decision, the
historical 22 names included EOS while the current 21 did not; restoring EOS reproduces all ten
historical order quantities. A zero-trial audit binds every surviving ledger: overlapping prices,
position and funding marks, and funding rates agree, but holdings and state paths diverge. Because
the historical run sealed
neither its exact code nor derived-input snapshots, a unique additive attribution of the multi-year
gap is structurally unidentifiable. Prospective private snapshots are now enforced but cannot
repair that omission. The material correction therefore remains open and external submission is
blocked.

The forward record is weaker: AlphaForge is a local simulated paper broker, not an Alpaca account
or externally attested record. Its first configuration was signal-dead; funding cashflows were
omitted until a forward-only repair; fewer than half of intended hourly cycles completed; and the
stored universe remains frozen at 2026-06-01. Crypto carry is therefore an incumbent experiment
with a plausible mechanism, severe selection and capacity evidence, known operational defects,
and an unmet forward burden of proof, not a validated sleeve.

## Claim boundary

This paper supports six claims only:

1. The funding-carry hypothesis and point-in-time implementation can be stated precisely.
2. Every charged family identity is enumerated in a public machine-readable manifest.
3. The selected positive artifact and later negative carry/blend evidence are published together.
4. A related multi-factor engine's capacity degradation is contextual evidence only and is not
   presented as carry capacity or investable capacity.
5. The paper record, defects, corrections, and unresolved production gaps are disclosed.
6. The selected artifact is preserved as a historical result, but its current exact
   reproducibility is disproved and the open correction is machine-verifiable.

It does **not** establish a forward Sharpe, expected maximum drawdown, future return, live-money
performance, riskless arbitrage, or externally verified execution. It does not establish that the
current live universe is the same strategy as the selected historical artifact.

## Economic mechanism and falsifiable hypothesis

Perpetual futures have no expiry date, so exchanges use recurring funding transfers to pull the
contract toward its reference index. When the funding rate is positive, long holders pay short
holders; when it is negative, shorts pay longs. A cross-sectional carry strategy therefore takes
the opposite side of expensive positioning: it shorts persistently positive-funding contracts and
buys persistently negative-funding contracts.

The mechanism is compensation for constrained arbitrage, speculative demand, margin and
liquidation risk, not a guaranteed convergence trade. It is falsified for this implementation if a
point-in-time, net-of-fee, impact-aware walk-forward cannot remain positive after the complete
search is charged, if the return disappears at useful capital, or if operational constraints make
the intended decisions untradeable.

The literature supplies a prior, never proof of this implementation:

- He, Manela, Ross, and von Wachter show how funding anchors perpetuals to spot while margin,
  liquidation, and trading frictions prevent a riskless arbitrage interpretation
  ([Fundamentals of Perpetual Futures](https://arxiv.org/abs/2212.06888)).
- Ackerer, Hugonnier, and Jermann develop no-arbitrage pricing for perpetual futures and the
  funding mechanism ([NBER working paper](https://doi.org/10.3386/w32936)).
- Schmeling, Schrimpf, and Todorov document large, time-varying crypto carry and connect it to
  trend chasing and scarce arbitrage capital
  ([Crypto Carry](https://doi.org/10.2139/ssrn.4268371)).
- Gornall, Rinaldi, and Xiao emphasize basis risk, constrained arbitrage capital, and speculative
  demand in perpetual markets
  ([Funding Payments Crisis-Proofed Bitcoin's Perpetual Futures](https://doi.org/10.2139/ssrn.5036933)).
- Chi and coauthors find that basis is the strongest of the crypto-futures cross-sectional
  signals they study, while signal frequency matters
  ([Journal of Futures Markets, 2023](https://doi.org/10.1002/fut.22425)).

These sources do not validate ALPHAC's market data, universe, costs, trial selection, or paper
execution.

## Exact ALPHAC implementation

For instrument `i`, decision time `t`, and the last `K` funding settlements known by `t`, the
historical feature is:

```text
carry(i,t) = -mean(funding_rate(i, settlements <= t)) * 3 * 365
```

The negative sign makes a high positive funding rate unattractive to a long position. The factor
uses a backward point-in-time as-of join: only settlements whose stored publication timestamp is
available by `t` may enter the feature. `carry_fund_21` uses 21 settlements, historically about
seven days at three settlements per day; `carry_fund_90` uses 90 settlements, historically about
30 days.

The `3 * 365` annualization is an implementation assumption, not a universal exchange rule.
Binance exposes `fundingIntervalHours` because intervals can be adjusted. Its official market-data
API separately exposes funding history and current interval information
([Binance USD-M Futures market data](https://developers.binance.com/docs/derivatives/usds-margined-futures/market-data/rest-api/Get-Funding-Rate-History)).
The ranking sign and settlement count remain meaningful when intervals change, but the annualized
scale is then approximate unless the contemporaneous interval is applied. This limitation is
disclosed rather than silently treating every period as eight hours.

The selected artifact uses rank allocation, 25 legs, weekly rebalancing (168 hourly bars), a
10-basis-point no-trade band, 6,048 training bars, 1,512 test bars, 72 purge bars, and 168 embargo
bars across 58 Binance perpetual instruments. Other charged identities change the funding horizon,
blend, cadence, allocator, no-trade band, or regime treatment. Each change remains a distinct
hypothesis identity even though all belong to one economic family.

## Trial lineage

The public manifest binds 25 distinct return identities to `crypto_carry`. The labels below sum
exactly to the family total; they are an accounting view and do not collapse the trial denominator.

| Machine-label group | Charged identities | Research question |
|---|---:|---|
| `carry_fund_21` | 10 | Primary seven-day funding rank under cadence, allocator, band, and regime changes |
| `carry_fund_21 + carry_fund_90 + carry_z_252` | 3 | Whether three carry horizons improve robustness |
| `carry_fund_21 + carry_fund_90 + carry_z_252 + carry_mom_21_63` | 6 | Whether carry dynamics add information across the original and recovered legacy ledgers |
| `carry_fund_90` | 2 | Whether a slower funding window is more persistent |
| `carry_z_252` | 2 | Whether long-window normalization improves ranking |
| `carry_fund_21 + carry_fund_90 + carry_mom_21_63` | 1 | Whether a reduced dynamic blend improves carry |
| `carry_fund_21 + carry_fund_90 + mr_res_72` | 1 | Whether a carry-plus-residual-reversal tilt improves the multi-factor engine |
| **Total** | **25** | Every identity remains charged to the union search burden |

Twenty-one identities use the original crypto-perpetual research profiles. Four recovered legacy
identities were filed with their durable result artifacts: one original carry experiment, two
shorter-window carry experiments, and the grand matrix's carry-plus-reversal tilt. Their recorded
annualized Sharpe observations range from -1.3945 to +0.6766. That range is not a confidence
interval; it is direct evidence of specification sensitivity.

The machine-readable source of truth is
[`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json). Select identities
where `research_family_key` equals `crypto_carry`; each row includes its exact hypothesis key,
immutable first measurement, source ledger, paper binding, and missing packet sections.

## Results and decisions

### Selected historical survivor

> **Open material correction (2026-08-23).** The table below reports the immutable selected
> historical artifact, not current-code performance. A current-state replay reports Sharpe 0.1065
> and 20.98% maximum drawdown, and the original run did not bind every derived input. The result is
> therefore labelled **historical artifact; not currently exactly reproducible; open correction**.
> It must not be described as validated or submission-ready.

The persisted `crypto_carry_wk` artifact covers 1,575 daily observations from 2022-02-08 through
2026-06-01. It reports:

| Measure | Persisted value |
|---|---:|
| Initial / final simulated equity | $100,000 / $138,236.27 |
| Total return / CAGR | 38.24% / 7.80% |
| Annualized Sharpe / volatility | 0.6766 / 11.83% |
| Maximum drawdown | 19.60% |
| Annual turnover | 33.22x |
| Fees paid | $7,372.72 |
| Net funding cashflow | $19,500.02 |
| DSR / DSR gate | 0.0386 / failed |

Funding contributed roughly half of the artifact's dollar gain. The result is therefore
mechanically dependent on accurate funding settlement and cannot be validated by a live ledger
that records price and fees but omits funding. The full-history Sharpe also hides a severe 2022
tail: the recorded 2022 segment was approximately -1.63 Sharpe and the full artifact's maximum
drawdown was 19.60% around the LUNA/FTX period.

### Related system-level robustness study

The later grand backtest used a 2021-01-01 through 2026-06-01 window and eight distinct
configurations. It must not be described as a pure carry replication. Seven configurations use
the engine's default, broad crypto multi-factor signal set (`alpha_names: null`) while varying ML,
regime, cadence, band, or allocator. Only the eighth explicitly tilts to
`carry_fund_21 + carry_fund_90 + mr_res_72`, and that arm reported Sharpe 0.0618. The seven
multi-factor configurations belong to the separate `crypto_multifactor_engine` research family;
the carry-tilted arm remains charged to `crypto_carry` because carry is its primary named input.

All four Block A multi-factor variants produced the same Sharpe 0.0424 and DSR 0.2112 at
$1 million. Other multi-factor variants reported annualized Sharpes of -0.7901 for daily
rebalancing, -0.1994 for the tighter 10-basis-point band arm, and -0.0946 for MVO. None cleared
DSR 0.95.

Cross-sectional-combinatorial validation reported PBO 0.8818 against a gate below 0.20. There was
no deflated winner and the persisted verdict is **NO-DEPLOY (honest null)**. Regime and ML labels
did not rescue the result; the regime path was substantially inactive during cold-start periods,
so equality of outcomes is not evidence that regimes never matter.

The selected carry artifact and broad multi-factor matrix are not interchangeable. The matrix is
preserved because it contains one carry-tilted arm and valuable system-level stress evidence, but
its baseline, PBO, winner decision, and capacity curve cannot be represented as a direct
institutional re-grade of `carry_fund_21`. The carry-specific conclusion comes from the weak
0.0618 tilted arm, the recovered legacy carry experiments, the complete 25-identity lineage, and
the failed selected-artifact DSR, not from relabelling a broader system as carry.

## Capacity: related-system decay, not measured carry capacity

The grand matrix's capacity sweep varies capital for its default broad multi-factor configuration
without adding a new return hypothesis:

| Initial capital | Sharpe | DSR | Maximum drawdown | Final equity |
|---:|---:|---:|---:|---:|
| $100,000 | 0.4009 | 0.4803 | 13.14% | $118,509.86 |
| $1,000,000 | 0.0424 | 0.2112 | 13.59% | $993,219.39 |
| $10,000,000 | -0.3720 | 0.0460 | 22.69% | $8,043,578.96 |

This is evidence that the related engine is highly sensitive to market impact, not a measurement
of pure carry capacity. The broad engine's edge is almost absent at $1 million and negative at
$10 million under the committed model. Carry capacity is **unmeasured**: no persisted
carry-specific capital sweep exists. It remains unestablished until a preregistered carry sweep
and forward fills, order-book depth, venue fragmentation, and financing are observed at the
intended scale.

## Forward paper record and dated corrections

AlphaForge uses `ALPHAFORGE_PAPERBROKER`: locally simulated fills against live exchange order
books with a local ledger. It is paper-only, not an Alpaca account, not live money, and not
externally attested. ALPHAC's public composite is derived from its sleeves and is not itself a
broker account.

The following defects materially limit interpretation:

- **Historical replay divergence, correction opened 2026-08-23.** A zero-new-trial replay on the
  current local state retained all 37,776 timestamps; the replay-minus-historical final-equity
  delta was -34,901.11 dollars. Sharpe fell from 0.6766 to 0.1065 and maximum drawdown rose from
  19.60% to 20.98%.
  The old receipt wording incorrectly said the run isolated software drift and gave the non-exact
  outcome a `PASS` label. It has been re-sealed without rerunning as
  `REPLAY_EXECUTED_MATERIAL_CODE_OR_MUTABLE_INPUT_DRIFT_QUANTIFIED`. The first sizing difference
  is exactly attributable to mutable universe membership: EOS was present in the historical
  decision set and absent today. The corrected realized-vol overlay also changes the later path
  and bound 71 rebalances. The complete surviving path audit shows exact overlapping exogenous
  values but divergent quantities and risk states. It also proves why the omitted historical code,
  universe, metadata, and signal snapshots prevent a unique additive attribution of the terminal
  gap. Repeating the current-state replay cannot restore missing history. A prospective control now
  atomically freezes the exact signal frame, universe intervals, SCD2 metadata, execution partitions,
  resolved settings, dirty source tree, and lockfile before every persisted walk-forward. That
  control is deliberately not presented as retroactive evidence. The original artifact remains
  preserved; no historical number is silently overwritten.

- **Signal-dead start, corrected 2026-07-05.** From 2026-06-23 through 2026-07-05 the public
  explanation said carry was compressed. The actual cause was a wiring bug that blended
  equity-fundamental factors, undefined for crypto, into the signal and invalidated every cycle.
  The loop was then restricted to `carry_fund_21` with weekly rebalancing and signal-health logs.
- **Funding omitted, repaired forward-only.** The live paper broker initially moved cash only on
  fills, so the mechanism's funding cashflows never reached the account. A live settlement path
  was added with point-in-time publication filtering and tests. Historical marks were not
  restated, which preserves continuity but leaves the early record economically incomplete.
- **Structural venue availability.** As of the evidence date, the loop had completed fewer than
  half of its expected hourly cycles. The current machine-readable paper state publishes the exact
  rolling count. A strategy that is unmanaged for most intended cycles is not meaningfully
  continuous even when its observed marks are retained.
- **Commodity contamination remains unresolved.** The 2026-08-22 store still contains a
  20-member universe effective from 2026-06-01. Four contracts, XAU, XAG, CL, and BZ, reference
  gold, silver, WTI, and Brent rather than cryptoassets. Removing them would change the strategy
  and therefore requires preregistration and remeasurement, not a silent filter.
- **Universe refresh remains unresolved.** The newest stored crypto membership decision is
  2026-06-01; the July and August decisions are absent. Catch-up logic exists in `LiveLoop`, but
  the production constructor does not pass a universe refresher. The current live book therefore
  remains based on stale liquidity membership. No missed historical rebalance is reconstructed.

These corrections are evidence about process quality only if they remain visible and are pinned by
tests. They are not evidence that the return process is profitable.

## Selection, diversification, and governing targets

The family is one economic sleeve candidate, not 21 independent sources of alpha. Every return
hypothesis remains charged to the union ledger. It also cannot receive diversification credit from
old correlations measured before commodity-linked contracts overlapped AlphaTrend's metals and
energy exposures. Correlation must be remeasured on the actual contemporaneous books and stressed
in risk-off periods before any sleeve-count or diversification claim is made.

The governing objective is an honest forward Sharpe of 1.5, expected maximum drawdown near 11%,
and a diversified book of up to 14 sleeves. Crypto carry has established none of those targets.
Its selected historical maximum drawdown already exceeds the program objective, its institutional
re-grade is a null, and its forward execution record is too short and discontinuous to estimate a
reliable Sharpe.

## Reproduction map

Primary implementation and evidence paths:

- `src/alphaforge/features/library/carry.py`: point-in-time funding features.
- `src/alphaforge/data/sources/ccxt_source.py`: funding interval metadata ingestion.
- `src/alphaforge/execution/paper.py` and `src/alphaforge/live/loop.py`: paper fills and live
  funding settlement.
- `docs/design/alphaDesign.md`: original signal and annualization contract.
- `var*/experiments.jsonl` and the four recovered `artifacts/**/experiments.jsonl` ledgers ,
  immutable charged identities in the canonical durable union.
- `artifacts/walkforward/crypto_carry_wk/walkforward.json`: selected historical survivor.
- `artifacts/probe/crypto_carry_frozen_current_code_replay/replay_receipt.json`: truthful
  current-state non-reproduction receipt, metric deltas, and input-freeze audit.
- `artifacts/probe/crypto_carry_replay_drift/first_rebalance_attribution.json`: exact causal
  reconstruction of the EOS membership effect on every first-decision order quantity.
- `artifacts/probe/crypto_carry_replay_drift/full_path_attribution.json`: exhaustive surviving
  ledger comparison, code archaeology, and machine-readable non-identifiability proof.
- `artifacts/audit/walkforward_input_snapshot_protocol.json` and
  `src/alphaforge/validation/input_snapshot.py`: prospective pre-run snapshot enforcement,
  atomicity, private data-rights boundary, and tamper validation.
- `artifacts/publication/crypto_carry_replay_correction.json`: open material correction,
  publication decision, remediation, and zero-new-trial classification.
- `artifacts/grand_backtest/20260616T143620Z/matrix.json` and `verdict.md`: related multi-factor
  robustness, PBO, capacity, and no-deploy context; only `C_carry` is carry-tilted.
- `artifacts/research/trial_packet_manifest.json`: exact family/identity join and packet debt.
- [`/glassbox/crypto_carry_selected_walkforward.json`](/glassbox/crypto_carry_selected_walkforward.json)
 : public selected-artifact payload.
- [`/glassbox/crypto_carry_grand_matrix.json`](/glassbox/crypto_carry_grand_matrix.json): public
  grand-matrix payload.
- [`/glassbox/crypto_carry_2022_tail.json`](/glassbox/crypto_carry_2022_tail.json): reproducible
  UTC-daily 2022 tail derivation.

Reproduction requires the pinned project environment and the underlying market-data lake. Public
artifacts permit claim auditing; they do not imply that every venue dataset can be redistributed.
The full current-state equity Parquet remains local and is bound by its SHA-256 in the replay
receipt; it is withheld from the public bundle under the conservative source-rights policy because
it is a row-level derived series.

## Packet completeness and legacy limitations

This family paper verifies shared identity, authorship, mechanism, literature, family accounting,
and stable-publication sections for 25 identities. Its 2026-08-23 correction proves that the
selected output is not currently exactly reproducible; this is a publication blocker, not a 26th
return identity. It does not retroactively manufacture
identity-level preregistrations, return series, exact environment snapshots, or complete rerunnable
data bundles. The manifest must therefore continue to mark all 25 trial packets incomplete until
every missing required section is proved. A family-paper binding is not a completed packet.

## Decision

**Research decision:** retain AlphaForge only as an incumbent paper experiment under observation;
do not describe the historical edge as validated; do not claim positive $10 million capacity; and
do not admit this family under the current evidence.

**Operational decision:** fail closed on promotion while the live universe is stale, commodity
classification is unresolved, and intended-cycle continuity remains structurally weak. Preserve
all prior marks and corrections; repair forward without reconstructing decisions that never ran.

**Publication decision:** preserve the positive survivor, failed DSR, current-state replay,
first-decision attribution, weak carry-tilted matrix arm, the broader engine's PBO 0.8818 and
capacity decay, live execution provenance, and unresolved defects together under Arhan Canli's
authorship. External submission is blocked while the material replay correction is open. A
corrected release must present the historical and current-state results side by side, bind every
derived input, and undergo independent scrutiny; no more favourable retrospective window may
replace either result.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-carry-portable-v1
------------------------------------------------------------------------------

# A hash-bound prospective test of cross-sectional perpetual-futures carry

**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Trial:** `crypto_carry_portable_v1`  
**Hypothesis identity:** `da5f5f47f99f9bd2`  
**Evidence date:** 2026-08-24  
**Status:** working paper; historical simulation; admission incomplete; not externally submitted or
peer reviewed; not an investment solicitation

## Abstract

This paper reports the first ALPHAC crypto-carry identity whose data decision, code, environment,
trial parameters, and private execution inputs were frozen before its return path was computed.
The experiment tests whether a weekly, cross-sectional funding-rate signal in USD Tether
(USDT)-margined perpetual futures produces useful net out-of-sample returns under the current
AlphaForge engine.
The data rule admitted 57 instruments from checksum-verified official archives and excluded
`ICPUSDT` before return computation because 14 required monthly funding archives were absent. The
runner then stitched 25 purged and embargoed walk-forward legs from 8 February 2022 through 1 June
2026.

The single registered path produced an annualized daily Sharpe ratio of 0.9689, 10.84% CAGR,
11.01% annualized volatility, 12.30% daily maximum drawdown, and 55.88% total return after the
implemented costs. The probabilistic Sharpe ratio (PSR) was 0.9776. The deflated Sharpe ratio
(DSR) was 0.0914 against 229 union identities: an important warning about the project-wide search
burden, but not a standalone admission gate under the reservation-bound v7 contract. Sixteen of 25 individual legs
had positive Sharpe; the median leg Sharpe was 0.4756. The minimum leave-one-calendar-year-out
Sharpe was 0.6232, while the partial 2022 segment itself was negative.

The candidate is **not admitted**. Its disposition is `INCOMPLETE`, not `ADMIT` and not `KILL`,
because the preregistered stress, capacity, execution-scenario, diversification, book-contribution,
and book-drawdown evidence is not yet complete. The probability of backtest overfitting (PBO) is
undefined for the single registered path
because no eligible path matrix was generated; it is reported as null rather than zero. At the
primary-result seal, the next forward identity remained mechanically blocked pending a complete
packet. This result demonstrates a promising frozen simulation and a strict research-governance
process, not a validated sleeve or expected future performance.

## 1. Contribution and claim boundary

The contribution is primarily methodological. The experiment joins five controls that the earlier
crypto-carry result did not preserve together:

1. a source-completeness rule decided before returns;
2. a point-in-time universe reconstructed from instrument lifecycles;
3. an exact preregistration and one-identity reservation;
4. a pre-execution snapshot of every derived decision and execution input; and
5. a deterministic result receipt that reconciles the equity curve, walk-forward report, ledger,
   snapshot, code, environment, and governing contract.

The paper supports the following narrow claims:

- exactly one registered historical simulation was executed for this identity;
- the immutable path and same-path diagnostics have the values reported here;
- all 781 private snapshot files rehash to the pre-execution manifest;
- no post-result gate was changed; and
- required admission evidence remains missing, so the candidate is not admitted.

It does not establish live or forward performance, independently reproduced performance,
capacity, diversification, expected book drawdown, peer review, external publication, or future
return. The raw and derived market rows are not licensed for public redistribution. A checksum
proves byte identity, not economic correctness.

## 2. Hypothesis and related literature

Perpetual futures use recurring funding transfers to keep a non-expiring contract near its spot
index. Positive funding ordinarily transfers value from longs to shorts; negative funding reverses
the direction. Persistent funding can therefore represent compensation for supplying balance
sheet to crowded positioning, but it can also proxy for crash exposure, constrained arbitrage,
liquidation risk, and speculative demand.

For instrument \(i\) at decision time \(t\), the registered signal is the negative mean of the 21
most recent funding settlements available to the system, annualized by the implementation:

\[
c_{i,t}=-\operatorname{mean}(f_{i,t-20},\ldots,f_{i,t})\times 3\times365.
\]

The negative sign ranks expensive positive-funding contracts toward the short side and
negative-funding contracts toward the long side. The factor is a cross-sectional ranking input;
its annualization scale does not itself create return. Funding information becomes available five
minutes after its recorded settlement timestamp in the portable data model.

The economic prior is consistent with work on perpetual-futures pricing, constrained arbitrage,
and crypto basis. He, Manela, Ross, and von Wachter describe how funding, margin, liquidation, and
trading frictions jointly anchor perpetuals rather than create riskless convergence. Ackerer,
Hugonnier, and Jermann formalize no-arbitrage pricing for perpetual futures. Schmeling, Schrimpf,
and Todorov document large and time-varying crypto carry linked to trend chasing and scarce
arbitrage capital. Chi and coauthors find basis prominent among the crypto-futures signals they
study. These papers motivate the test; none validates ALPHAC's data, portfolio construction,
costs, or result.

The falsifiable alternative is that the spread is unstable, selected from a large research union,
insufficient after stress and impact, positively exposed to the existing book, or operationally
untradeable. Any of those outcomes prevents admission even when the primary Sharpe is positive.

## 3. Prospective design

### 3.1 Identity and trial accounting

The preregistration was frozen before portable-v1 returns were computed. It fixed family account
`crypto_carry`, return identity `crypto_carry_portable_v1`, config hash `50d9e8b059fee773`, and
hypothesis identity `da5f5f47f99f9bd2`. Reservation ordinal 229 charged one hypothesis. The
runner's execution token authorized exactly one primary return trial; the ledger contains one
matching immutable record and no unregistered variant was used to replace it.

The 228 earlier identities remain a retired historical epoch. This trial enters the prospective
v7 epoch and the complete 229-identity union used by the runtime DSR calculation. The seriality
rule requires this trial's complete, hash-valid packet before a future identity can be reserved.

### 3.2 Data decision before returns

The source authority was a fresh cache of checksum-verified official Binance public archives.
Eligibility required every official object declared by the data contract. Fourteen monthly
funding objects for `ICPUSDT`, covering July 2021 through August 2022, were unavailable; the symbol
was excluded before the return engine ran. No local or API gap-fill substituted for the missing
official objects. Fifty-seven instruments remained.

The fresh official OHLCV archives disagreed with the older frozen local state at 1,256 overlapping
rows. This trial deliberately uses the current official bytes and is therefore a new prospective
identity, not an exact replication of the historical selected artifact. Instrument lifecycle
metadata removes observations outside listing and delisting intervals. The resulting private lake
contains 2,137,040 OHLCV rows, 272,846 funding rows, and 108 point-in-time universe intervals when
read through the production interfaces.

The exchange metadata history remains a limitation. Fresh historical `exchangeInfo` snapshots
were not available, so the earliest observed metadata version is made valid from the run start
while retaining its original validity timestamp as lineage. That rule was frozen and disclosed
before returns, but it prevents an independent historical-metadata claim.

### 3.3 Walk-forward and execution model

The trial configuration was fixed as follows:

| Parameter | Registered value |
|---|---:|
| Declared data window | 2021-06-01 to 2026-06-01 UTC |
| Training window | 6,048 hourly bars |
| Test window | 1,512 hourly bars |
| Purge / embargo | 72 / 168 bars |
| Walk-forward legs | 25 |
| Signal | `carry_fund_21` |
| Allocator | cross-sectional rank |
| Rebalance interval | 168 hours |
| No-trade band | 0.001 of equity |
| Initial simulated capital | $100,000 |
| Machine-learning (ML) / regime gates | off / off |

The current event-driven engine fills under its next-open model. The frozen base configuration
declares 5 basis points of perpetual taker fees, a default 2.5-basis-point half-spread, 2 basis
points of latency cost, square-root market impact, and a 1% average-daily-volume (ADV) order cap.
Portfolio limits include
1.0 gross exposure, 0.5 absolute net exposure, a 0.15 per-position limit, a 0.15 annualized
volatility target, and a 1.5 maximum volatility scale. The risk state halves gross at 10% account
drawdown and flattens at 15%, followed by a 336-hour cooldown.

These are simulated execution assumptions. The result does not contain broker fills or evidence
that the model matches realizable queue position, venue fragmentation, outage behavior, or market
impact at larger capital.

### 3.4 Pre-execution input snapshot

After the derived signal frame was computed but before the first execution leg, the runner sealed:

- 2,454,144 derived signal rows;
- 108 universe intervals and 57 instrument metadata rows;
- 603 raw OHLCV and funding partitions;
- the resolved run declaration; and
- 174 source and environment files.

The complete snapshot contains 781 files and 102,831,710 bytes. Its inventory root is
`c8b573712103907130a301f22d578feb07e31de0939339450f766b2d037df822`.
The snapshot is private because redistribution rights are not established. Its public receipt
exposes hashes, counts, and methods only.

## 4. Primary result

The stitched out-of-sample path begins after the first training window, on 8 February 2022, and
ends on 1 June 2026. Headline ratios use Coordinated Universal Time (UTC) day-last equity and daily
simple returns; hourly ratios are diagnostics.

| Measure | Immutable value |
|---|---:|
| Daily return observations | 1,574 |
| Initial / final simulated equity | $100,000.00 / $155,880.82 |
| Total return / CAGR | 55.88% / 10.84% |
| Annualized Sharpe | 0.9689 |
| Annualized volatility | 11.01% |
| Sortino / Calmar | 1.4336 / 0.8813 |
| Daily / hourly-bar maximum drawdown | 12.30% / 13.50% |
| Annual turnover | 31.44x |
| Fees paid | $7,398.00 |
| Net funding cashflow | $18,408.38 |
| PSR / DSR | 0.9776 / 0.0914 |

The daily maximum drawdown ran from the 18 June 2022 peak to the 12 August 2023 trough. The risk
counters report 16,591 half-gross bars, no halted-flat bars, 225 rebalances, and 225 fallback uses.
The result is therefore not a frictionless funding accrual: it depends materially on the optimizer,
risk state, price path, turnover, and funding cashflows.

### 4.1 PSR and DSR answer different questions

PSR 0.9776 measures evidence that the path's Sharpe exceeds zero under the implemented
non-normality adjustment. DSR 0.0914 instead compares it with an expected maximum Sharpe after the
recorded search burden. The runtime report used all 229 union identities and an expected maximum
per-period Sharpe of 0.08437. The observed annual Sharpe can therefore look promising while the
deflated probability remains low.

The generic walk-forward report also emits `clears_dsr_gate: false` for a 0.95 indicator. That
field is not the governing per-sleeve decision rule here. The reservation-bound v7 contract says
per-sleeve DSR must be measured and published but is not itself gated at 0.95; incremental
admission is determined by the full conjunction of standalone, stress, execution, capacity, and
book-contribution evidence. Calling this trial a DSR KILL would silently reintroduce a gate the
contract removed. Suppressing the low DSR would be equally misleading. This paper does neither.

### 4.2 Temporal and leg stability

Sixteen of 25 walk-forward legs had positive Sharpe and nine were nonpositive. Leg Sharpe ranged
from -2.4817 to 6.6152, with median 0.4756. Short legs make the extrema noisy, so they are reported
as diagnostics rather than independent trials or confidence intervals.

| UTC calendar segment | Daily observations | Compounded return | Annualized Sharpe |
|---|---:|---:|---:|
| 2022 partial | 326 | -6.79% | -0.5857 |
| 2023 | 365 | 2.18% | 0.2989 |
| 2024 | 366 | 19.63% | 1.7475 |
| 2025 | 365 | 11.57% | 0.9781 |
| 2026 partial | 152 | 21.40% | 3.7872 |

The result is not uniformly positive through time. Its strongest annualized segment is also a
partial year. Removing one calendar year at a time leaves annualized Sharpe between 0.6232 and
1.4346; the minimum occurs when the partial 2026 segment is excluded. This same-path diagnostic
is encouraging but does not substitute for a preregistered regime stress or a path matrix.

## 5. Admission audit and unresolved evidence

The primary path clears two directly evaluated v7 thresholds: net Sharpe is above 0.15 and 1,574
daily observations exceed the 756-observation minimum. DSR is present, satisfying its measurement
requirement. Those facts are necessary and insufficient.

The following evidence is not yet established for this identity:

- Newey-West significance and autocorrelation-inflation ratio under a frozen lag rule;
- stressed-cost and stressed-execution Sharpe;
- an execution-scenario bundle for the applicable operational dimensions;
- a monotone capacity curve with at least three capital points and a $500,000 floor decision;
- ordinary and crisis-conditional correlation with the existing book, including one-sided 95%
  bounds;
- candidate-to-book average correlation and the change in the book's average pairwise
  correlation;
- point and bootstrap-lower-bound book Sharpe contribution;
- leave-one-period-out book Sharpe contribution;
- expected-shortfall and maximum-drawdown deltas;
- expected and 95th-percentile book maximum drawdown; and
- full-union book DSR and overlay replay.

PBO is null with status `NOT_DEFINED_SINGLE_REGISTERED_IDENTITY_NO_PATH_MATRIX`. A single path
does not supply the cross-configuration matrix required by combinatorially symmetric
cross-validation (CSCV). Reporting null is not a pass; it also is not the fabricated value zero.

The observed 12.30% candidate maximum drawdown is not directly comparable with the program's 11%
**expected book maximum drawdown** objective. One is the deepest realized decline on this
candidate simulation; the other is a distributional estimand for the combined book. The book
quantity remains unmeasured.

The formal disposition is therefore:

```text
INCOMPLETE / NOT ADMITTED
```

It is not `KILL` because no measured applicable gate has yet been shown to fail in the sealed
receipt. It is not `ADMIT` because the listed required gates are unmeasured. The final evidence
packet may close the identity as permanently incomplete, but packet completion cannot convert the
candidate into an admission. No threshold has been altered after observing the result.

## 6. Relationship to the historical crypto-carry result

The earlier selected `crypto_carry_wk` artifact reported Sharpe 0.6766, 19.60% maximum drawdown,
and final simulated equity of $138,236.27 over the same ending date. A current-state attempt to
replay that historical configuration produced Sharpe 0.1065 and final equity $103,335.16. The old
run had not sealed exact code and derived inputs, so its multi-year difference is not uniquely
attributable.

Portable v1 does not repair or overwrite that artifact. It differs in its current official input
bytes, 57-name eligible set, prospective v7 reservation, and exact pre-execution snapshot. Its
Sharpe of 0.9689 is a new first measurement, not evidence that the historical 0.6766 was correct.
The historical correction remains open and independently visible in the family lineage paper.

## 7. Reproducibility and data-rights boundary

The publication-safe result receipt is
`artifacts/research/crypto_carry_portable_v1_result.json`. It binds the preregistration, reservation,
run configuration, v7 contract, exact ledger record, result inventory, and verified private input
snapshot. Its initial content hash is
`sha256:00c516f5c5465e399aff5a03f99e65897c370c88482a4387c3e34ac0668a3c7f`.

The receipt can be regenerated and compared without computing a new return path:

```bash
uv run python scripts/seal_crypto_carry_portable_v1_result.py --check
```

This command rehashes every private snapshot leaf, recomputes the same-path diagnostics from the
sealed equity curve, and fails if any bound result, ledger record, source, environment, or contract
byte has drifted. It is an integrity verification, not an independent return reproduction.

An external reader can inspect the public-safe receipts and source but cannot independently replay
the market path from the intended public bundle because the underlying archive rows and derived
signal frame are private. Public redistribution remains prohibited unless each source's rights are
established. An exact clean-environment replay from a rights-cleared input package and an
independent human reproduction are still required before those statuses can be claimed.

## 8. Threats to validity

The central threats are explicit:

- **Selection burden:** the low DSR shows that one attractive path must be interpreted in the
  context of a large research union.
- **Single registered path:** no path matrix exists for PBO, and no parameter perturbation may be
  invented post-result without a new identity.
- **Metadata approximation:** early historical instrument metadata uses a frozen deterministic
  fallback rather than contemporaneously archived exchange snapshots.
- **Model risk:** fills, spreads, latency, impact, funding timing, risk controls, and venue behavior
  are simulated.
- **Capacity unknown:** scaling can alter impact and portfolio decisions nonlinearly.
- **Portfolio interaction unknown:** standalone Sharpe does not establish negative correlation or
  positive book contribution.
- **Data redistribution:** private inputs prevent public push-button reproduction today.
- **No forward evidence:** this is historical walk-forward evidence, not a broker-reconciled live
  record.

These limitations define the next research work; they are not footnotes that a positive Sharpe can
cancel.

## 9. Conclusion

Portable v1 is the strongest ALPHAC crypto-carry result in provenance quality, not yet in admission
status. One registered and fully input-snapshotted simulation produced Sharpe 0.9689 with 12.30%
maximum drawdown and positive leave-one-year-out diagnostics. The same result also produced DSR
0.0914 under the complete union burden and lacks the stress, capacity, execution, diversification,
and book-risk evidence required by the governing contract.

The correct scientific conclusion is neither promotional success nor automatic rejection. It is a
promising, immutable primary measurement held at `INCOMPLETE / NOT ADMITTED` while the missing
tests remain missing. The work is credible only if that boundary survives publication unchanged.

## References

1. Ackerer, D., Hugonnier, J., & Jermann, U. J. *Perpetual Futures Pricing*.
   [NBER Working Paper 32936](https://doi.org/10.3386/w32936).
2. Chi, Y., Hao, W., Hu, J., & Ran, Z. (2023). *An empirical investigation on risk factors in
   cryptocurrency futures*.
   [Journal of Futures Markets](https://doi.org/10.1002/fut.22425).
3. He, Z., Manela, A., Ross, O., & von Wachter, V. *Fundamentals of Perpetual Futures*.
   [arXiv:2212.06888](https://arxiv.org/abs/2212.06888).
4. Schmeling, M., Schrimpf, A., & Todorov, K. *Crypto Carry*.
   [SSRN 4268371](https://doi.org/10.2139/ssrn.4268371).
5. Bailey, D. H., & López de Prado, M. (2014). *The Deflated Sharpe Ratio: Correcting for
   Selection Bias, Backtest Overfitting, and Non-Normality*.
   [Journal of Portfolio Management](https://doi.org/10.3905/jpm.2014.40.5.094).
6. Bailey, D. H., Borwein, J. M., López de Prado, M., & Zhu, Q. J. (2017). *The Probability of
   Backtest Overfitting*.
   [Journal of Computational Finance](https://doi.org/10.21314/JCF.2016.322).

## Authorship and credit

Arhan Canli conceived the ALPHAC research program, designed and implemented the AlphaForge system,
specified the prospective trial and governance controls, assembled and audited the evidence, and
is the accountable author of this paper. Tool-assisted drafting or engineering does not transfer
authorship or responsibility. Canli Capital is the project identity; no institutional affiliation,
peer review, external replication, or investment endorsement is implied.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-defensive-lineage
------------------------------------------------------------------------------

# Crypto defensive factors: positive summaries without admission evidence

**Short title:** Crypto defensive factors: complete trial lineage  
**Author:** Arhan Canli, Founder and Quantitative Researcher, Canli Capital  
**Family key:** `crypto_defensive` · **System:** ALPHAC / AlphaForge  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

This record reconciles two cross-sectional defensive-factor identities in crypto perpetual
futures: 720-hour low beta and 720-hour low realized volatility. The immutable ledger summaries
report annualized Sharpe ratios of 0.6295 and 0.6946 over 1,247 observations. Those are positive
historical summaries, but they are not admission results. Neither identity retains a complete
identity-matched curve, maximum drawdown, current-union deflated Sharpe ratio, capacity study, or
broker-reconciled forward record. A later low-volatility reopening reproduced a lower Sharpe of
0.5229 and passed four diversification diagnostics, but its venue-reality gate remained
outstanding and its DSR remained 0.04. The family therefore contributes zero sleeves.

## Research question and mechanism

The test asks whether crypto assets with lower trailing market beta or lower realized volatility
earn better subsequent risk-adjusted returns than their more aggressive peers. The economic prior
is not that low risk mechanically causes high return. It is that leverage constraints, delegated
benchmarks, and demand for lottery-like payoffs can raise the price of high-beta or high-volatility
assets relative to defensive assets. Frazzini and Pedersen formalize the leverage-constraint
channel in conventional markets
([Journal of Financial Economics](https://doi.org/10.1016/j.jfineco.2013.10.005)).

Transfer to crypto is uncertain. Perpetual funding, listing age, liquidation risk, exchange
fragmentation, and unstable token liquidity can all make a low-volatility rank a disguised
liquidity or maturity exposure. Low beta and low volatility are consequently treated as two
implementations of one defensive hypothesis, not two independent sleeves.

## Frozen implementations and trial accounting

Both identities use rank allocation, a 63-bar rebalance interval, a 10-basis-point no-trade band,
an 8,760-bar training window, and a 2,184-bar test window. The recorded configuration universe
contains 3,112 instrument identifiers. The signal names and immutable results are:

| Identity | Signal | Observations | Sharpe | Skew | Kurtosis |
|---|---|---:|---:|---:|---:|
| `56cada31ea70f66a` | `beta_lowbeta_720` | 1,247 | 0.6295 | 0.3642 | 9.9238 |
| `e204cb10f8ee937c` | `lowvol_720` | 1,247 | 0.6946 | -0.1637 | 18.8212 |

The high kurtosis of both summaries matters. A Sharpe estimate can conceal concentrated gains or
losses when returns are far from Gaussian. Without the exact identity-matched curves, the tails,
drawdowns, event concentration, and dependence of the two estimates cannot be reconstructed
honestly. The two identities remain charged to the 228-identity research union even though neither
is admitted.

## Reopening evidence and contradiction

A related low-volatility reopening is preserved at
`artifacts/analysis/lowvol720_reopen/result.json`. It is useful because it tests portfolio overlap,
but it is not substituted for the missing historical curve. The reopening reproduced candidate
Sharpe at 0.5229 rather than the ledger summary of 0.6946. That discrepancy is disclosed rather
than averaged away.

The reopening passed four preregistered diagnostics. Correlation with the existing book was 0.1243
at the selected lag, below the 0.15 kill threshold. Correlation with crypto carry was 0.0877,
below 0.25. Regression on BTC and a dominance proxy produced an R-squared of 0.2039, below 0.50.
Adding the candidate at the tested weight increased the common-window book Sharpe by 0.2687. These
measurements support distinctness within that historical window. They do not establish return
reliability, execution, or capacity.

The fifth gate, venue reality, was never completed. The reopening explicitly retained DSR 0.04.
Passing correlation screens cannot repair a failed selection-adjusted probability or replace a
forward execution record.

## Evidence still required

Admission would require a newly frozen, point-in-time implementation with one declared return
identity; exact daily returns; funding, fees, slippage, liquidation, and venue assumptions; a
current-union DSR; drawdown and tail analysis; impact and capacity evidence; and a continuous
broker or exchange-reconciled forward record. The low-beta and low-volatility variants would also
need joint exposure attribution to show whether they contain more than one economic bet.

No such completion is inferred from the positive summaries. There is no Alpaca performance
attributed to this family, and no live-money result is claimed.

## Reproduction and decision

The machine-readable family record is
[`crypto_defensive_family.json`](/glassbox/crypto_defensive_family.json). It binds both hypothesis
keys, configurations, first ledger summaries, source hashes, and the related reopening artifact.
The global trial join is
[`trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json).

**Decision: NOT ESTABLISHED / zero sleeves.** The historical signal is interesting enough to
justify a properly frozen prospective test, but not strong enough to enter the book. Research,
implementation, and the decision to preserve the contradiction were directed by **Arhan Canli**.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-lab-carry-crash-incident
------------------------------------------------------------------------------

# When Crypto Carry Became Crash Exposure: The LABUSDT Incident

**Short title:** LABUSDT carry-crash incident  
**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Status:** public incident research; not peer reviewed; not investment advice  
**Evidence date:** 2026-08-23  
**Machine evidence:** `/glassbox/crypto_lab_carry_crash_incident.json`

## Abstract

AlphaForge bought LABUSDT at a paper fill of 16.150421 USDT on 5 July 2026 while its
point-in-time funding signal was negative. It closed the same 114-token long at 0.155300 USDT on
30 July and opened a short at the same rebalance. The long lost 99.04% on price and produced a
net price loss of 1,824.37 USDT after its entry and close fees. Independent dated market records
show that LAB itself collapsed during July; the fill sequence is not evidence of a 100-for-one
symbol remapping or a paper-broker decimal error.

This distinction matters. Rejecting a real 99% move as “bad data” would erase the exact tail risk
that a perpetual-carry strategy is paid to bear. The correct response is to preserve the loss,
identify the strategy mechanism, and improve prospective attribution. The episode closed before
the flagship forward record began on 7 August, so it does not explain the current flagship loss.
The investigation instead exposed an observability defect: historical position snapshots retained
quantity and average entry but not each cycle's exact mark and unrealized profit or loss.

## Claim boundary

This is a forensic description of one paper-traded episode. It spends zero return hypotheses,
does not estimate Sharpe or expected maximum drawdown, does not authorize a parameter or weight
change, and does not rewrite any equity mark. The external sources corroborate market context;
the immutable local fill ledger is authoritative for AlphaForge's own execution claim.

## What happened

The frozen ledger contains three LABUSDT fills:

1. buy 114 LAB at 16.150421 USDT on 5 July 2026;
2. sell 114 LAB at 0.155300 USDT on 30 July, closing the long; and
3. sell 5,467 LAB at 0.155300 USDT, opening the new short.

The long episode's gross price P&L is

```text
114 × (0.155300 − 16.150421) = −1,823.44 USDT
```

Entry and close fees add 0.93 USDT, producing net price P&L of approximately −1,824.37 USDT.
This calculation excludes funding cashflows because the historical store did not retain an
instrument-level funding-payment ledger sufficient to reproduce that component independently.

## Why this was carry risk, not a broken symbol

Funding was negative when the long was selected. A negative rate means shorts pay longs, so the
frozen carry signal ranked LAB as a long candidate. During the holding interval, the funding
regime changed sign. The scheduled rebalance then closed the long and opened a short. That is the
intended direction of the signal; the failure was that the spot-price collapse overwhelmed the
carry payment before the next rebalance.

Independent market context is consistent with the local fills. A dated
[LABUSDT price history](https://chartexchange.com/symbol/crypto-labusdt/historical/) records the
collapse through July, while [Phemex's 13 July delisting notice](https://phemex.com/announcements/phemex-will-delist-labusdt694)
documents a contemporaneous venue response. Neither source proves AlphaForge's execution; the
signed local ledger does that. Together they reject the narrower hypothesis that 16.15 to 0.155
was merely a local decimal or contract-identity error.

## Why no jump filter is being added

A filter that refuses to mark a held position after a large price move would make reported equity
false. A filter that removes LAB only after observing this crash would also be an unregistered,
event-fitted strategy change. Neither is acceptable. The loss remains in the AlphaForge record,
and no live weight or signal parameter changes because of this incident.

The broader tail question remains legitimate: whether a pre-registered liquidity, age,
concentration, or crash-risk rule can improve expected portfolio Sharpe without merely deleting
the realized loser. That requires a new identity, frozen rule, complete historical replay,
multiple-testing charge, and forward transition—not an incident patch.

## Prospective observability correction

The investigation could reproduce aggregate sleeve equity and fills but could not allocate every
subsequent mark-to-market change by instrument. `positions_snapshots` stored quantity, average
entry, and opening timestamp only. Aggregate equity is insufficient to reconstruct historical
instrument marks, and those marks will not be invented.

The paper execution path now prospectively persists, for each open position and cycle:

- the exact order-book mid used in account equity;
- whether the mark came from the order book or the explicit entry-price fallback;
- marked market value; and
- unrealized P&L relative to average entry.

Legacy rows migrate additively and remain null for these fields. This improves future sleeve-risk
diagnosis without changing orders, signals, weights, historical marks, or the governing forward
Sharpe contract.

## Conclusion

LAB was a genuine adverse market event and an example of the left-tail exposure embedded in
crypto carry. The institutional response is not to delete the loss. It is to preserve it, state
what the evidence can and cannot reconstruct, and ensure future position-level losses are
independently attributable from the same marks used in account equity.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-momentum-lineage
------------------------------------------------------------------------------

# Crypto momentum: complete trial lineage and failed sleeve-admission evidence

**Short title:** AlphaForge crypto momentum: complete trial lineage  
**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `crypto_momentum`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

AlphaForge tested cross-sectional and time-series momentum in perpetual-futures prices. This paper
reconciles all 18 charged crypto-momentum hypothesis identities recorded from 2026-06-20 through
2026-06-25. The best persisted result, a 21-day time-series momentum signal rebalanced weekly, had
annualized Sharpe 0.4863, total return 26.83%, and maximum drawdown 17.02% from 2022-02-08 through
2026-06-01. Its artifact-era Deflated Sharpe Ratio was only 0.0684. The worst result, a seven-day
cross-sectional signal rebalanced daily, had Sharpe -1.1690, total return -42.39%, and maximum
drawdown 50.64%. All 18 artifacts failed their recorded DSR gate.

A separate 2021–2026 diagnostic combined three momentum signals and measured Sharpe 0.0780. Its
full-sample correlation with a carry diagnostic was +0.0444 and stress correlation was negative,
but the combined Sharpe was only 0.0556 and even the reported decorrelated ceiling was 0.1206.
Diversification without standalone edge does not earn a sleeve slot. No persisted momentum
capacity sweep exists. This family is research-only: it is not validated, admitted, live, or part
of an Alpaca paper account.

## Claim boundary

This paper establishes only that:

1. the economic hypotheses and implemented formulas can be stated precisely;
2. all 18 charged identities are joined to immutable ledger rows and persisted artifacts;
3. positive, negative, selection-adjusted, and diversification evidence is published together;
4. every persisted artifact failed its original DSR gate; and
5. overlap with existing price-trend families is explicitly resolved.

It does **not** establish a forward Sharpe, expected maximum drawdown, useful capacity, independent
alpha source, future return, live execution record, or investable product. Artifact-era DSR values
use the selection context stored when each run was produced; this paper does not mislabel them as
restatements against the current 228-identity union.

## Economic hypotheses

The cross-sectional hypothesis is that assets with stronger recent returns than peers continue to
outperform those with weaker returns over the next holding interval. The time-series hypothesis is
that an asset's own normalized trailing return predicts the sign and relative strength of its next
return. Possible mechanisms include slow information diffusion, investor attention, behavioral
underreaction, trend-chasing flows, and compensation for crash or liquidity risk. None makes
momentum a law; rapid reversals, crowded exits, trading costs, and changing market structure are
direct falsifiers.

The primary literature supplies a prior and an overlap map, not validation of ALPHAC:

- Moskowitz, Ooi, and Pedersen document time-series momentum across conventional futures and
  forwards ([Journal of Financial Economics](https://doi.org/10.1016/j.jfineco.2011.11.003)).
- Liu and Tsyvinski identify crypto-specific momentum and investor-attention effects while showing
  that standard asset-pricing factors do not fully explain crypto returns
  ([Review of Financial Studies](https://doi.org/10.1093/rfs/hhaa113)).
- Liu, Tsyvinski, and Wu construct crypto market, size, and momentum factors
  ([Journal of Finance](https://doi.org/10.1111/jofi.13119)).
- Grobys and Sapkota test momentum in cryptocurrency markets
  ([Economics Letters](https://doi.org/10.1016/j.econlet.2019.03.028)).
- Chi and coauthors study cross-sectional risk factors in cryptocurrency futures and emphasize
  that signal frequency matters ([Journal of Futures Markets](https://doi.org/10.1002/fut.22425)).

These studies do not validate AlphaForge's universe history, feature timestamps, transaction-cost
model, trial search, or implementation.

## Exact ALPHAC implementation

Let `C(i,t)` be the point-in-time close for instrument `i` at hourly decision bar `t`. Missing
history remains missing rather than being backfilled from the future.

For long horizon `L` and short skip `S`, cross-sectional momentum is:

```text
mom_xs_L_S(i,t) = ln(C(i,t-S) / C(i,t-L))
```

The charged variants use `L=168` with `S=24`; `L=504` with `S=48`; and `L=2160` with `S=168`.
They correspond approximately to seven-day/one-day-skip, 21-day/two-day-skip, and
90-day/seven-day-skip signals on hourly bars.
The values are ranked across the complete point-in-time universe at each decision.

For horizon `L`, time-series momentum is:

```text
mom_ts_L(i,t) = ln(C(i,t) / C(i,t-L)) / (EWMA_vol_168(i,t) * sqrt(L))
```

The charged horizons are 168, 504, and 2160 hourly bars. The denominator scales trailing returns
by a 168-hour exponentially weighted volatility estimate. Positive values imply long direction and
negative values short direction before portfolio construction. Normalization does not eliminate
gap risk or make signals comparable when data quality differs across instruments.

Most artifacts use rank allocation over 58 Binance perpetual contracts, with 25 walk-forward
legs, 6,048 training bars, 1,512 test bars, 72 purge bars, and 168 embargo bars. Charged variants
change signal horizon, blend, allocator, rebalance cadence, or half-universe split. Such changes
remain distinct hypotheses even when they share one economic mechanism.

## Complete trial lineage

The public family packet binds 18 immutable identities to `crypto_momentum`:

| Machine-label group | Charged identities | Question tested |
|---|---:|---|
| `mom_ts_504` | 9 | 21-day trend across daily, 3-day, weekly, 2-week, long-only-rank, and split-universe variants |
| `mom_xs_504_48` | 2 | 21-day cross-sectional momentum at daily and weekly cadence |
| `mom_ts_2160` | 2 | 90-day time-series trend under daily and weekly cadence |
| `mom_xs_2160_168` | 1 | 90-day cross-sectional momentum with a seven-day skip |
| `mom_xs_168_24` | 1 | Seven-day cross-sectional momentum with a one-day skip |
| `mom_ts_168 + mom_ts_504 + mom_ts_2160` | 1 | Multi-horizon time-series blend |
| `mom_ts_504 + mom_xs_504_48` | 1 | Weekly time-series/cross-sectional blend |
| `mom_xs_504_48 + mom_xs_2160_168 + mom_ts_504` | 1 | Recovered legacy diversification diagnostic |
| **Total** | **18** | Every identity remains charged to the global search burden |

Seventeen identities came from the original `var*` research profiles. The eighteenth was recovered
from `artifacts/exp1/20260625T075446Z/experiments.jsonl` when canonical discovery was corrected to
include durable artifact ledgers. This correction ran no experiment. The recovered artifact names
3,358 configured instruments across both `BINANCE` and `XUSE` namespaces, unlike the cleaner
58-contract crypto panels. It is retained as a diagnostic, not treated as a direct replication.

The machine-readable source is
[`/glassbox/crypto_momentum_family.json`](/glassbox/crypto_momentum_family.json). It includes every
hypothesis key, immutable ledger source, source hash, compact configuration, persisted result, and
artifact-era validation verdict. The global identity join remains available at
[`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json).

## Results

### Best persisted specification

The strongest artifact is weekly `mom_ts_504` with rank allocation:

| Measure | Persisted value |
|---|---:|
| Initial / final simulated equity | $100,000 / $126,825.13 |
| Total return / CAGR | 26.83% / 5.67% |
| Annualized Sharpe / volatility | 0.4863 / 12.38% |
| Maximum drawdown | 17.02% |
| Annual turnover | 30.32x |
| Fees paid | $7,274.25 |
| Net funding cashflow | +$975.14 |
| Artifact-era DSR / gate | 0.0684 / failed |

This is the maximum Sharpe among the 18 persisted identities, not an independently chosen
confirmatory result. It fails the governing DSR threshold and its drawdown exceeds the program's
11% expected-maximum-drawdown objective.

### Worst persisted specification

Daily `mom_xs_168_24` is the clearest falsification:

| Measure | Persisted value |
|---|---:|
| Initial / final simulated equity | $100,000 / $57,605.73 |
| Total return / CAGR | -42.39% / -12.01% |
| Annualized Sharpe / volatility | -1.1690 / 10.47% |
| Maximum drawdown | 50.64% |
| Annual turnover | 129.02x |
| Fees paid | $22,178.23 |
| Artifact-era DSR / gate | 0.0000001665 / failed |

The difference between the best and worst identities is specification sensitivity, not evidence
that the best setting has isolated a stable law. Across the complete family, annualized Sharpe
ranges from -1.1690 to +0.4863 and maximum drawdown ranges from 15.15% to 50.64%. Zero of 18
persisted validations clears its artifact-era DSR gate.

## Diversification diagnostic: low correlation is insufficient

The recovered `exp1` momentum blend measured annualized Sharpe 0.0780, maximum drawdown 20.94%,
and artifact-era DSR 0.5607. Against its carry diagnostic, full-sample correlation was +0.0444;
correlation was -0.5768 on the combined book's worst 2.5% of days and -0.6290 when either sleeve
was in its worst 2.5%. Those correlations appear attractive in isolation.

But the equal combination produced Sharpe only 0.0556 and maximum drawdown 12.82%. Even the
artifact's decorrelated Sharpe ceiling was only 0.1206. Negative stress correlation cannot rescue
two weak expected-return processes. The test therefore supports a null: momentum does not earn a
separate sleeve slot merely because it sometimes offsets carry.

## Capacity and execution boundary

No persisted crypto-momentum capacity sweep changes capital while holding the momentum return
hypothesis fixed. Capacity is therefore **unmeasured**, not zero and not positive. Turnover as high
as 129.02x, fees, venue concentration, order-book depth, funding, and crowding make extrapolation
especially unsafe.

There is also no continuous broker-reconciled forward record for this crypto-momentum family.
AlphaForge's incumbent paper experiment is funding carry; AlphaMax and AlphaTrend already express
related price-trend mechanisms in equities and managed futures. Crypto momentum is not an Alpaca
paper sleeve, not an AlphaVintage result, and not included in published live returns.

## Overlap and sleeve decision

Crypto momentum, AlphaMax equity momentum, and AlphaTrend managed-futures trend differ in market,
formation horizon, and portfolio construction, but all monetize persistence in prices. They are
not automatically three independent economic mechanisms. Under the research taxonomy, the 18
crypto variants form one family and at most one sleeve candidate.

An independent sleeve claim would require a preregistered forward specification, a clean
crypto-only point-in-time universe, net positive standalone evidence after current union
deflation, measured capacity, and contemporaneous return correlations against the actual live
books, including stress windows. None is presently established.

## Reproduction map

- `src/alphaforge/features/library/momentum.py`: signal formulas and point-in-time feature code.
- `docs/design/alphaDesign.md`: original momentum specification and research contract.
- `var*/experiments.jsonl` and `artifacts/exp1/20260625T075446Z/experiments.jsonl`: immutable
  charged identities.
- `artifacts/cpanel/*/walkforward.json` and
  `artifacts/walkforward/crypto_mom_base/walkforward.json`: original persisted simulations.
- `artifacts/exp1/20260625T075446Z/momentum/walkforward.json` and `exp1_metrics.json`: recovered
  momentum/diversification diagnostic.
- `scripts/audit_crypto_momentum_family.py`: deterministic ledger-to-artifact audit.
- `artifacts/research/crypto_momentum_family.json`: generated family evidence packet.
- [`/glassbox/crypto_momentum_family.json`](/glassbox/crypto_momentum_family.json): stable public
  machine-readable packet.

Reproduction requires the pinned project environment and underlying market-data lake. The public
packet proves the claims made here and hashes their source artifacts; it does not imply that every
venue or vendor dataset may be redistributed.

## Packet completeness

This family paper verifies shared identity, authorship, mechanism, literature, family accounting,
and stable-publication sections for 18 identities. It does not retroactively manufacture exact
identity-level preregistrations, full return bundles, environment snapshots, or capacity studies.
All 18 trial packets therefore remain incomplete until every required section is proved. A family
paper is meaningful coverage, not a completed identity packet.

## Decision

**Research decision:** reject sleeve admission. Preserve all 18 identities, including the severe
negative result and the recovered mixed-universe diagnostic. Do not search additional momentum
variants without a new mechanism and explicit family budget.

**Live decision:** do not add crypto momentum to the paper book. It has no broker-reconciled
forward record, no measured capacity, and no independently validated edge.

**Publication decision:** publish the complete family null under Arhan Canli's authorship. The
credible accomplishment is not the 0.4863 selected Sharpe; it is a record that makes the selected
result, failed deflation, 50.64% adverse drawdown, overlap, and non-admission equally inspectable.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-multifactor-engine-lineage
------------------------------------------------------------------------------

# Crypto multi-factor engine: seven trials, capacity decay, and no-deploy verdict

**Short title:** AlphaForge crypto multi-factor engine lineage  
**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `crypto_multifactor_engine`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

AlphaForge ran a historical robustness matrix over crypto perpetual futures from 2021-01-01
through 2026-06-01. Seven charged identities belong to the broad multi-factor engine: a baseline
rank allocator; ML, regime, and combined overlays; daily rebalancing; a tighter no-trade band; and
mean-variance allocation. An eighth matrix identity explicitly selected carry and residual
reversal and is accounted for in the separate `crypto_carry` family.

None of the seven engine identities cleared its artifact-era DSR gate. Annualized Sharpe ranged
from -0.7901 to +0.0424 and maximum drawdown from 13.59% to 33.93%. The four baseline/overlay arms
all produced the same Sharpe 0.0424 and DSR 0.2112. Cross-sectional combinatorially symmetric
validation across all eight matrix trials reported PBO 0.8818 against a gate below 0.20 and no
deflated winner. The matrix verdict was **NO-DEPLOY**.

A capital sweep on the regime-gated engine showed Sharpe 0.4009 at $100,000, 0.0424 at $1 million,
and -0.3720 at $10 million under the committed impact model. This is useful capacity-failure
evidence, not a promise that the $100,000 result is repeatable. The family has no admitted sleeve
and no broker-reconciled forward record.

## Claim boundary

This paper reconciles seven immutable return identities to one persisted matrix and publishes the
positive, negative, capacity, and selection-adjusted evidence together. It does **not** establish
a forward Sharpe, expected maximum drawdown, independent economic mechanism, live result, or
future return. The artifact serializes `alpha_names: null`; therefore the exact expanded default
feature list is not recoverable from the matrix configuration alone. No feature-level attribution
is claimed.

## Research question and overlap decision

The engine asked whether a broad cross-sectional blend becomes robust through nonlinear sizing,
regime gating, cadence, turnover control, or covariance-aware allocation. Possible mechanisms
come from the component families, carry, momentum, reversal, liquidity, and defensive effects, not
from the word “multifactor.” Combining weak signals can reduce noise, but complexity can also
increase estimation error and hidden selection.

Liu, Tsyvinski, and Wu construct crypto market, size, and momentum factors
([Journal of Finance](https://doi.org/10.1111/jofi.13119)); Liu and Tsyvinski document crypto return
predictors and differences from conventional asset classes
([Review of Financial Studies](https://doi.org/10.1093/rfs/hhaa113)). Bailey and coauthors develop
the PBO framework used to test whether strategy selection is likely to overfit
([Journal of Computational Finance](https://doi.org/10.21314/JCF.2016.322)). These sources support
the research questions and validation tools, not this implementation's return.

The seven configurations are one engine family, not seven sleeves. Carry-tilted `C_carry` remains
in `crypto_carry`; named momentum trials remain in `crypto_momentum`. Shared data, instruments,
construction, and latent market exposures prevent those labels from becoming automatic economic
independence.

## Complete trial lineage

| Matrix identity | Change from baseline | Sharpe | Max DD | DSR | DSR gate |
|---|---|---:|---:|---:|---|
| `A_blend` | rank baseline | 0.0424 | 13.59% | 0.2112 | fail |
| `A_ml` | ML overlay | 0.0424 | 13.59% | 0.2112 | fail |
| `A_regime` | regime overlay | 0.0424 | 13.59% | 0.2112 | fail |
| `A_ml_regime` | ML plus regime | 0.0424 | 13.59% | 0.2112 | fail |
| `C_rebal24` | daily rebalance | -0.7901 | 33.93% | 0.0049 | fail |
| `C_band10` | 10-basis-point band | -0.1994 | 13.89% | 0.0935 | fail |
| `C_mvo` | MVO allocator | -0.0946 | 15.94% | 0.1373 | fail |

The public packet maps each row to its exact hypothesis key, config hash, immutable first ledger
record, source file, SHA-256 hash, 1,612 observations, skew, and kurtosis. All seven remain charged
to the current 228-identity union. The matrix's own DSR values use its complete eight-trial local
selection set and are labeled artifact-era evidence rather than current-union restatements.

## What the unchanged overlays mean

The four Block A arms returned byte-for-byte equivalent summary moments. That is not evidence that
ML and regimes work equally well. The persisted verdict reports that the regime gate was inactive
in early out-of-sample legs while its expanding fit window lacked 730 daily BTC observations and
fell back to the blend. The matrix also does not persist enough feature-level diagnostics to prove
where the ML path altered positions. The defensible conclusion is that these overlays did not
improve the measured return, not that they were validated.

Daily rebalancing was the strongest falsifier: turnover rose to 80.58x, Sharpe fell to -0.7901,
and maximum drawdown reached 33.93%. MVO lowered turnover to 15.19x but did not create positive
Sharpe. A tighter band also remained negative. Portfolio machinery did not rescue the edge.

## Selection and capacity evidence

The eight-column matrix, including the separately classified carry arm, used 5,000 CSCV
combinations over 1,612 daily observations. PBO was 0.8818; the required gate was below 0.20. No
configuration cleared DSR 0.95 and no deflated winner was selected.

| Initial capital | Sharpe | DSR | Max DD | Turnover | Final equity |
|---:|---:|---:|---:|---:|---:|
| $100,000 | 0.4009 | 0.4803 | 13.14% | 44.53x | $118,509.86 |
| $1,000,000 | 0.0424 | 0.2112 | 13.59% | 39.74x | $993,219.39 |
| $10,000,000 | -0.3720 | 0.0460 | 22.69% | 44.31x | $8,043,578.96 |

The sweep varies capital for the regime-gated engine without adding return identities. Under its
notional/ADV impact model, the already thin edge decays materially with size. This does not prove
true exchange capacity, the model still needs external calibration, but it decisively forbids a
claim of scalable backtested edge.

## Live and sleeve decision

The family is not an Alpaca paper sleeve, not an AlphaForge live sleeve, and not included in
published broker returns. There is no continuous broker-reconciled forward record for these seven
configurations. Historical capacity rows cannot substitute for live slippage, funding, fills,
venue outages, or counterparty risk.

**Decision: FAIL / NO DEPLOY.** The family contributes zero sleeves. Any future attempt must freeze
the expanded feature set rather than serialize `null`, preregister one configuration, establish
point-in-time universe lineage, use current-union deflation, calibrate impact from observed fills,
and accumulate forward evidence. It would be a new charged identity.

## Reproduction and authorship

- `scripts/grand_backtest.py` and `src/alphaforge/analytics/grand_matrix.py`: matrix driver and
  validation logic.
- `artifacts/grand_backtest/20260616T143620Z/matrix.json`: persisted measurements and capacity.
- `artifacts/grand_backtest/20260616T143620Z/verdict.md`: contemporaneous no-deploy decision.
- `artifacts/grand_backtest/20260616T143620Z/experiments.jsonl`: immutable dedicated ledger.
- `scripts/audit_crypto_multifactor_family.py`: deterministic seven-identity audit.
- [`/glassbox/crypto_multifactor_family.json`](/glassbox/crypto_multifactor_family.json): public
  machine-readable family packet.
- [`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json): global identity
  join and incomplete identity-level packet ledger.

Reproduction requires the pinned AlphaForge environment and underlying point-in-time market-data
lake. Public hashes make the persisted evidence tamper-evident; they do not make private market
data publicly reproducible or the work independently peer reviewed.

This record and the ALPHAC system were authored and directed by **Arhan Canli**, Founder of Canli
Capital. Credit is explicit and verifiable in the source and public corpus; scientific claims
remain bounded by the evidence.

## Conclusion

The multi-factor engine is valuable because it records a failed robustness test cleanly. Complex
overlays did not improve the baseline, faster trading made outcomes worse, PBO was high, and modeled
capacity decayed. The institutional decision is zero sleeves and continued evidence collection, not
a renamed backtest winner.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-reversal-lineage
------------------------------------------------------------------------------

# Crypto short-horizon reversal: two decisive negative trials

**Short title:** Crypto residual reversal  
**Author:** Arhan Canli, Founder and Quantitative Researcher, Canli Capital  
**Family key:** `crypto_short_horizon_reversal` · **System:** ALPHAC / AlphaForge  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

Two historical identities test whether crypto perpetual-futures returns reverse after common
movement is removed. One uses a 24-hour residual signal; the other combines 24- and 72-hour
residuals. Both are strongly negative in the implemented direction. Their immutable annualized
Sharpe summaries are -2.1527 and -2.1140 across 1,574 observations. The result rejects the tested
reversal rule, but it does not automatically establish the opposite momentum trade. Exact curves,
maximum drawdowns, costs, funding attribution, and current-union DSR are not preserved at the
family level. The family contributes zero sleeves and remains in the trial union as a negative
result.

## Hypothesis and estimand

Residual reversal asks whether an asset-specific price move over a short horizon predicts an
opposite-signed subsequent return. The intended estimand is the net return to a rank portfolio
that is long recent residual losers and short recent residual winners, measured out of sample
under the recorded rebalance and portfolio rules.

Short-term reversal has precedent in conventional equities. Lehmann documents weekly return
reversals and considers whether they reflect market inefficiency or compensation for risk
([Journal of Finance](https://doi.org/10.1111/j.1540-6261.1990.tb05110.x)). That literature is a
prior, not a transport theorem. Crypto trades continuously; perpetual funding transfers value
between long and short positions; liquidations can create directional cascades; and venue-specific
microstructure can dominate a short-horizon signal. A residual estimated from historical returns
does not remove these channels.

## Frozen configurations

Both identities use rank allocation, a 24-bar rebalance interval, a 10-basis-point no-trade band,
a 6,048-bar training window, a 1,512-bar test window, and the same 58-instrument configuration
universe. This common construction makes the two rows related specifications of one mechanism.

| Identity | Signal set | Observations | Sharpe | Skew | Kurtosis |
|---|---|---:|---:|---:|---:|
| `7d65785e1ea4789e` | `mr_res_24` | 1,574 | -2.1527 | -0.0875 | 7.0956 |
| `9d39062d6525fdbb` | `mr_res_24`, `mr_res_72` | 1,574 | -2.1140 | -0.6294 | 8.8195 |

Adding the 72-hour component does not rescue the hypothesis. It changes the shape of the negative
return distribution, including more negative skew and higher kurtosis, while leaving the central
conclusion intact. Both identities are charged. Rounded similarity is not used to erase one trial,
and the horizon blend is not relabeled as a separate sleeve.

## Interpretation of the negative sign

A strongly negative reversal return is compatible with several explanations: short-horizon
continuation may dominate; residualization may remove the wrong common component; funding or
turnover may overwhelm gross mean reversion; or the universe and rebalance design may expose
liquidation trends rather than temporary dislocations. The summaries cannot distinguish among
these explanations.

Multiplying the return by minus one would create a new, selected momentum hypothesis. It would
need a new preregistration, config hash, trial charge, cost model, and out-of-sample test. The
negative result therefore remains a falsification of reversal, not evidence for an untested
opposite trade.

## Statistical and execution boundary

Only immutable first-summary moments are bound family-wide. The exact daily curves are not
available in this packet, so maximum drawdown, autocorrelation, clustered uncertainty, funding
exposure, and event concentration cannot be reconstructed. No artifact-era DSR survives for
either identity, and no current-union DSR is estimated from incomplete moments. Capacity is also
unmeasured. A 24-bar rebalance schedule could create substantial turnover and market impact, but
the family record does not contain enough execution detail to quantify them.

There is no broker-reconciled forward record and no Alpaca return attributed to this family. The
absence of forward evidence does not weaken the historical rejection. It limits the explanations
that can be defended.

## Reproduction and decision

[`crypto_reversal_family.json`](/glassbox/crypto_reversal_family.json) publishes the hypothesis
keys, configuration hashes, recorded signal sets, result moments, immutable ledger hash, and
evidence grade. [`trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json) keeps both
identities in the full research accounting.

**Decision: FAIL / zero sleeves.** The implemented residual-reversal direction failed twice. A
future study may test a different residual model or a separately preregistered continuation rule,
but it cannot rewrite these observations. The research and decision record were directed by
**Arhan Canli**.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/crypto-vrp-lineage
------------------------------------------------------------------------------

# Crypto volatility risk premium: one proxy trial and a published null

**Short title:** AlphaForge crypto VRP proxy lineage  
**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `crypto_volatility_risk_premium`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

AlphaForge tested one preregistered BTC/ETH volatility-risk-premium timing rule from 2021-03-24
through 2026-06-01. It compared Deribit DVOL closes with a seven-day Yang–Zhang realized-
volatility estimate, entered only when the spread exceeded two volatility points, charged 10 basis
points on signal turnover, and evaluated 1,492 expanding-window out-of-sample days after a
365-day warmup. The proxy produced annualized Sharpe -0.633, Deflated Sharpe Ratio 0.000, PSR
0.066, skew -9.517, and raw kurtosis 132.65. It failed.

The diagnostic also illustrates why average variance premium is not timing alpha. BTC's mean
DVOL-minus-realized spread was +0.044 and positive on 72.99% of days; an always-short variance
proxy showed Sharpe 2.4818 but skew -5.4874. ETH's corresponding always-short proxy showed Sharpe
0.5309 and skew -10.6795. Those attractive averages coexist with catastrophic left tails. This
family is not a sleeve, is not in an Alpaca account, and has no broker-reconciled forward record.

## Claim boundary

This paper establishes the economic question, exact historical proxy, one charged identity,
persisted null, and source hashes. It does **not** establish executable option P&L, option-surface
history, capacity, live execution, expected maximum drawdown, forward Sharpe, or future return.
DVOL is an index and the variance-swap expression is a signal-validity proxy. It omits the option
strip, tradable quotes and sizes, strike interpolation, margin, hedging, jumps, and gap execution.

## Mechanism and falsifiable hypothesis

Option-implied variance can exceed subsequently realized variance because sellers of convex
downside insurance require compensation. Carr and Wu formalize model-free variance-swap rates and
document variance risk premia ([Review of Financial Studies](https://academic.oup.com/rfs/article-abstract/22/3/1311/1581057)).
That literature is a prior, not validation of AlphaForge's data, timing rule, or execution.

The tested hypothesis was narrower: a large positive difference between DVOL and recent realized
volatility should identify days when short-variance compensation exceeds crash and trading costs.
The hypothesis is falsified if the preregistered timing return is negative, remains deeply
left-skewed, or fails selection adjustment. All three occurred.

For currency `i` and day `t`, the implementation was:

```text
VRP(i,t)      = DVOL(i,t) - YangZhangRV_7d(i,t)
signal(i,t)   = max(0, VRP(i,t) - 0.02)
gross(i,t+1)  = DVOL(i,t)^2 / 365 - log_return(i,t+1)^2
proxy_return  = signal(i,t) * gross(i,t+1) - 0.001 * abs(change(signal))
```

DVOL was stamped available after its source bar; realized volatility used only contemporaneously
available OHLC. BTC and ETH proxy returns were equal weighted, normalized by a one-day-lagged
expanding standard deviation, and scored only after the warmup. The direction was never inverted
after seeing the result.

## Complete trial accounting

The union contains exactly one identity in `crypto_volatility_risk_premium`:

| Hypothesis key | Configuration hash | Observations | Sharpe | DSR | Decision |
|---|---|---:|---:|---:|---|
| `bd4688c240711a16` | `99596bbb5b6f8e38` | 1,492 | -0.633 | 0.000 | fail |

The run originally used a global trial count of 84. The current union contains 228 identities;
the historical DSR cannot be reconstructed honestly from rounded summary statistics alone and is
therefore labeled artifact-era evidence, not a current-union restatement. The identity remains
charged to the union regardless of its failure.

## Result and risk interpretation

| Measure | Persisted value |
|---|---:|
| Annualized net proxy Sharpe | -0.633 |
| Artifact-era DSR / PSR | 0.000 / 0.066 |
| Skew | -9.517 |
| Raw kurtosis | 132.65 |
| OOS observations | 1,492 days |

No maximum drawdown was persisted for this summary-only proxy, so none is invented here. The
extreme skew and kurtosis are more decision-relevant than the appealing always-short average.
Timing failed to transform the premium into admissible expected return.

The historical proxy likely understates implementation difficulty. DVOL and seven-day realized
volatility do not share a perfectly matched horizon; a variance-swap formula is not a fillable
option strip; and the 10-basis-point signal-turnover charge is not a full options execution,
hedging, and margin model. These limitations weaken positive claims. They do not rehabilitate a
negative result.

## Capacity, overlap, and sleeve decision

No options capacity sweep exists. There is no historical bid/ask surface, quote size, portfolio
margin replay, delta-hedging ledger, or broker-reconciled forward option record. Capacity is
**unmeasured**.

Short volatility is also not presumed diversifying. It can load on the same crash, liquidity, and
deleveraging states that hurt carry and risky-asset trend books. The artifact left correlation
against live sleeves pending; no independence claim is made.

**Decision: FAIL / RESEARCH ONLY.** Do not admit a VRP sleeve. A future return identity would need
a separately preregistered, point-in-time options-surface implementation with executable quotes,
defined-loss construction, hedging and margin costs, capacity, current-union deflation, and
forward broker reconciliation. It would be a new charged trial, not a revision of this null.

## Reproduction and authorship

- `scripts/exp2_crypto_vrp.py`: frozen proxy construction and original measurement driver.
- `artifacts/exp2/20260625T094710Z/exp2_metrics.json`: persisted historical report.
- `scripts/audit_crypto_vrp_family.py`: deterministic ledger-to-report audit.
- `artifacts/research/crypto_vrp_family.json`: generated family evidence packet.
- [`/glassbox/crypto_vrp_family.json`](/glassbox/crypto_vrp_family.json): public machine packet.
- [`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json): global identity
  join and remaining identity-level packet debt.

Reproduction requires the pinned AlphaForge environment and underlying Binance/Deribit data lake.
The public packet exposes exact configuration, immutable keys, source paths, and SHA-256 hashes so
that missing private market data is disclosed rather than confused with public byte reproducibility.

This research record and its ALPHAC implementation were authored and directed by **Arhan Canli**,
Founder of Canli Capital. Authorship does not convert an internal result into peer review or
independent verification.

## Conclusion

The contribution is the rejection, not a strategy claim. A positive average crypto variance
premium and a high naive Sharpe did not survive timing, costs, tail-risk inspection, or deflation.
The honest sleeve count contributed by this family is zero.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/current-book-diversification-model
------------------------------------------------------------------------------

# Current-book diversification: the confidence-bound result

**Author:** Arhan Canli  
**Program:** ALPHAC / AlphaC Algorithms  
**Study classification:** retrospective existing-return risk remeasurement  
**Capital:** research simulation over a paper-trading specification

## Result

The exact current four-sleeve research specification is diversified, but it does **not** meet the
program's governing average-correlation point gate. Across the 1,061-row common window from
2023-07-07 through 2026-06-01:

| Measurement | Result | Governing comparison | Outcome |
|---|---:|---:|---|
| Average pairwise sleeve correlation | +0.0248 | at most 0.00 | **fails** |
| 95% upper bound, 63-row block bootstrap | +0.0487 | at most +0.10 | passes |
| Maximum ordinary pairwise correlation | +0.2098 | at most +0.35 | passes |
| Maximum ordinary pair upper 95% bound | +0.3025 | at most +0.35 | passes |
| Stressed design correlation | +0.50 | at most +0.50 | passes at the boundary |
| Sleeve-only diversification ratio | 1.8153 | diagnostic | not a gate |
| Effective independent sleeves | 3.8988 of 4 | diagnostic | not a gate |

The long-run portfolio objective is approximately −0.03 average correlation. The current measured
point is 0.0548 above it. Calling +0.0248 “near zero” may be descriptively reasonable, but it does
not turn a positive value into a pass against a non-positive gate.

## What was measured

The study reconstructs the same exact current book used by the current-composition drawdown study:

- `alphavintage_live`, 25%;
- `crypto_carry_wk`, 25%;
- `k30_dn_63`, 25%;
- `managed_futures`, 25%; and
- the separately disclosed 10% strategic overlay split between BTC and SPY.

Sleeve correlation uses the four sleeve returns only. The strategic overlay remains separate and
is included in full-book and marginal-Sharpe diagnostics. The reconstructed sleeve contributions
plus overlay equal the book return with zero numerical residual.

## Confidence procedure

The primary uncertainty estimate uses 10,000 synchronized circular moving-block resamples, each as
long as the observed 1,061-row window, with seed `20260825` and a 63-row block. Resampling the four
columns together preserves contemporaneous cross-sleeve dependence. The one-sided upper bound is
the empirical 95th percentile.

| Block length | Bootstrap mean average correlation | Upper 95% | Maximum pair upper 95% |
|---:|---:|---:|---:|
| 21 rows | +0.0245 | +0.0484 | +0.2861 |
| 63 rows, primary | +0.0247 | +0.0487 | +0.3025 |
| 126 rows | +0.0244 | +0.0491 | +0.3086 |

The primary upper-bound Monte Carlo standard error is approximately 0.00030. Block-length
sensitivity does not change the conclusion: the point gate fails and the confidence-bound gates
pass.

## Pairwise structure

The six observed pairwise correlations are:

| Pair | Correlation |
|---|---:|
| AlphaVintage / crypto carry | +0.0393 |
| AlphaVintage / equity momentum | −0.0620 |
| AlphaVintage / managed futures | −0.0444 |
| Crypto carry / equity momentum | −0.0134 |
| Crypto carry / managed futures | +0.0197 |
| Equity momentum / managed futures | +0.2098 |

The equity-momentum / managed-futures pair is the largest ordinary dependence. Its primary
bootstrap upper bound remains below the prospective 0.35 ordinary-pair ceiling.

## Marginal historical diagnostics

For each diagnostic, one sleeve's committed contribution is replaced by cash while every other
weight and the strategic overlay remain unchanged. These are in-window research diagnostics, not
reweighting instructions:

| Sleeve replaced by cash | Full-book research Sharpe | Without sleeve | Marginal delta |
|---|---:|---:|---:|
| AlphaVintage | 1.7846 | 1.7909 | −0.0063 |
| Crypto carry | 1.7846 | 1.2520 | +0.5326 |
| Equity momentum | 1.7846 | 1.6378 | +0.1468 |
| Managed futures | 1.7846 | 1.8755 | −0.0908 |

Negative historical marginal values do not authorize deletion. The data were known before this
protocol, the comparison is in-sample for this purpose, and existing sleeves predate the
prospective admission contract. Any allocation change would require a new declared evidence epoch.

## What this establishes—and what it does not

This study establishes a reproducible description of the exact current research composition. It
shows that most pairwise and confidence-bound controls are inside their prospective ceilings, while
the governing average-correlation point gate is not.

It does not establish live-forward diversification. The frozen research curves end before the
broker-reconciled forward record begins; the returns were known before the protocol; no independent
human replication exists; and the window is not crisis-complete. It proves neither alpha nor the
governing forward-Sharpe objective (1.5 when this study was sealed; 2.0 since 2026-09-14 under
`config/owner_goals.json`) and spends zero new hypothesis identities.

## Reproduction

```bash
uv run python scripts/analyze_current_book_diversification.py
```

The machine-readable result is
`artifacts/analysis/current_book_diversification/result.json`. Its content hash is
`sha256:42971513076f2ff21024e343c2ef771a78cbaeb2b3b6160f7d28a526dd4da256`.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/current-book-drawdown-model
------------------------------------------------------------------------------

# Current-composition maximum-drawdown model

**Author:** Arhan Canli
**Affiliation:** Canli Capital / AlphaC Algorithms
**Version:** 2.0, generated from the study result
**Capital boundary:** research simulation over a paper-trading specification

## Abstract

This study estimates the two-year maximum-drawdown distribution of the current ALPHAC
composition: three constituent sleeves (AlphaMax, AlphaTrend and AlphaVintage) at equal weights of one third each, plus a
separately disclosed 10% strategic overlay (50% BTC and 50% SPY). Constituent strategies own their
internal sizing, and the composite applies no second book-level volatility target. It does apply the declared book-level drawdown ladder (half gross at 5% below the high-water mark, flat at 10%), active since 2026-09-15; the models do not replay the ladder's state, so they describe the book without it.

Two zero-drift models were frozen before execution. A 10,000-path circular moving-block bootstrap
uses a 63-calendar-day primary block, with 21- and 126-day sensitivity arms. A separate 10,000-path
regime model preserves observed component volatility and calm dependence while moving all four
weighted contributions to 0.50 stress correlation for a predeclared 12% stress share and
40-day mean stress run.

The conservative expected maximum drawdown is **8.99%**, inside the governing 11% design objective. The
conservative p95 maximum drawdown is **15.86%**, outside the governing 11% design objective. The expected result is therefore encouraging; the tail result is not. Neither
establishes live expected drawdown.

Version 1.0 of this paper described the four-sleeve book that record v4 replaced (the record
restarted on 2026-09-24). From
version 2.0 every figure and composition statement here is generated from the study result by
`scripts/render_current_book_drawdown_paper.py`.

## 1. Exact specification mapped

The source builder reconstructs the same research book used by the public state:

- AlphaMax at 33.3%;
- AlphaTrend at 33.3%;
- AlphaVintage at 33.3%;
- fixed-weight aggregation;
- no ALPHAC-level volatility target;
- the declared book-level drawdown ladder, active since 2026-09-15: half gross at 5% below the high-water mark and flat at 10%, absorbing until the owner rearms it. The models below do not replay its state;
- missing daily constituent marks contribute zero; and
- a fixed +10% strategic overlay, 50% BTC and 50% SPY, outside constituent sizing.

The component contributions reconstruct the daily book return with a largest absolute error of
1.7e-18. The study binds 8 input groups by SHA-256, including the live
fingerprint, the protocol, the book implementation and the sleeve-equity inputs; the full list is in
the machine artifact.

## 2. Calibration boundary

The exact common window contains 1,061 calendar days from 2023-07-07 through 2026-06-01. In that
window the research book has 5.11% annualized volatility and a 4.63% realized maximum
drawdown. Its 1.17 Sharpe is labelled simulation, not forward evidence, and is not used as model
drift: every arm removes the sample mean before estimating drawdown.

This window begins after both COVID and 2022. That is a binding limitation. A block bootstrap
cannot generate a crisis absent from its source window.

## 3. Frozen models

### 3.1 Circular moving-block bootstrap

The primary 63-day arm produces:

| statistic | maximum drawdown |
|---|---:|
| expected | 8.79% |
| median | 8.19% |
| p95 | 15.47% |
| Monte Carlo standard error of expected | 0.035 percentage points |

In the sensitivity arms, the 21-day arm gives 8.45% expected / 14.89% p95 and the 126-day arm gives 8.62% expected / 14.36% p95. All three expected values are inside 11%; all three tails exceed it.

### 3.2 Correlation-regime model

The regime arm produces:

| statistic | maximum drawdown |
|---|---:|
| expected | 8.99% |
| median | 8.35% |
| p95 | 15.86% |
| Monte Carlo standard error of expected | 0.036 percentage points |

The model's simulated stress-day share is published in the machine artifact. It changes
dependence but deliberately does not invent a stress-volatility multiplier.

## 4. Decision

The protocol defines the conservative expected value as the larger of the primary bootstrap and
regime expectations. That value is 8.99%, so the current-composition modeled expectation is
within the 11% design objective. The mandatory p95 is 15.86% and is not within 11%.

Status:
`CURRENT_COMPOSITION_EXPECTED_WITHIN_OBJECTIVE_HISTORICAL_TAIL_COVERAGE_INCOMPLETE`.

This is not statistical establishment. The live record is still short; the common calibration window begins after COVID and 2022; a block bootstrap cannot generate a crisis absent from its window; the regime arm has no stress-volatility multiplier; neither model replays constituent instruments or the drawdown ladder's state; and execution gaps and liquidity feedback are not modeled.
Those limitations are machine-readable failed establishment dimensions, not prose footnotes.

## 5. Reproduction

```text
uv run python scripts/analyze_current_book_drawdown.py
uv run python scripts/render_current_book_drawdown_paper.py
uv run python scripts/seal_forward_drawdown_evidence.py
uv run pytest -q tests/unit/test_current_book_drawdown.py tests/unit/test_forward_drawdown_evidence.py
```

Canonical machine result: `/glassbox/current_book_drawdown.json`
Sealed claim boundary: `/glassbox/forward_drawdown_evidence.json`


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/customer-supplier-propagation-feasibility
------------------------------------------------------------------------------

# Customer–supplier propagation — locked no-return relationship-source protocol

**Short title:** Customer-supplier propagation: feasibility

**Declared:** 2026-08-16 before computing corpus prevalence, selecting the document sample, or
extracting any customer name. **Stage:** official-source feasibility only. Market prices, returns,
event outcomes, signs, horizons, and portfolio data are forbidden; zero return identities are spent.

## Frozen identity boundary

- Supplier universe: domestic common-stock issuers already present in the immutable 10-K manifest.
- Relationship availability: no earlier than the SEC acceptance timestamp of the supplier's 10-K.
- Relationship fact: the filing must state that one customer accounts for at least 10% of supplier
  revenue and explicitly identify that customer by name.
- Anonymous labels (`Customer A`, `one customer`, government categories), private entities, and
  names that cannot be resolved historically to one public issuer are not tradable edges.
- A later return protocol, if authorized, must use a separately timestamped customer event and
  next-eligible-session supplier entry. This source audit does not choose the event, sign, or horizon.

## Frozen corpus and prefilter

Use the existing hash-addressed SEC 10-K manifest and local primary-document cache. Restrict filing
dates to 2016-01-01 through 2025-12-31. Every manifest identity must map deterministically to
`data/raw/sec_10k_narrative/documents/{CIK}_{accession}.html.gz`.

A document is a concentration candidate only when its raw filing contains `customer` within 400
characters of a numeric percentage from 10% through 100%, the equivalent `percent` form, or
`ten percent`, after lower-casing and collapsing whitespace.
This intentionally broad prefilter measures recall-oriented source prevalence; it does not establish
a named relationship.

From each calendar year, rank candidates by SHA-256 of `customer_supplier|CIK|accession` and retain
the first 30. The resulting at-most-300-row sample is immutable. No failed or difficult document is
replaced.

## Frozen extraction and gates

Convert sampled filings with parser `sec-filing-sections-v2`. Preserve document hash and every
±500-character window around a qualifying concentration marker. A strict name candidate must:

1. occur in the same window as both customer language and a ≥10% concentration marker;
2. be a proper-name phrase adjacent to `accounted for`, `represented`, `sales to`, or `revenue from`;
3. exclude anonymous counts/labels, generic customer categories, governments, and pronouns; and
4. be preserved as extracted rather than silently fuzzy-matched.

This v1 audit passes to a separately declared historical-entity-resolution audit only if all gates
pass:

- at least 99% of in-period manifest documents exist and decompress successfully;
- at least 500 concentration candidates exist, with at least 25 in every calendar year;
- all ten years contribute exactly 30 rows to the deterministic sample;
- at least 50% of sampled documents yield one or more strict name candidates; and
- no sampled row lacks CIK, accession, acceptance timestamp, source URL, or document hash.

Thresholds and extraction rules are not altered after aggregate results are observed. A pass does
not authorize prices or returns. Failure is `DATA_GATED`. Even after a pass, historical public-issuer
resolution, relationship expiry, amendments, shared analyst coverage, event definition, delistings,
costs, capacity, neutralization, walk-forward design, PBO, DSR, and portfolio correlation remain
mandatory independent gates.

## Machine outputs

- `artifacts/feasibility/customer_supplier_propagation/candidate_manifest.parquet`
- `artifacts/feasibility/customer_supplier_propagation/document_sample.parquet`
- `artifacts/feasibility/customer_supplier_propagation/result.json`

## Claim boundary

This protocol can establish only whether public 10-K text is sufficiently prevalent and explicit to
justify a historical entity-resolution audit. It cannot establish an investable graph or any return,
Sharpe, drawdown, correlation, capacity, or sleeve-admission claim.

## Locked result

The exhaustive source pass covered 36,424 manifest filings from 2016–2025. Primary documents were
present and decompressible for 36,243 rows (99.503%), passing the 99% lineage gate. The broad
prefilter retained 29,220 filings, every year contributed well above 25 candidates, and the frozen
sample contains exactly 30 documents in each of ten years.

The relationship-definition gate failed. Only 106 of 300 sampled documents produced one or more
machine name candidates (35.333%, versus the locked 50% minimum). Post-result inspection also found
that the v1 syntactic candidates include geographies, customer categories, and fragments in addition
to genuine legal names. The output is therefore not a production relationship graph and must not be
silently entity-resolved. The extraction rule is not tuned after observing this result.

**Decision:** `DATA_GATED`. A separately declared v2 would require frozen human labels and a
precision/recall gate before historical entity resolution. Zero market records, prices, returns,
signs, horizons, or portfolio statistics were opened; zero return identities were spent.

Machine-readable result:
`artifacts/feasibility/customer_supplier_propagation/result.json`.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/electricity-load-weather-feasibility
------------------------------------------------------------------------------

# Electricity load/weather spread — key-free feasibility decision

**Decision date:** 2026-08-15  
**Decision:** DATA-GATED; no return trial or hypothesis identity spent.

## Economic mechanism

Unexpected weather-driven electricity demand can change the marginal generation stack and the
value of regional power relative to its marginal fuel. The proposed sleeve is not a directional
weather bet: it must trade a regional power/fuel dislocation, neutralize generic natural-gas trend
and seasonality, and use only forecasts available before the execution timestamp.

## What the official-source audit established

- Form EIA-930 contains hourly actual demand and next-day demand forecasts by balancing authority.
  Respondents submit prior-day forecasts and operating data by 07:00 Eastern.
- EIA publishes bulk operating history without an API key, including history before 2019. The
  current EBA archive is a mutable latest-state file, not an append-only release-vintage archive.
- EIA explicitly says balancing authorities can revise historical submissions and that corrected
  values replace the historical record. A backtest downloaded today therefore cannot prove what
  forecast value was visible at the original decision time.
- NOAA's GEFSv12 reforecast archive provides a fixed-model retrospective weather dataset for
  2000-2019. It is useful for model and schema feasibility, but it is not the operational forecast
  market participants observed and cannot by itself establish tradable point-in-time performance.
- CME lists financially settled PJM Western Hub peak and off-peak futures. The 1 MW monthly
  contracts began Globex listing in July 2026; older power contracts are predominantly
  block-market instruments. Free price proxies cannot establish executable historical spreads.
- PJM Data Miner exposes public operating and market data, but its stated terms prohibit
  redistribution of data or derived information without membership. It is not a suitable source
  for the open research book without a separate license review.

## Fixed production market set

The first admissible production study is deliberately narrow:

1. PJM Western Hub day-ahead peak monthly power futures;
2. PJM Western Hub day-ahead off-peak monthly power futures; and
3. Henry Hub natural-gas futures as the marginal-fuel control, not as a substitute outcome.

ERCOT, MISO, nodal prices, electricity-sector equities, UNG and utility ETFs are excluded from the
first study. Adding them would change the hypothesis or introduce non-executable proxy risk.

## Data required before preregistration

- Append-only EIA-930 forecast snapshots captured with receipt timestamps, or a licensed archive
  that retains every original forecast vintage and correction.
- Operational NOAA forecast vintages with initialization and availability timestamps. GEFS
  reforecasts may be used only as a calibration control and must be labeled retrospective.
- CME DataMine trade, settlement, open-interest and bid/ask history for the exact power and gas
  contracts, plus point-in-time contract specifications and roll metadata.
- Written confirmation that the intended broker supports the exact power contracts and order
  types. An Alpaca key does not solve this requirement because Alpaca is not the execution venue
  for the fixed power-futures set.
- A redistribution/license review before any PJM-sourced value or derived statistic is published.

## Promotion and kill boundary

Do not preregister or inspect returns until the data above are present. Then lock one regional
construction, release clock, weather-to-load model, roll rule, costs, block constraints, capacity
curve and trend/seasonality controls. Kill if original vintages cannot be reconstructed, if quoted
liquidity cannot support the declared AUM, or if residual returns reduce to natural-gas trend,
ordinary seasonality or a short-volatility power premium.

## Primary official references

- EIA Form 930 data and quality notes: https://www.eia.gov/electricity/gridmonitor/about
- EIA open-data bulk manifest: https://www.eia.gov/opendata/bulk/manifest.txt
- EIA API documentation: https://www.eia.gov/opendata/documentation.php
- NOAA GEFSv12 reforecast archive: https://registry.opendata.aws/noaa-gefs-reforecast/
- NOAA GEFS archive specifications: https://www.ncei.noaa.gov/products/weather-climate-models/global-ensemble-forecast
- PJM Data Miner terms notice: https://www.pjm.com/markets-and-operations/etools/data-miner-2.aspx
- CME PJM contract listings: https://www.cmegroup.com/markets/energy/electricity.html

## Sealed collection checkpoint — 2026-08-16

`scripts/audit_electricity_load_weather_feasibility.py` now binds a fixed PJM, ERCOT, MISO and
ISO-NE panel with actual-demand (`D`) and day-ahead-demand-forecast (`DF`) series for 2019–2025.
It requests only EIA-930 schema and load/forecast values—never power or fuel prices, positions, or
returns—and fails closed unless all eight identities and required fields are present.

The public `DEMO_KEY` returned persistent rate limiting during the sealed run. Bounded retry and
`Retry-After` handling were exercised, but the collector refused to emit partial coverage. The
machine result is therefore `DATA_GATED` with `source_collection_complete=false` and blocker
`official_eia_collection_rate_limited_or_unavailable`. This is an operational collection failure,
not evidence against the economic mechanism and not permission to weaken the source contract.

Even a successful rerun cannot authorize returns: the EIA schema lacks an explicit forecast issue
or revision-vintage timestamp and an unambiguous timezone/DST-fold field; full historical
missingness/revision auditing and an operational NOAA vintage corpus also remain mandatory. Zero
return hypotheses were spent.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/energy-inventory-lineage
------------------------------------------------------------------------------

# Petroleum inventory scarcity: a preregistered negative result

**Short title:** Petroleum inventory scarcity  
**Author:** Arhan Canli, Founder and Quantitative Researcher, Canli Capital  
**Family key:** `energy_inventory` · **System:** ALPHAC / AlphaForge  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

This study tests one preregistered implementation of petroleum-inventory scarcity using EIA
first-release data and liquid exchange-traded energy proxies. The signal enters on the next market
open after release, normalizes inventory surprises against five years of seasonal history, and
hedges trailing DBC beta. Over 2,669 immutable ledger observations, annualized Sharpe was -0.5893,
skew was -1.5157, and kurtosis was 30.2245. The fuller probe measured net Sharpe -0.5892, Newey-West
t-statistic -1.8450, DSR effectively zero, and maximum drawdown of 41.05%. It passed exposure and
correlation checks but failed the return, robustness, product-consistency, portfolio, and capacity
gates. The verdict is KILL and the family contributes zero sleeves.

## Economic hypothesis

Petroleum inventories connect physical scarcity to spot and futures prices. Low inventories can
raise convenience yield because holding the physical commodity protects production and delivery
needs. Gorton, Hayashi, and Rouwenhorst document broad relationships between commodity inventories,
the basis, and risk premia
([Review of Finance](https://doi.org/10.1093/rof/rfs019)).

The ALPHAC hypothesis is narrower. It asks whether the first public EIA petroleum release contains
incremental information that can be traded after publication, once normal seasonality and broad
commodity beta are controlled. This timing distinction is essential. A relation visible in
revised inventory history or contemporaneous prices is not necessarily available to a trader at
the next session open.

## Preregistered implementation

The single charged probe uses USO and UGA as energy return proxies and DBC as the hedge instrument.
The inventory score is normalized using five seasonal years, scaled over 52 weeks, and clipped to
the interval [-3, 3]. Positions enter at the next session open after the EIA release. DBC hedge
beta is estimated over 252 trailing sessions and clamped to [-3, 3]. One-way costs are 6 basis
points for USO, 10 for UGA, and 3 for DBC. The out-of-sample period begins in 2016.

This is one configuration. PBO is not defined because no selection surface exists inside the
probe. The identity is still charged to the 228-trial global union for selection-adjusted
inference.

## Result

| Measure | Value |
|---|---:|
| Net annualized Sharpe | -0.5892 |
| Newey-West t-statistic | -1.8450 |
| Probabilistic Sharpe ratio | 0.0248 |
| Deflated Sharpe ratio, 228-trial union | 7.37e-11 |
| Maximum drawdown | 41.05% |
| Annualized turnover | 52.30x |
| Net Sharpe at twice costs | -0.9977 |
| Realized DBC beta | -0.0137 |

Both standalone products were negative: USO Sharpe was -0.4603 and UGA Sharpe was -0.7426. The
twice-cost result moved farther below zero. The negative left tail and high turnover make the
failure economically stronger than a marginally insignificant mean.

## Diversification did not rescue the return

The candidate had low ordinary correlation with the four comparison sleeves. Average correlation
was 0.0012 and the largest pair was 0.0323. The largest stressed correlation was 0.0790. Those
figures clear the probe's overlap thresholds, but low correlation is not a sufficient admission
criterion.

At a 10% test weight, the candidate increased common-window book Sharpe by 0.0132 before the
mean-zero control. Under the mean-zero control the change was -0.0139, and the leave-one-year-out
change was negative for 2023. The observed standalone loss therefore cannot be defended as a
stable diversification premium.

The proxy capacity calculation was also poor. At 1% of ADV, the fifth-percentile estimate was only
$14,919. This model is not a market-capacity certification, but it decisively fails the
preregistered $5 million floor.

## Gate decision and provenance

Five of thirteen preregistered research checks passed. Exposure and correlation limits passed;
minimum Sharpe, DSR, Newey-West significance, twice-cost Sharpe, product consistency, mean-zero
book contribution, leave-one-year-out stability, and capacity did not. The machine verdict is
`KILL`.

The ETF input source is locally mapped to Yahoo adjusted market data. A sanitized execution
receipt records 5,119 USO bars, 4,645 UGA bars, and 5,163 DBC bars, with persisted partition hashes
and an ingestion timestamp inside the execution window. This establishes local source identity,
not redistribution rights, exact historical loader bytes, or independent replication. Raw rows
remain withheld.

## Reproduction and decision

The governed probe command is:

```text
uv run python scripts/probe_eia_petroleum_inventory.py
```

The result is bound by its preregistration, input manifest, runner hash, environment lock, and
admission-contract hash. The family packet is
[`energy_inventory_family.json`](/glassbox/energy_inventory_family.json).

**Decision: FAIL / zero sleeves.** First-release discipline, low beta, and low correlation do not
offset a negative, left-tailed, cost-sensitive return. Research and implementation were directed
by **Arhan Canli**; no historical result is relabeled as Alpaca or live performance.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/engineering-quality
------------------------------------------------------------------------------

# Engineering quality boundary

This page reports the current static-quality boundary honestly. It is engineering evidence, not
investment-performance evidence, and generating it evaluates no return stream or hypothesis.

## Verified clean scopes

The production package under `src/alphaforge` and the complete `tests` tree pass the repository's
configured Ruff rules. The production package also passes strict mypy across all 162 modules, and
the current non-network test suite contains 3,961 passing tests. Twelve credentialed network tests
remain deliberately deselected from the offline suite.

GitHub's clean-checkout gate has a narrower, explicit boundary. It deselects 37 tests marked
`workspace_evidence` because those checks require the git-ignored evidence corpus or the adjacent
Canli Capital site workspaces. Those 37 checks remain part of the complete local offline suite;
they are not represented as portable CI coverage. The marker makes this distinction visible in
test collection instead of allowing a clean runner to fail on undeclared local dependencies.

## Explicit debt

The `scripts` tree contains historical probes, one-off data collectors, diagnostics, and active
operational exporters accumulated across the research program. It is not Ruff-clean. The
machine-readable contract enumerates every current finding by rule and file and binds each debt
file to its SHA-256 digest.

This boundary is intentional but not celebratory: a clean production package does not make an
unclean repository clean. Historical scripts will be remediated in reviewed batches, prioritizing
active operational and publication paths before archived exploratory probes. Bulk autofix is not
used across return-generating scripts because even apparently stylistic rewrites deserve tests and
review when they sit near research evidence.

## Reproduction

Run:

```text
uv run ruff check src/alphaforge
uv run ruff check tests
uv run ruff check scripts
uv run mypy --strict src/alphaforge
```

The current source-bound result is published locally at
`/glassbox/lint_debt_contract.json`. Its status is
`PRODUCTION_AND_TESTS_CLEAN_HISTORICAL_SCRIPTS_DEBT`; it must not be represented as a whole-repo
clean claim.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/equity-insider-activity-lineage
------------------------------------------------------------------------------

# Clustered insider purchases: a corrected preregistered null

**Short title:** Clustered insider purchases  
**Author:** Arhan Canli, Founder and Quantitative Researcher, Canli Capital  
**Family key:** `equity_insider_activity` · **System:** ALPHAC / AlphaForge  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

This record examines whether clustered open-market purchases by corporate insiders predict
issuer returns after a realistic filing delay. Two immutable identities are charged because the
return aggregation was corrected before publication. The preliminary implementation produced
annualized Sharpe -0.9931; the corrected first measurement produced -0.2433 over 2,669
observations. A later replay on an advanced input snapshot measured Sharpe -0.2315 over 2,674
observations, Newey-West t-statistic -0.7490, DSR 1.83e-7, and maximum drawdown 24.84%. The strategy
had low correlation with the existing book but reduced observed book Sharpe at a 10% weight. Six
of twelve preregistered research checks passed. The verdict is KILL and the family contributes
zero sleeves.

## Mechanism and timing question

Purchases by officers and directors can reveal information about valuation, operating conditions,
or managerial confidence. A cluster may be more informative than one transaction because several
decision makers commit personal capital independently. Lakonishok and Lee study the information
content of insider trading
([Review of Financial Studies](https://doi.org/10.1093/rfs/14.1.79)).

The empirical question is narrower than that prior. It asks whether a public investor could trade
a specified Form 4 cluster after allowing for filing and implementation delay, then earn a
beta-hedged net return. Results depend on transaction coding, amendments, issuer identity, the
public timestamp, survivorship controls, and whether the portfolio weights simple returns
correctly. A favorable literature result does not validate any of those details.

## Frozen probe

The preregistered cluster requires at least two insiders purchasing within 30 days and at least
$100,000 of aggregate value. The position is held for 63 sessions after a two-session filing delay.
Issuer exposure is equal-notional at gross one and is hedged using trailing 252-session SPY beta,
clamped between zero and three. One-way costs are 6 basis points for the issuer leg and 1 basis
point for SPY. The out-of-sample period begins in 2016.

One configuration was tested, so PBO is not defined inside the probe. Both recorded
implementations remain charged to the global trial union.

## Correction and immutable trial accounting

The preliminary implementation linearly combined adjusted log returns. The canonical curve and
cost contracts require weighted simple returns. The correction changed implementation, not the
economic parameters, and retained the same KILL verdict. It was assigned a distinct auditable
configuration rather than overwriting the first result.

| Identity | Implementation state | Observations | Sharpe | Skew | Kurtosis |
|---|---|---:|---:|---:|---:|
| `7c522581b35475e3` | Preliminary log-return aggregation | 2,669 | -0.9931 | -0.3088 | 16.4671 |
| `d614fdc1daa2906c` | Corrected simple-return aggregation | 2,669 | -0.2433 | 0.2909 | 17.1010 |

The large change in Sharpe shows why the correction matters. Preserving both identities prevents
an implementation fix from silently erasing the research path.

## Corrected replay result

The later replay contains five additional observations from an advanced data lake. It is an
out-of-sample extension, not an exact reproduction of the immutable first measurement.

| Measure | Value |
|---|---:|
| Net annualized Sharpe | -0.2315 |
| Newey-West t-statistic | -0.7490 |
| Probabilistic Sharpe ratio | 0.2260 |
| Deflated Sharpe ratio, 228-trial union | 1.83e-7 |
| Maximum drawdown | 24.84% |
| Annualized turnover | 2.91x |
| Net Sharpe at twice costs | -0.2850 |
| Realized SPY beta | 0.0455 |

The return remains negative after correction and at twice costs. The low realized market beta
shows that broad equity exposure is not an adequate explanation for the failure.

## Diversification, capacity, and decision gates

Average ordinary correlation with the four comparison sleeves was -0.0655; the largest ordinary
pair was 0.0570 and the largest stressed pair was 0.1414. These are favorable overlap statistics.
At a 10% test weight, however, observed common-window book Sharpe fell from 1.2236 to 1.1301, a
change of -0.0934. Every leave-one-year-out change from 2023 through 2026 was negative.

The fifth-percentile proxy capacity at 1% of ADV was $5.31 million, which passed the probe floor.
This is model evidence, not a capacity certification. Capacity and diversification cannot admit a
strategy with negative standalone return and an adverse observed portfolio contribution.

Six of twelve preregistered research checks passed. Beta, correlation, mean-zero portfolio delta,
and proxy capacity checks passed; minimum Sharpe, DSR, Newey-West significance, twice-cost Sharpe,
observed book contribution, and leave-one-year-out stability did not. The machine verdict is
`KILL`.

## Reproduction and claim boundary

The current-snapshot command is:

```text
uv run python scripts/probe_insider_clusters.py
```

The preregistration, input manifest, runner, environment lock, and admission contract are
SHA-256-bound. Because the current snapshot contains five more observations, this command audits
the unchanged corrected implementation but does not recreate the exact first curve. There is no
broker-reconciled forward record and no Alpaca return attributed to this family.

[`equity_insider_family.json`](/glassbox/equity_insider_family.json) preserves both immutable
identities; the related probe result preserves the corrected extension and explicit reproduction
boundary.

**Decision: FAIL / zero sleeves.** The correction improved the estimate but did not create a
positive result. Research, correction governance, and implementation were directed by
**Arhan Canli**.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/equity-low-beta-lineage
------------------------------------------------------------------------------

# Equity low beta: two negative identities and no defensive sleeve

**Short title:** Equity low beta  
**Author:** Arhan Canli, Founder and Quantitative Researcher, Canli Capital  
**Family key:** `equity_low_beta` · **System:** ALPHAC / AlphaForge  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

Two historical identities test a 252-session equity beta rank. The implemented portfolio seeks a
long-low-beta, short-high-beta spread under rank allocation. The shorter configuration reports
annualized Sharpe -0.5995 over 728 observations. A deep-history configuration reports -0.0679 over
5,384 observations, with skew 8.2898 and kurtosis 311.7071. Neither estimate supports a defensive
sleeve. The extreme higher moments in the longer summary also make a curve-level audit mandatory;
they are not treated as evidence of an attractive positive tail. Exact curves, maximum drawdown,
current-union DSR, capacity, and forward execution are not established. The family contributes
zero sleeves.

## Hypothesis and economic prior

The low-beta hypothesis asks whether equities with low trailing exposure to the market earn a
better risk-adjusted return than high-beta equities after portfolio scaling and implementation
costs. Frazzini and Pedersen connect a betting-against-beta premium to leverage constraints:
investors unable or unwilling to lever low-risk assets may overpay for high-beta securities
([Journal of Financial Economics](https://doi.org/10.1016/j.jfineco.2013.10.005)).

That mechanism does not imply that every beta-ranked long-short portfolio should work. Results can
depend on beta estimation, volatility scaling, financing, short availability, sector composition,
microcaps, delistings, corporate actions, and the universe definition. A low-beta rank can also
overlap quality, profitability, size, and market-timing exposures. ALPHAC therefore treats the two
rows as implementations of one defensive family, not separate sleeves.

## Recorded designs

Both identities use signal `eq_bab_252`, rank allocation, 252 training bars, 63 test bars, and a
10-basis-point no-trade band. They differ in historical scope and rebalance cadence.

| Identity | Recorded start | Rebalance | Configured IDs | Observations | Sharpe | Skew | Kurtosis |
|---|---|---:|---:|---:|---:|---:|---:|
| `1db3096d8f18eef5` | 2022-07-01 | 21 bars | 375 | 728 | -0.5995 | 0.2439 | 6.8348 |
| `6c08c11a04ef43c5` | 2000-01-01 | 63 bars | 6,880 | 5,384 | -0.0679 | 8.2898 | 311.7071 |

The configured identifier count is a lineage field, not a claim that every identifier was
simultaneously eligible or traded. Point-in-time membership and exact position histories require
the missing curve-level packet.

The shorter result is plainly negative. The longer result is closer to zero, but its extreme skew
and kurtosis show that the annualized Sharpe is not a sufficient description. A small number of
large observations, stale prices, corporate-action discontinuities, changing universe coverage,
or genuine jump returns could generate such moments. The summary cannot adjudicate among those
possibilities.

## Why the longer sample does not rescue the signal

A longer date range increases chronology, not automatically identification. The deep-history
configuration changes the available universe and rebalance cadence alongside the sample period.
It is therefore not a clean extension of the 375-identifier test. Comparing -0.5995 with -0.0679
does not isolate a time effect, a breadth effect, or a cadence effect.

The extreme moments also prevent a conventional Gaussian interpretation of Sharpe uncertainty.
Without daily returns, block dependence, event concentration, and drawdown cannot be measured.
No DSR is reconstructed from summary moments, and no favorable sign is inferred from the positive
skew. A strategy can have rare positive jumps and still be unusable or incorrectly measured.

## Execution and portfolio boundary

The family packet does not establish borrow availability, short rebates, financing, market impact,
turnover, or capacity. Those omissions are especially material for the high-beta short leg, where
borrow and distress risk can be concentrated. There is also no identity-matched portfolio
correlation study. Conceptual distinctness from AlphaMax momentum or equity quality is not measured
diversification.

No broker-reconciled forward record exists for either identity. No AlphaMax return, Alpaca paper
return, or other sleeve result is relabeled as low beta.

## Reproduction path and next valid test

[`equity_low_beta_family.json`](/glassbox/equity_low_beta_family.json) binds the two hypothesis
keys, config hashes, signal names, first ledger summaries, and immutable ledger hash. It also marks
maximum drawdown, capacity, and broker-forward evidence as unestablished.

A valid new study would freeze one point-in-time equity universe, define the beta estimator and
missing-data rules, retain exact daily positions and returns, model borrow and financing, test
corporate-action integrity, and preregister the decision thresholds before inspecting results. It
would be a new charged identity, not a repair of either historical row.

**Decision: FAIL / zero sleeves.** Both recorded implementations are non-positive and the longer
one contains unresolved extreme moments. Research and implementation were directed by
**Arhan Canli**.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/equity-narrative-change-lineage
------------------------------------------------------------------------------

# Annual risk-factor narrative stability: a preregistered null

**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `equity_narrative_change`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

ALPHAC preregistered one test of annual 10-K Item 1A narrative stability before opening the
2016–2025 return window. The locked strategy bought issuers with stable disclosures and sold
issuers with changed disclosures after controlling for filing reaction, momentum, and filing-time
industry. Across 2,514 observations, net Sharpe was -0.0074, DSR 0.0000114, Newey–West t-stat
-0.0242, and maximum drawdown -28.47%. Twelve of 20 research gates passed, but the return, DSR,
stress-cost, short-leg, capacity, mean-zero book-delta, and expected-shortfall gates failed. The
sealed verdict is **KILL**. No sleeve was admitted.

## Hypothesis, literature, and overlap

Material changes to risk disclosures may reveal changing operating or legal conditions before
prices fully adjust. Cohen, Malloy, and Nguyen's *Lazy Prices* provides the prior
([NBER working paper](https://www.nber.org/papers/w25084)); it does not validate ALPHAC's corpus,
signal, or return. The family is an issuer-information mechanism, not a momentum, value, quality,
or generic sentiment sleeve. Exactly one identity was tested, and its failed direction was not
inverted.

The locked signal was five-token-shingle Jaccard stability between each unamended 10-K Item 1A and
its immediate predecessor. Monthly residualization controlled for the filing reaction, 12-1
momentum, and accession-time two-digit SIC. The top residual quintile was long, the bottom quintile
short, each cohort held 63 sessions, and the stock book was hedged with contemporaneous 252-session
SPY betas. Baseline costs were 15 basis points one-way for stocks, one basis point for SPY, and 3%
annual borrow on shorts.

## Trial and point-in-time lineage

The immutable identity is hypothesis key `e2b76a7604131f00`, configuration hash
`41ce2b1f40450a6e`. The preregistration fixed the direction, section, parser, controls, timing,
costs, capacity limits, diversification test, and kill rules before returns were opened. SEC
acceptance timestamps and immutable accession archives governed document availability; Sharadar
issuer intervals, corporate actions, and delisted histories governed market lineage. A canonical
input manifest binds every consumed market series.

The corpus processed 82,491 eligible manifest rows, extracted 73,744 Item 1A sections, formed
65,050 adjacent filing pairs, and selected 5,556 rows across 52 cohorts. Fifty-eight terminal
force-flat events were disclosed. Their presence independently prevents an `ADD` decision pending
dedicated delisting payouts; the return gates already fail without relying on that escalation.

## Results and decision

| Measure | Persisted value |
|---|---:|
| Net / 2x-cost Sharpe | -0.0074 / -0.4621 |
| DSR / PSR | 0.0000114 / 0.4906 |
| Newey–West t-stat | -0.0242 |
| Maximum drawdown | -28.47% |
| Realized SPY beta | 0.0033 |
| Annual turnover | 3.954x |
| 1% ADV p05 capacity | $739,828.89 |

The low beta and low average correlation of 0.0235 do not rescue absent standalone edge. The
short leg's gross contribution was negative, capacity missed $5 million, and 10% book inclusion
failed the mean-zero control and worsened expected shortfall. The candidate passed 12 of 20
research checks and is technically ineligible under the admission contract.

**Decision: KILL.** The family contributes zero sleeves, no Alpaca position, and no published live
return. The result is not evidence of forward Sharpe or expected drawdown. A transcript,
embedding, sentiment, quarterly-filing, or opposite-direction test would be a new hypothesis and
must be separately preregistered and charged.

## Reproduction, evidence, and credit

- [`/research/prereg-earnings-narrative-change.md`](/research/prereg-earnings-narrative-change.md)
 : immutable preregistration.
- [`/glassbox/earnings_narrative_change_result.json`](/glassbox/earnings_narrative_change_result.json)
 : complete sealed result.
- [`/glassbox/equity_narrative_family.json`](/glassbox/equity_narrative_family.json): deterministic
  family packet with hashes, exact configuration, gates, and lineage.
- [`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json): global union join.

The work requires the pinned AlphaForge environment and source corpus. Public SHA-256 bindings
make artifact replacement detectable; they do not imply independent peer review. The research,
system architecture, and publication were authored and directed by **Arhan Canli**, Founder of
Canli Capital.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/equity-quality-lineage
------------------------------------------------------------------------------

# Equity fundamental quality: 11 identities and no validated sleeve

**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `equity_fundamental_quality`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

ALPHAC recorded 11 distinct equity-quality return identities spanning gross profitability,
operating margin, return on equity, a quality composite, and a growth/profitability/earnings
quality composite. Immutable annualized Sharpe measurements range from -0.8316 to +0.7643. Nine
of 11 are negative. The two positives are both operating-margin variants over the shortest
2022–2026 history; the same signal over 2000–2026 is -0.4174. No family-wide persisted curves,
drawdowns, DSR values, capacity sweep, or broker-reconciled forward record survive for these
identities. The correct status is research-only, not a validated sleeve.

## Mechanism, literature, and overlap

Quality factors hypothesize that profitable, conservatively financed businesses earn returns not
fully explained by market beta, or that investors underweight persistent operating strength.
Novy-Marx's gross-profitability evidence provides an important prior
([Journal of Financial Economics](https://doi.org/10.1016/j.jfineco.2013.01.003)). The Fama–French
five-factor model incorporates operating profitability and investment
([Journal of Financial Economics](https://doi.org/10.1016/j.jfineco.2014.10.010)). Neither source
validates ALPHAC's point-in-time joins, universe, costs, or implementation.

Quality can overlap value, investment, momentum, sector structure, and defensive equity exposure.
The taxonomy assigns mixed price-momentum configurations to AlphaMax before fundamental labels;
the 11 rows here are therefore the quality-only family boundary, not every run containing a quality
feature. One family can contribute at most one independent sleeve.

## Complete trial lineage

| Signal group | Identities | Persisted Sharpe evidence |
|---|---:|---|
| `eq_gross_profitability` | 3 | -0.8214 to -0.2635 |
| `eq_operating_margin` | 3 | -0.4174 to +0.7643 |
| `eq_quality_composite` | 3 | -0.8316 to -0.5926 |
| `eq_qual_gpe` | 1 | -0.5856 |
| `eq_roe` | 1 | -0.7289 |
| **Total** | **11** | **2 positive; 9 negative** |

The machine packet publishes each exact hypothesis key, config hash, configuration, immutable
ledger source and source hash, observation count, Sharpe, skew, and kurtosis. History varies from
728 to 5,384 observations. That variation is material: the strongest result has only 728
observations and does not replicate in the longer operating-margin identity.

Several long-history measurements have implausibly extreme higher moments, including skew below
-24 and kurtosis above 969. Those values are evidence of unresolved return/data construction or
tail behavior, not performance achievements. Without the original curves, they cannot be repaired
or reinterpreted into credible drawdown and DSR estimates.

## Evidence boundary and decision

All 11 rows currently have immutable-ledger-summary evidence only. The audit deliberately reports
maximum drawdown and artifact-era DSR as missing. A Sharpe point estimate, even +0.7643, cannot pass
selection adjustment, tail-risk, capacity, diversification, or execution gates by itself.

There is no family capacity sweep, no admissible forward configuration, no Alpaca paper sleeve,
and no live return attributed to fundamental quality. Existing AlphaMax performance is momentum
performance and must not be relabeled as quality.

**Decision: NOT ESTABLISHED / RESEARCH ONLY.** Zero sleeves. A future quality candidate requires a
single preregistered formula, point-in-time fundamental availability, survivorship-inclusive issuer
lineage, persisted daily curves, costs and borrow, current-union deflation, capacity, crisis
correlation, and broker-reconciled forward evidence.

## Reproduction and credit

- `docs/design/PREREG_FUNDAMENTAL_SINGLES.md`: historical family specification.
- `scripts/audit_equity_fundamental_families.py`: deterministic taxonomy and ledger audit.
- [`/glassbox/equity_quality_family.json`](/glassbox/equity_quality_family.json): machine packet.
- [`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json): global union and
  remaining identity-packet debt.

The evidence and ALPHAC implementation were authored and directed by **Arhan Canli**, Founder of
Canli Capital. Explicit authorship does not imply peer review or independent verification.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/equity-value-investment-lineage
------------------------------------------------------------------------------

# Equity value, issuance, and investment: 13 identities and unstable evidence

**Short title:** Equity value and investment: complete trial lineage  
**Author:** Arhan Canli, Founder, System Architect, and Quantitative Researcher, Canli Capital  
**Research system:** ALPHAC / AlphaForge  
**Family key:** `equity_fundamental_value_investment`  
**Status:** public research record; not peer reviewed; not an investment solicitation  
**Evidence date:** 2026-08-22

## Abstract

ALPHAC recorded 13 equity value/investment identities: book-to-price, earnings yield,
sales-to-price, accruals, asset growth, net issuance, investment-to-revenue, a value composite, and
52-week-high context. Eleven have finite immutable Sharpe measurements ranging from -0.9676 to
+0.8276; nine of those 11 are negative. Accruals and one net-issuance run are non-finite. Asset
growth flips from -0.6858 over 2018–2021 to +0.8276 over 2000–2026, while both book-to-price runs
are negative. This is specification and data-instability evidence, not a validated return family.

## Economic hypotheses and literature

Value ratios ask whether prices are low relative to accounting fundamentals. Investment factors
ask whether aggressive asset growth or security issuance predicts lower subsequent returns,
possibly through overinvestment, mispricing, or financing flows. Accruals ask whether cash and
accounting components of earnings have different persistence.

The Fama–French five-factor model formalizes value, profitability, and investment factors
([Journal of Financial Economics](https://doi.org/10.1016/j.jfineco.2014.10.010)). Cooper, Gulen,
and Schill document the asset-growth effect
([Journal of Finance](https://doi.org/10.1111/j.1540-6261.2008.01370.x)). Pontiff and Woodgate study
shares outstanding and cross-sectional returns
([SSRN source record](https://doi.org/10.2139/ssrn.679143)). These are priors, not
validation of ALPHAC's formulas, timestamps, universe, or execution.

Value, investment, issuance, profitability, and momentum overlap mechanically and empirically.
The taxonomy groups these 13 implementations into one family-level evidence burden; it does not
present each accounting ratio as an independent sleeve.

## Complete family accounting

| Signal group | Identities | Persisted Sharpe evidence |
|---|---:|---|
| `eq_asset_growth` | 2 | -0.6858 and +0.8276 |
| `eq_book_to_price` | 2 | -0.9676 and -0.3219 |
| `eq_net_issuance` | 3 | -0.3113, -0.1289, and non-finite |
| `eq_ilrev` | 1 | +0.6911 |
| `eq_earnings_yield` | 1 | -0.5526 |
| `eq_sales_to_price` | 1 | -0.5185 |
| `eq_value_composite` | 1 | -0.5994 |
| `eq_52whigh_252` | 1 | -0.2895 |
| `eq_accruals` | 1 | non-finite |
| **Total** | **13** | **11 finite; 2 positive; 2 non-finite** |

Each row remains charged to the 228-identity union. The machine packet includes exact hypothesis
and configuration hashes, source-ledger hashes, observation counts, and available moments. It does
not invent results for non-finite measurements.

The strongest finite identity, long-history asset growth at +0.8276, is contradicted by the
shorter asset-growth run at -0.6858 and carries skew +7.5222 with kurtosis 188.87. The positive
investment-to-revenue identity has skew +16.5759 and kurtosis 591.70. Several negative runs have
equally extreme tails. Point estimates from such summary-only evidence cannot establish a stable
return process.

## Missing evidence and decision

The family audit has no complete curve binding for these 13 specific identities, so maximum
drawdown, DSR, PBO, capacity, and crisis correlation remain unmeasured. Historical documents and
some related artifacts may discuss individual signals, but they do not form a complete,
identity-matched family packet. The public packet says so explicitly.

No result is admitted, no Alpaca sleeve carries this family, and no live broker return is assigned
to it. A repurchase/issuance feasibility programme is separate forward research; it cannot validate
these legacy summaries retroactively.

**Decision: NOT ESTABLISHED / RESEARCH ONLY.** Zero sleeves. Admission requires one newly frozen
point-in-time specification, exact filing availability and issuer identity, survivorship and
delisting controls, borrow and costs, persisted curves, current-union deflation, capacity, crisis
diversification, and broker-reconciled forward evidence.

## Reproduction and credit

- `docs/design/PREREG_FUNDAMENTAL_SINGLES.md`: historical single-factor specification.
- `docs/design/PREREG_SLEEVE4_INVESTMENT.md`: asset-growth preregistration.
- `docs/design/LITERATURE_REPURCHASE_ISSUANCE_FLOW.md`: issuance literature and overlap boundary.
- `scripts/audit_equity_fundamental_families.py`: deterministic family audit.
- [`/glassbox/equity_value_investment_family.json`](/glassbox/equity_value_investment_family.json)
 : machine-readable packet.
- [`/glassbox/trial_packet_manifest.json`](/glassbox/trial_packet_manifest.json): global join.

This research and ALPHAC implementation were authored and directed by **Arhan Canli**, Founder of
Canli Capital. The public hashes support scrutiny; they do not imply peer review or future return.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/execution-realism
------------------------------------------------------------------------------

# Execution realism and model boundary

This page describes what AlphaForge actually models as of 2026-08-18. It is an engineering
capability statement, not evidence of investment performance. The compatibility default remains
`NextOpenFill`; research that claims bar-liquidity realism must explicitly select
`ParticipationCappedFill` and publish that choice in its run config.

## Implemented and tested

| Risk | Current contract | Evidence boundary |
|---|---|---|
| Commissions and spreads | Venue/asset-aware fees and half-spread in one shared cost model | Unit-tested exact arithmetic |
| Nonlinear impact | Square-root impact with a 1% ADV build cap and hard 5% validity edge | Out-of-regime use fails loudly |
| Latency | Configured adverse price add-on | Placeholder until calibrated from paper fills |
| Partial fills | Optional next-bar participation cap, lot-flooring, explicit canceled residual | Missing/zero quote volume fails closed |
| Rejected/unfilled orders | Missing bars, missing cost inputs, missing liquidity and final-bar orders are counted and labeled; broker recovery ingests full or partial venue executions | No synthetic fallback fill |
| Holidays | Equity D1 execution follows exchange sessions | Weekend/holiday hopping is tested |
| Corporate actions | PIT split and cash-dividend replay, lake NaN-to-null normalization for no-cash splits with non-finite dividends still rejected, queued-order split rescaling, and metadata-confirmed delisting force-flat | No complex reorganizations, full historical coverage, dedicated delisting returns, or live broker path |
| Delistings | Point-in-time membership and metadata-confirmed conservative administrative force-flat | Dedicated delisting-return data remains a promotion requirement |
| Borrow and financing | General-collateral equity borrow and stored perp funding accrue; optional PIT locates, dynamic fees, recall buy-ins, cash credit, margin debit, and segregated short-sale-proceeds rates | No broad historical lending/rate coverage, multicurrency collateral, margin-call liquidation, broker reservation, restart persistence, auction replay or live broker path |
| Stale/missing data | Signal staleness holds, price collars, missing-bar drops and feed-quality checks | No bundled historical venue-outage coverage |
| Market status/outages | Optional PIT OPEN/HALTED/OUTAGE/AUCTION_ONLY/CLOSE_ONLY replay blocks impossible fills; enabling it now requires full run-interval coverage for every instrument before bars are read, while strict source-byte-bound manifests, exact official/vendor reconciliation, and audit-hash-bound reviewed providers preserve PIT lineage and expose every missing/future-known millisecond | No bundled historical status corpus, production feed adapter, empirical broad-market coverage evidence, auction-price model, smart routing or live status polling |
| Crowding and liquidation | Optional PIT ownership, short-interest, borrow-utilization and flow gate; ADV-haircut liquidation stress in shared pre-trade | No broad historical ownership/flow coverage, empirical unwind calibration or correlated-depth model |
| Operational controls | Pre-trade limits, reconciliation, risk-event storage, drawdown ladder and absorbing kill switch; three consecutive fill-outcome reconciliation failures persistently engage the kill and block submission | Live effectiveness still requires prospective paper evidence |
| Dated futures lifecycle | PIT contract metadata, session-counted first-notice/last-trade exits, immediate-next rolls, locked-limit classification and variation margin | Domain primitives only; no futures data, product calendar, cost schedule, backtest or broker path |
| Options lifecycle and surface integrity | PIT terms/quotes/official settlement/assignment notices; premium-currency-local static-arbitrage checks; single-underlying active surfaces; displayed bid/ask-bound strike monotonicity and convexity; ratio-preserving multi-leg IOC/FOK replay with homogeneous premium currency, side-specific displayed-size caps and net debit/credit limits; optional per-leg OPEN/HALTED/OUTAGE/AUCTION_ONLY/CLOSE_ONLY replay with proven reduce-only integrity; exact PIT side/liquidity/event-scoped fee revisions with declared rounding, minima, caps and rebates; complete-matrix internal scenario margin with cross-leg netting, locked model/input hashes, short floors and concentration add-ons; signed cash/physical expiry; source-bound adjusted baskets; immutable SHA-256 OCC memo archive; strict reviewed manifests and exact vendor reconciliation | Domain/data primitives only; no historical option-status corpus, complex-order auction model or live status polling/failover; internal margin is not broker/OCC/regulatory equivalent and excludes opening premium, margin calls and liquidation; no validated stress repricer/calibrated scenario corpus or verified historical fee corpus/production adapter; package replay assumes an atomic cross of independently displayed legs and has no fill probability, queue, price-improvement or beyond-size impact model; live OCC acquisition is Cloudflare-challenge-blocked; no historical fitted surface or reviewed adjustment corpus, parity/rate-dividend inputs, exercise model, backtest or broker path |

## Participation-capped fill semantics

For an order presented to a bar with open price `P`, observed quote volume `V`, lot size `L`, and
participation ceiling `p`, executable quantity is:

`min(order_qty, floor((p × V) / (P × L)) × L)`

The executed slice is priced by the same commission, spread, impact and latency model used by the
default fill. If the slice is smaller than the order, the engine records
`partial_fill_residual_canceled`; it does not silently assume the remainder traded. If quote volume
is absent/non-positive or the cap cannot support one valid minimum lot/notional, the engine records
`dropped_no_bar_liquidity` and executes nothing.

Residual cancellation is intentionally conservative and deterministic. Multi-bar child-order
scheduling, queue position and venue-specific rejection probabilities remain future work.

## Local engineering benchmark

The reproducible synthetic microbenchmark executes 100,000 fill-model calls per repeat across
seven repeats on the recorded CPython 3.12.13/arm64 Darwin runtime. In the 2026-08-17 snapshot,
median call time was 887 ns for the compatibility full-fill path and 2,004 ns for the
participation-capped path (2.26× the baseline). Deterministic checksums accompany every timing
sample.

These figures measure isolated Python fill-call overhead on one local machine. They are not
end-to-end backtest throughput, capacity, latency-to-market, or return evidence. The complete
machine-readable samples, workload, runtime metadata, guardrails and source hashes are published
at [`/glassbox/execution_models_benchmark.json`](/glassbox/execution_models_benchmark.json).

## Explicitly not implemented

- End-to-end securities lending: historical quote/locate/recall ingestion, broker reservations, restart persistence, buy-in auction replay, and live reconciliation.
- End-to-end financing: historical rate schedules, multicurrency cash/collateral, broker-specific haircuts and rehypothecation, margin calls/liquidation, and live reconciliation.
- End-to-end futures ingestion and trading: product calendars, dated quotes/settlements, fees and margin schedules, continuous-series attribution, broker routing, and historical limit/outage replay.
- End-to-end options ingestion and trading: historical fitted surfaces, put-call-parity inputs,
  operational unattended OCC acquisition (direct and headless-browser clients received a
  Cloudflare HTTP 403 managed challenge on 2026-08-18), automated PDF text extraction, reviewed
  historical adjustment coverage, a production vendor adapter, calibrated early-exercise/
  assignment modeling, quote repair, a verified historical fee corpus, broker-equivalent margin,
  validated scenario repricing, opening-premium collateral, margin calls/liquidation,
  complex-order-book execution, queue and
  beyond-displayed-size impact, historical option-status ingestion, complex-order auction
  execution, live outage polling/failover, backtest ledger, and broker reconciliation.
- Calibrated queue position, partial-fill continuation, auction imbalance/price formation, a content-verified historical status corpus with production adapters, and live outage failover.
- Historical crowding coverage and calibration: point-in-time ownership/flows, cross-manager overlap, and correlated liquidation-depth feedback.

No sleeve may claim these risks are modeled merely because the platform has a generic cost or
staleness control. Candidates requiring one of these capabilities remain data- or engine-gated.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/filing-facts-v0
------------------------------------------------------------------------------

# FilingFacts v0: financial reasoning items verified from SEC XBRL data

**Short title:** FilingFacts v0 dataset
**Author:** Arhan Canli
**Declared:** 2026-09-26, with its build and evaluation records published beside it.
**License:** [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)

FilingFacts is a set of 1,882 questions about the annual SEC filings of 402 companies.
Every answer is computed from the company's XBRL facts, re-derived by an independent checker, and
cited to the accession number of each filing it depends on, so a model's answer can be scored
against the filing rather than against another model.

## What is in it

| template | asks for | hops | items |
|---|---|---|---|
| change | the percent change of one concept between two fiscal years or balance dates | 2 | 402 |
| lookup | one value as reported in a named annual filing | 1 | 402 |
| net_assets | total assets minus total liabilities at one balance date | 2 | 338 |
| ratio | a ratio of two concepts for the same period (margin, leverage, cash share) | 2 | 402 |
| unanswerable | a period before the concept's earliest annual XBRL fact; the right answer is that the XBRL filings do not report it | 1 | 338 |

The items cite 3,024 facts from filings made between 2009-11-20 and 2026-09-11,
for periods ending between 1988-01-14 and 2026-06-30. Figures on this page are read from
[`/glassbox/datasets/filing-facts-v0.json`](/glassbox/datasets/filing-facts-v0.json).

Rules: only annual-report facts (fiscal period FY on 10-K, 20-F, 40-F and their amendments), so a
question never mixes a quarter with a year; one value per concept, period end and unit; a period
whose annual filings disagree on the value is dropped as ambiguous; an unanswerable item claims
absence only from the company's XBRL filings.

## Baseline: gpt-5.4-mini, 150 items, closed book and with a tool

| | closed book | with canli-validation-mcp's company tool |
|---|---|---|
| accuracy, all items | 19.3% | 68.0% |
| accuracy on answerable items | 0.8% | 65.8% |
| numbers given on answerable items that were wrong | 98.7% (76 numbers) | 17.7% (96 numbers) |
| answerable items the model called "not reported" | 36.7% | 14.2% |
| unanswerable items answered "not reported" | 93.3% | 76.7% |
| unanswerable items answered with an invented number | 0.0% | 0.0% |
| mean tokens per item | 187 | 3,833 |

By template (accuracy, closed book then with the tool): change 0.0% and 40.0%; lookup 0.0% and 80.0%; net_assets 0.0% and 73.3%; ratio 3.3% and 70.0%; unanswerable 93.3% and 76.7%.

Accuracy on all items rewards a model that answers "not reported" to everything, because the
unanswerable items then score. The behaviour rows separate knowing that data is absent from
declining to answer.

These historical v0 records used legacy answer parsing and retain parsed answers and scores,
but no raw model responses or scoring version. Their original scores cannot be independently
rescored, so the effect of the parsing changes is unmeasured. The v1 runner retains raw answers
and source bindings, with full-sample coverage and denominator rules documented in
[offline scoring and replay](https://github.com/arhancanli/canlicapital/blob/main/scripts/datasets/filing-facts/EVALUATION.md).
The historical dataset and evaluation files remain unchanged.

## Download

| file | contents | size |
|---|---|---|
| [filing-facts-v0.jsonl](/datasets/filing-facts/v0/filing-facts-v0.jsonl) | the items, one JSON object per line | 1,624 KB |
| [ff-eval-closed.json](/datasets/filing-facts/v0/ff-eval-closed.json) | closed-book baseline, every run | 32 KB |
| [ff-eval-mcp.json](/datasets/filing-facts/v0/ff-eval-mcp.json) | baseline with the company tool, every run | 32 KB |
| [gold-packet-v0.json](/datasets/filing-facts/v0/gold-packet-v0.json) | the gold packet annotators fill in | 28 KB |

Checksums: [SHA256SUMS](/datasets/filing-facts/v0/SHA256SUMS). The generator, the independent checker and
the evaluation harness are in [`scripts/datasets/filing-facts/`](https://github.com/arhancanli/canlicapital/tree/main/scripts/datasets/filing-facts), so
anyone can rebuild the items from the public company data, including from filings made after a
model's training cutoff.

## License and citation

The items are released under CC BY 4.0. The underlying SEC filings are US public domain.
Cite as: Arhan Canli (2026), FilingFacts v0: financial reasoning items verified from
SEC XBRL data, Canli Capital, https://canlicapital.com/research/filing-facts-v0.

## Help verify it

No item has been verified by a person yet (0 of 1,882). The gold packet holds
50 items stratified by template, and [the annotation page](/annotate) walks you through them in
your browser; [the annotation guidelines](https://github.com/arhancanli/canlicapital/blob/main/scripts/datasets/filing-facts/ANNOTATION_GUIDELINES.md)
say how to check each one against the filing itself. Two annotators fill copies independently, and
`agreement.mjs` reports raw agreement and Cohen's kappa for each judgement.

## Evidence boundary

The answers are checked against XBRL facts, not against the filings' rendered text, so a filer's
tagging error becomes the dataset's answer. The baseline covers one model on a fixed sample and
says nothing about other models. Restatement items (first-reported versus later-reported values)
are planned for a later version.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/financing-replay
------------------------------------------------------------------------------

# Point-in-time cash and collateral financing replay

AlphaForge can now accrue explicit cash-credit, margin-debit, and short-collateral rates inside the
event-driven backtester. This is engineering evidence, not historical financing coverage or return
evidence. No market returns were opened and no hypothesis was spent.

## Enforced behavior

- Every schedule carries observed, available, valid-from, and valid-until timestamps.
- An enabled run requires one schedule that covers the complete holding interval. Missing or
  expired coverage halts the run rather than forward-filling a rate.
- Positive unrestricted cash earns the credit rate; negative cash pays the margin-debit rate.
- Positive cash up to current short market value is treated as segregated short-sale collateral and
  receives its own explicit rate rather than the ordinary cash-credit rate.
- ACT/360 and ACT/365 conventions are explicit and persisted.
- Enabled replay requires one ledger currency. Mixed-currency books fail closed until FX cash
  ledgers exist.
- Every interval persists to `financing.parquet`, including its cash bases, rates, convention,
  source label, and signed payment. The net amount is echoed in run metadata.
- With no provider, the previous zero-cash-financing path remains unchanged.

## Deliberate boundary

The platform does not bundle historical broker rate schedules, infer a rate from today’s account,
or claim account-tier coverage. It does not yet model multi-currency cash, security-specific
haircuts, rehypothecation, intraday margin calls, forced liquidation, futures initial or maintenance
margin, options portfolio margin, or live broker statement reconciliation.

This foundation is intentionally separate from security borrow. Borrow fees price the availability
of a borrowed security; financing prices cash and collateral balances. Treating one as the other
would double-count or omit material carrying costs.

The machine-readable contract is available at
[`/glassbox/financing_contract.json`](/glassbox/financing_contract.json).


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/forward-sharpe-evidence-standard
------------------------------------------------------------------------------

# When a Forward Sharpe Ratio Becomes Evidence

A forward Sharpe ratio should not become a headline merely because a short paper-trading curve can
produce one. This paper defines the precommitted evidence states used by ALPHAC: when a point
estimate may be shown, when a target is only observed, and what must be true before the target can
be described as statistically established.

**Author:** Arhan Canli  
**Affiliation:** Canli Capital / AlphaC Algorithms  
**Version:** 1.1, 2026 (target history in section 1.1)  
**Capital boundary:** Alpaca and AlphaForge paper trading only; no real capital  
**Machine contract:** `/glassbox/forward_evidence_contract.json`  
**Current evaluation:** `/glassbox/forward_evidence_maturity.json`

## Abstract

The easiest time to report an extraordinary risk-adjusted return is when the record is shortest.
Sampling error is widest, the worst regime may not have occurred, and one favorable sequence can
dominate the estimate. ALPHAC therefore separates four states: an immature record, an
estimate-eligible record, a point target that has been observed but not established, and a target
that has cleared a frozen sample-length and Probabilistic Sharpe Ratio threshold. The rule requires
252 observed daily returns before publishing a mature point estimate and 756 before statistical
establishment is possible. Establishment additionally requires an annualized point Sharpe of at
least 2.0 and at least 0.95 probability, under the non-normal Probabilistic Sharpe Ratio formula,
that the true annualized Sharpe exceeds 2.0. Configuration continuity, record continuity, and a
fresh passing broker reconciliation are mandatory provenance gates. Realized drawdown, modeled
expected maximum drawdown, and modeled tail drawdown are reported as different quantities. The
standard is deliberately harder to satisfy than displaying a computed ratio because its purpose is
to prevent a target from becoming an achievement through presentation alone.

## 1. The claim being controlled

A Sharpe ratio is a ratio of estimated mean excess return to estimated return volatility. Both
terms are uncertain, and their ratio is especially unstable over a short record. Annualization does
not create information: multiplying a daily ratio by the square root of 365 changes its unit, not
the number of observations supporting it.

The controlled claim is therefore not “a Sharpe ratio can be calculated.” It is whether the public
record supports one of these progressively stronger statements:

1. the record exists but is too short for a mature estimate;
2. a mature point estimate may be published;
3. the point estimate is at or above the governing target; or
4. the evidence supports the stronger claim that the true Sharpe exceeds the target with the
   precommitted probability and sample length.

These statements are not interchangeable. In particular, a point estimate at or above 2.0 is an
observation about the sample. It is not statistical establishment of a forward Sharpe of 2.0.

### 1.1 The governing target and its history

The governing target is read from the machine contract's `forward_sharpe_target`, which is itself
projected from the owner's goals (`config/owner_goals.json`). It has moved once. From 2026-08-21 to
2026-09-14 the target was 1.5, the honest forward figure admission contract v6 adopted when it
withdrew an in-sample 2.0 to 2.5 objective. From 2026-09-14 it is 2.0, the owner's combined-book
goal net of costs, recorded on 2026-09-12 and confirmed on 2026-09-14. When the target moved the
record held 36 daily returns, 216 short of the 252 an estimate needs, so no point estimate was ever
published against 1.5 and nothing was regraded. A target change is an evaluation change, not a
trading change: it restarts no forward-evidence epoch and pools nothing. Every change is appended to
`forward_sharpe_target_history` in the contract with the record's status on the day it was
superseded, and the record is always evaluated against the target in force at evaluation time.

## 2. Return series and annualization

The input is the flagship paper curve: strictly increasing UTC dates and finite, strictly positive
equity marks. For consecutive published marks (E_{t-1}) and (E_t), the simple return is

\[
r_t = \frac{E_t}{E_{t-1}} - 1.
\]

Missing calendar dates are not filled with synthetic zero returns. A fabricated zero would alter
both the mean and variance while pretending that a mark existed. Instead, the observed
mark-to-mark series is evaluated and a separate continuity audit must pass. This keeps the
performance calculation and the missing-record question visible as two distinct checks.

For (T) observed returns, the per-period Sharpe is

\[
SR_d = \frac{\bar r}{s_r},
\]

where (s_r) is the sample standard deviation with one degree-of-freedom correction. The reported
annualized point estimate is

\[
SR_{ann} = SR_d\sqrt{365}.
\]

The 365-day convention matches the flagship's cross-asset paper calendar and the engine's frozen
daily analytics convention. It is a reporting convention only. The probabilistic calculation uses
the per-period ratio and the actual return count.

## 3. Probability that Sharpe exceeds the target

The Probabilistic Sharpe Ratio accounts for finite sample length and non-normal return moments. Let
(\gamma_3) be sample skewness and (\gamma_4) non-excess kurtosis, where a Gaussian distribution
has kurtosis 3. Against per-period benchmark (SR^*), the probability is

\[
PSR(SR^*) = \Phi\left(
\frac{(SR_d-SR^*)\sqrt{T-1}}
{\sqrt{1-\gamma_3 SR_d + \frac{\gamma_4-1}{4}SR_d^2}}
\right).
\]

ALPHAC sets (SR^*=2.0/\sqrt{365}). This is stricter and more relevant than testing only whether
Sharpe is positive. A probability that the true Sharpe exceeds zero may establish a positive edge;
it does not establish that the governing 2.0 target has been reached.

The implementation calls the same tested Probabilistic Sharpe Ratio routine used by the research
engine. It does not feed an annualized ratio into a per-period formula. The annualized target is
converted to the daily benchmark first, and (T) remains the count of daily return observations.

## 4. Frozen evidence states

| State | Minimum evidence | Permitted public claim |
|---|---:|---|
| `IMMATURE_RECORD_TOO_SHORT` | Fewer than 252 returns | Publish cumulative return and realized drawdown, but no mature Sharpe point estimate. |
| `ESTIMATE_ELIGIBLE_TARGET_NOT_OBSERVED` | At least 252 returns | Publish the point estimate and probability; state that the 2.0 target is not observed. |
| `TARGET_OBSERVED_NOT_ESTABLISHED` | Point Sharpe at least 2.0, but the establishment conditions are incomplete | State that the sample point estimate crossed the target and explicitly state that it is not established. |
| `TARGET_STATISTICALLY_ESTABLISHED` | At least 756 returns, point Sharpe at least 2.0, and (PSR(2.0)\ge0.95) | State that the forward paper record statistically establishes the target under this contract, while retaining the paper-capital boundary. |
| `FAIL_CLOSED_PROVENANCE` | Any mandatory provenance check fails | Suppress establishment regardless of the calculated ratio and publish the failed checks. |

The 252-return estimate threshold prevents a few weeks or months of noise from becoming a polished
annual figure. The 756-return establishment threshold aligns the live claim with the research
program's three-year minimum out-of-sample evidence horizon. Neither number is selected from the
observed result. Both were frozen while the current record remained immature.

## 5. Provenance is part of the statistic

A return series cannot establish the performance of a specification unless the specification and
record are identifiable. Every one of the following checks is mandatory:

- every constituent is labelled `PAPER_ONLY`;
- the measured live-configuration fingerprint matches its declaration and the fingerprint frozen
  for the evidence epoch;
- the record-continuity artifact has the required schema, a valid content hash, covers the latest
  flagship mark, and passes its declared gap policy;
- the Alpaca reconciliation has the required schema and a valid content hash;
- all dedicated Alpaca paper accounts reconcile, remain distinct, and report a passing status;
- broker evidence is no more than 36 hours old and is not materially earlier than the paper state;
- the current signed transparency-chain head has the required v2 schema, every link and Ed25519
  signature validates, every prospectively disclosed payload rehashes exactly, and the head payload
  equals the canonical daily paper state evaluated for Sharpe; and
- the locally simulated crypto account's latest cycle carries a complete order-book mark for every
  position, uses no entry-price fallback, reconciles cash plus marked market value to account
  equity, and covers the flagship's latest published date; and
- the expected-drawdown study has the required model schema.

If any check fails, the evaluator retains the underlying numerical state for diagnosis but changes
the public maturity state to `FAIL_CLOSED_PROVENANCE`. A strong return cannot compensate for an
unidentified configuration, stale broker evidence, or a discontinuous curve.

The transparency requirement is prospective and does not manufacture historical completeness.
Entries before the declared payload-disclosure boundary contain opaque signed hashes; their
underlying snapshots cannot be reconstructed from the public chain. OpenTimestamps checkpoints
add timing evidence for selected heads, but do not prove broker truth or replace payload disclosure.

The position-attribution requirement is also prospective. Rows written before the mark-aware
schema retain null mark and P&L fields; they are not backfilled from aggregate equity. Until the
first genuine complete cycle is persisted, the public maturity state is
`FAIL_CLOSED_PROVENANCE` with the shorter-record numerical state retained underneath it.

Any trading configuration change starts a new evidence epoch. Returns from materially different
specifications cannot be pooled silently. The live-change declaration records the boundary, and a
new contract must state whether any prior observations remain admissible for a new claim.

## 6. Three drawdown quantities, not one

The public record distinguishes:

1. **Realized live maximum drawdown:** the deepest peak-to-trough decline observed in the paper
   curve to date. It is descriptive and generally understates long-horizon risk when the record is
   short.
2. **Study-cell expected maximum drawdown:** the mean maximum drawdown across the declared
   simulation paths for one explicitly parameterized study cell. It can be compared with the 11%
   portfolio objective only after a production-equivalence audit establishes that the study cell
   represents the current live book.
3. **Study-cell p95 maximum drawdown:** the 95th percentile across those paths. It must appear
   beside the expected value because an acceptable mean can coexist with an unacceptable tail.

The expected maximum-drawdown objective is not a stop-loss and does not imply that losses are
bounded at 11%. A realized drawdown below 11% does not establish the modeled objective, and a model
estimate below 11% does not guarantee future realized losses. Separately, the owner's bound on
realized maximum drawdown is 10% (`realized_max_drawdown_bound`, in force 2026-09-14): the
evaluation publishes realized drawdown against it at every mark, never mixes it with the modeled
11% objective, and a realized drawdown inside the bound to date establishes nothing about future
drawdown.

The sealed current study uses 96 two-year paths, fourteen daily sleeves and a 10% annualized
book-level volatility target. The declared live paper composite has four sleeves, mixed hourly and
daily timebases, fixed weights and no second book-level volatility target or drawdown ladder after
constituent sizing. Constituents using `BlendStrategy` have their own 15% target; that setting is
not an ALPHAC-level target. Production shrinkage is also absent from the study. The study's 10.25%
expectation and 18.76% p95 are therefore published as study-cell results, not estimates of the
current live book.

A second, predeclared current-composition study maps the exact four fixed weights and strategic
overlay with no ALPHAC-level volatility target. It removes the selected-window mean and reports
both a 10,000-path circular block bootstrap and a 10,000-path 0.50-correlation stress-regime model.
Its conservative expected maximum drawdown is 9.32%, inside the 11% objective; its p95 is 16.45%,
outside it. This is stronger configuration mapping, not live establishment: the common history
begins after COVID and 2022 and the models do not replay constituent instruments, execution gaps
or dynamic ladder state.
`/glassbox/forward_drawdown_evidence.json` records the failed equivalence checks and binds the study,
contracts and implementation sources by SHA-256. The maturity report labels the objective
`LIVE_EXPECTED_MAX_DRAWDOWN_NOT_ESTABLISHED`.

## 7. Diversification evidence is a separate gate

The exact current-composition diversification study uses the same four fixed-weight sleeve curves,
missing-mark policy and strategic overlay as the current drawdown study. Sleeve correlation is
computed from the four sleeve returns; the overlay remains separate. The 1,061-row research window
produces an average pairwise correlation of +0.0248 and a synchronized 10,000-sample, 63-row block-
bootstrap upper 95% bound of +0.0487. The largest ordinary pair is +0.2098 and its upper bound is
+0.3025.

The prospective contract requires an average point no greater than 0.00 and an average upper bound
no greater than +0.10. The current point therefore **fails** even though its confidence bound,
ordinary-pair and stressed-design comparisons pass. Existing sleeves are not retroactively
adjudicated, and “near zero” is not used as a substitute for the signed gate. The study reports a
1.8153 sleeve-only diversification ratio, 3.8988 effective independent sleeves and fixed-to-cash
marginal historical book-Sharpe diagnostics, all labelled research simulation rather than forward
evidence. The research curves end before the broker-reconciled record begins, so live-forward
diversification remains unestablished.

## 8. Reproduction and mutation checks

The evaluator is `scripts/evaluate_forward_evidence_maturity.py`. It reads twelve authorities:

- `config/forward_evidence_contract.json`;
- `data/paper/state.json`;
- `artifacts/engineering/record_continuity.json`;
- `artifacts/engineering/alpaca_broker_reconciliation.json`;
- `artifacts/analysis/drawdown_live_estimator/result.json`;
- `artifacts/analysis/current_book_drawdown/result.json`;
- `artifacts/analysis/current_book_diversification/result.json`;
- `artifacts/engineering/forward_drawdown_evidence.json`;
- `meridian/public/glassbox/transparency_log.json`;
- `artifacts/engineering/crypto_position_attribution.json`;
- `artifacts/engineering/crypto_position_attribution_rollout_verification.json`; and
- this methodology paper.

It emits `artifacts/engineering/forward_evidence_maturity.json`, including SHA-256 bindings to the
contract, state, continuity report, broker reconciliation, drawdown and diversification studies,
sealed drawdown evidence, transparency chain, crypto position attribution, rollout verification,
and this paper. The result carries a content hash over its canonical body and is copied byte-for-
byte to both public hosts.

For crypto attribution, completeness is not inferred from populated columns alone. The evaluator
independently recomputes every position's market value as quantity times mark and unrealized P&L as
quantity times the difference between mark and average entry. Non-finite values, non-positive
prices, fallback marks, per-position arithmetic residuals, or failure of cash plus reconstructed
market value to equal recorded account equity all fail the Sharpe provenance gate closed. A flat
cycle is retained as a valid account observation but cannot certify a position-mark path it did not
exercise; certification waits for a non-empty natural cycle.

Runtime rollout is a separate mandatory authority. Before deployment it deterministically states
`NO_DEPLOYMENT_RECEIPT`, performs no Frankfurt query, and fails provenance closed. After a
hash-bound deployment receipt exists, it can pass only on a strictly later, non-empty natural cycle
with the complete attribution verdict above. The first successful receipt is then frozen for that
exact deployment receipt, preventing later cycles from rewriting the historical claim about what
first proved the runtime.

Run the focused verification with:

```text
uv run python scripts/evaluate_forward_evidence_maturity.py
uv run pytest -q tests/unit/test_forward_drawdown_evidence.py tests/unit/test_forward_evidence_maturity.py
```

The tests construct synthetic curves for every evidence state. They also mutate the configuration
fingerprint, continuity verdict, broker verdict, chain signature, disclosed head payload, and
crypto-attribution completeness. Drawdown-specific mutations alter the simulation design, selected
study cell, quantile ordering and declared live configuration. Every mutation must fail closed. The
test for statistical establishment uses a sufficiently long synthetic series; it does not weaken
the 756-return gate to make a short fixture pass.

## 9. Limits

This standard governs the language used for one continuous paper-trading specification. It does
not turn paper execution into funded performance, prove that fills scale to institutional capital,
eliminate non-stationarity, or guarantee that a statistically established historical ratio will
persist. PSR uses observed skewness and kurtosis but cannot summarize every form of path dependence
or regime change. The broker reconciliation is self-published and broker-derived, not a third-party
attestation.

The standard also does not substitute for trial deflation in research. A selected backtest must
still carry the full search context through Deflated Sharpe Ratio and the union trial ledger. The
forward paper specification is evaluated as a predeclared continuous record; it is not permission
to select the best live variant after observing several.

## Claim boundary

This is a methodology and disclosure standard authored by Arhan Canli. It defines when ALPHAC may
describe a paper-trading Sharpe target as observed or statistically established. It makes no claim
that the current record has established the target, no claim of real-money performance, and no
guarantee of future returns or maximum loss.

## References

- Bailey, David H., and Marcos López de Prado. “The Sharpe Ratio Efficient Frontier.” *Journal of
  Risk* 15, no. 2 (2012).
- Bailey, David H., and Marcos López de Prado. “The Deflated Sharpe Ratio: Correcting for Selection
  Bias, Backtest Overfitting, and Non-Normality.” *Journal of Portfolio Management* 40, no. 5
  (2014): 94–107. <https://doi.org/10.3905/jpm.2014.40.5.094>
- Sharpe, William F. “Mutual Fund Performance.” *Journal of Business* 39, no. 1 (1966): 119–138.
  <https://doi.org/10.1086/294846>


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/futures-execution-foundation
------------------------------------------------------------------------------

# Dated-futures execution foundation

**Capability status:** domain primitives only  
**Research effect:** zero market data opened, zero returns evaluated, zero hypotheses spent  
**Claim boundary:** architecture evidence, not sleeve-admission or performance evidence

AlphaForge can now represent a dated futures contract as a first-class `FUTURE` instrument and
make deterministic lifecycle decisions without using information unavailable at the decision
time. The current AlphaTrend implementation remains a managed-futures **ETF proxy**. Nothing in
this foundation relabels its evidence as direct futures evidence.

## Implemented contract

Each dated contract carries its canonical instrument identity, root, contract month, listing time,
metadata availability time, first-notice time, last-trade time, multiplier and tick size. Contract
metadata or liquidity stamped after a decision raises `LookaheadError`.

The roll policy is locked in exchange sessions rather than guessed calendar days:

1. Compute the first-notice exit session and last-trade exit session from the supplied session
   index.
2. Use the earlier deadline.
3. At or after that deadline, roll only to the immediate next listed expiry when its metadata is
   known and it remains safely before its own deadline.
4. If that immediate successor is missing or unsafe, flatten. Never skip the lineage gap by
   jumping farther down the curve.
5. Before the mandatory deadline, a liquidity-led roll requires the next contract to exceed the
   locked volume ratio for every required confirmation observation. Missing data means hold.

The execution guard separately identifies locked limit-up, locked limit-down and generic missing
liquidity from a point-in-time effective price band. Daily variation margin is an explicit signed
cashflow: `contracts × multiplier × (current settlement − prior settlement)`.

## Fail-closed integration boundary

The shared instrument taxonomy accepts dated futures, but the generic calendar and transaction
cost paths reject them. There is deliberately no fallback to NYSE sessions, 24/7 crypto time, or
Binance spot commissions. Product-specific sources must land before an end-to-end futures run can
be valid.

Still required:

- exchange/product calendars and settlement schedules;
- dated-contract settlements, executable quotes, volume and open interest with PIT lineage;
- exchange, clearing, initial-margin and maintenance-margin schedules;
- continuous-series construction with explicit roll-return attribution;
- backtest ledger and broker integration;
- historical limit-event and exchange-outage replay.

The machine-readable capability contract, source hashes, invariants and missing components are at
[`/glassbox/futures_execution_contract.json`](/glassbox/futures_execution_contract.json).


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/identity-redesign-notes
------------------------------------------------------------------------------

# Identity redesign notes: three families that mis-specified their population

**Short title:** Identity redesign: three mis-specified families

**Status: DRAFT. Nothing here is registered.** No hypothesis identity, no threshold, no universe is
fixed by this document. Registering any of it spends a trial from a budget that belongs to the
owner. What follows is the analysis that must come *before* a pre-registration, written down so
that the pre-registration, when it happens, is written against evidence rather than against memory.

*Drafted 2026-08-22. 0 trials: everything measured here is filing metadata and document language on
frozen artifacts, and no return data was opened.*

---

## Why these three, and what they have in common

Three families sat one gate short of clearing feasibility. The natural reading of "one gate away"
is that the parser needs work. It was checked, and for all three the reading was wrong:

| family | gate | measured | what a perfect detector reaches |
|---|---|---|---|
| `spin_off_dislocation` | pro-rata distribution language ≥ 0.30 | 0.1633 | **0.1122** |
| `customer_supplier_propagation` | named-customer rate ≥ 0.50 | 0.3533 | **0.3714** |
| `merger_arbitrage` | prior Item 1.01 8-K ≥ 0.80 | 0.6702 | not a detector problem at all |

Two ask for language the filings do not contain at the assumed rate. The third applies one
threshold across two populations with different filing obligations. None is closed by extraction
work, and the temptation in all three cases is identical and must be named: widen the pattern, or
lower the threshold, until the number clears. That is tuning a measurement to agree with a target,
and it is the one move that would destroy the only thing this programme has.

**The common error is sharper than "the threshold was too high", and it is the same error three
times.** Each protocol specified a *language* test where the identity needed a *structural* fact —
a form type, a timestamp, or a counterparty named on a contract. Narrative prose is the least
reliable carrier of any of those. An issuer writes the narrative; the structure is imposed on them.

Each note below therefore names the document that carries the evidence **before** it says anything
about a threshold, and none of them proposes a threshold at all. That ordering is the point.

---

## Note 1 — `spin_off_dislocation`

### What failed

The protocol looked for pro-rata distribution language in the **initial Form 10**. Across 98 frozen,
hash-verified filings, only 11 contain a pro-rata token in any written form (11.2%) and only 5 have
one near a distribution reference (5.1%), against a gate of 30%. The single false negative reviewed
by eye was a preemptive-rights boilerplate use — a correct negative for the intended meaning, not a
miss.

The shipped detector *overstated* the rate it published: its second alternative matched
`distribut…` followed by `holders of` with no pro-rata text required, so a field named
`pro_rata_distribution_language` fired on six documents that never say pro rata. The gate fails
either way and it fails harder than the record showed.

### Why the document cannot carry it

An initial Form 10 is a **registration statement**. It registers a class of securities and describes
the business being separated. The distribution mechanics — ratio, record date, when-issued
trading — are not settled when it is filed, which is why the information statement attached to an
initial Form 10 routinely carries `[•]` where the ratio will go. The protocol asked a document to
state a fact that did not exist on the day it was written.

### The document that does carry it

**The form type itself.** A Form 10-12B is filed to register a class of securities being
distributed to shareholders. The *act of filing one* declares the event; no sentence inside it has
to. That is metadata in the EDGAR master index, needs no parsing, and cannot be written around.

Measured against the sixty-four quarterly master indexes this repo already holds:

```
2010  19 initial / 64 amendments      2018  25 / 53
2011  27 / 67                          2019  36 / 42
2012  22 / 66                          2020  16 / 19
2013  31 / 70                          2021  20 / 33
2014  38 / 150                         2022  20 / 45
2015  45 / 138                         2023  19 / 46
2016  33 / 151                         2024  17 / 33
2017  10 / 38                          2025   8 / 26
```

**386 initial Form 10-12B filings over 2010–2025, a mean of 24.1 a year.** The universe the original
protocol was trying to rediscover by reading prose was declared by the form type all along.

Two structural facts follow, and one of them is unwelcome:

- The **announcement timestamp** is the EDGAR acceptance time of the first 10-12B for that
  registrant. Metadata, no look-ahead, no parsing.
- **386 events over sixteen years is thin.** Whatever a redesigned identity claims will be bounded
  by that count, and the bound belongs in the pre-registration rather than in a footnote after a
  disappointing result.

### The route that was checked and does not work

The obvious alternative was to take the event universe from the corporate-action feed this repo
already holds. It was checked rather than assumed: sampling 600 instruments, the lake carries
exactly two action types, `dividend` and `split`. **There is no spin-off or distribution action
type in it.** The structured route is the filing index, not the corporate-action record.

### What a corrected identity would look like

An event study keyed on the *filing* rather than on the *language*: universe = registrants with an
initial Form 10-12B in the index; announcement = that filing's acceptance timestamp; the parent's
completion 8-K or the price record supplies the distribution date if the identity needs it.

The whole extraction step leaves the critical path. The redesign's first question is therefore not
"can we parse it?" but "**is 24 events a year enough to say anything?**" — and that question must be
answered, in the pre-registration, before the identity is registered.

---

## Note 2 — `customer_supplier_propagation`

### What failed

The gate asked that at least 50% of documents disclosing a customer concentration **name** the
customer. Measured across 300 documents: 35.3% published, and 37.1% among the 280 that genuinely
carry concentration language. A perfect detector reaches 37.1% against a gate of 50%.

A hypothesis was refuted on the way and is recorded because it was wrong: reading five window
excerpts by eye suggested the denominator was padded with documents disclosing no concentration at
all. Measured across all 300, 93.3% do carry real concentration language. Correcting the denominator
moved the rate about two points against a fifteen-point shortfall. Five excerpts were an
unrepresentative sample.

### Why the document cannot carry it

The disclosure obligation is to report the **concentration**, not the counterparty. An issuer must
tell you that one customer is a material share of revenue; nothing requires them to tell you
which one, and most do not. The gate asked the narrative for something the rule that produces the narrative never
required.

### The document that does carry it

**The contract, not the discussion of it.** A supply or distribution agreement names its
counterparty on its face and is filed as a material-contract exhibit. Two structural surfaces
follow, both metadata rather than prose:

- **Exhibit descriptions in the filing index.** A material contract is listed with a description
  that ordinarily names the parties. This is a short, formulaic field, not narrative.
- **Item 1.01 8-Ks** on entry into a material definitive agreement, which are dated and carry the
  agreement as an exhibit.

The relationship also appears from the other side: a large customer's own filings and its exhibit
list name suppliers more often than a supplier's narrative names customers, because the contract is
filed by whichever party has the disclosure obligation.

### What is NOT known, and must be measured before anything is registered

**The naming rate in exhibit descriptions has not been measured.** It could be higher than 37.1%
or lower. Nothing in this note licenses an assumption about it, and a redesign that carried over
the 50% threshold on the hope that a different surface clears it would repeat the original error
with a new document.

The first step of a redesign is therefore a **document-schema audit of exhibit descriptions** —
the same shape of measurement that produced the 37.1% figure — reporting what fraction of
concentration-disclosing issuers file a contract whose description names the counterparty. Only
after that number exists can a threshold be set, and it must be set *before* the identity is
registered rather than chosen to accommodate the result.

### What a corrected identity would look like

Keyed on the pair `(issuer, named counterparty)` extracted from **contract metadata**, with the
narrative concentration disclosure used only for the materiality test it is actually required to
make. The narrative says *how much*; the contract says *who*. The original protocol asked one
document to do both.

---

## Note 3 — `merger_arbitrage`

### What failed

Nothing, in the extraction sense. The gate required a prior Item 1.01 8-K on at least 80% of deal
anchors and measured 67.0%. Split by form type:

| form | anchors | prior Item 1.01 8-K rate | clears 0.80 |
|---|---|---|---|
| `SC 14D9` | 442 | **0.8665** | yes |
| `DEFM14A` | 1523 | **0.6133** | no |

A tender offer's SC 14D9 follows a contemporaneous merger agreement, so the prior 8-K is nearly
always there. A definitive merger proxy can be filed long after the agreement, by issuers who
announced it another way. **The blended figure describes neither population.**

`SC TO-T` appears in the filing counts and not in the anchor timeline. That is correct and was
checked rather than assumed: it is the bidder's filing, not the target's.

### ⚠️ What this is not

**It is not permission to narrow the universe to tender offers.** Restricting to the population
that was observed to pass is selection, and the 0.8665 is now in-sample for that decision and
cannot serve as its evidence. A tender-offer-scoped identity is a legitimate redesign and it needs
its own pre-registration, with threshold and universe fixed before anything is measured again — on
a sample disjoint from the one that produced 0.8665, or the same number will be doing double duty
as both the reason for the choice and the proof that it was right.

### The specification error underneath

The gate tested for the **presence of a particular document**. What the identity needs is a
**clean announcement timestamp**. Those are not the same requirement, and several documents supply
the second: the Item 1.01 8-K, the preliminary proxy, the merger agreement exhibit, the tender
offer filings. Requiring one specific form is a specification error dressed as a data-quality gate —
it fails on deals that are perfectly well documented in a different order.

### What a corrected identity would look like

Two changes, and the second matters more than the first.

1. **Announcement timestamp from a declared set of forms**, taken as the earliest EDGAR acceptance
   among them, rather than from one mandatory form. The set is fixed in the pre-registration; the
   rule is metadata-only and has no look-ahead.
2. **Deal structure declared as a stratum up front, and reported separately.** We now know the
   populations have different filing obligations. Any redesign that blends them again is
   reintroducing the defect on purpose, and any redesign that silently keeps only the convenient
   stratum is doing something worse. Both strata get published, whatever they say.

### Prospective v2 status

That corrected structure is now specified in
`docs/design/FEASIBILITY_MERGER_ANNOUNCEMENT_IDENTITY_V2.md`. It preserves the failed aggregate
result as exploration, freezes both filing strata, and reserves 2006–2015 as a disjoint
confirmation period with 200 anchors per stratum. Its structural audit opens no confirmation
documents, labels, prices, or returns. It is a technical draft awaiting Arhan's review, not an
approved preregistration or a sleeve.

---

## What the three notes share, restated because it is the transferable part

Every one of these protocols asked prose to certify a fact that a structure already carried:

- a **form type** declares a spin-off; a sentence inside the filing need not.
- a **contract** names a counterparty; the narrative that discusses it is not required to.
- an **acceptance timestamp** dates an announcement; no single form is required to exist.

The general rule this earns, and it is worth more than any of the three families: **when a gate
measures a rate of language, check first whether the fact is available as structure.** Language
rates are properties of what issuers chose to write. Structure is a property of what they were
required to file, and it does not move when a drafting convention changes.

None of that is evidence that any of these three families has an edge. It is only evidence about
where their evidence would live, which is the question that has to be settled before the expensive
one is asked.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/inflation-breakeven-relative-value-feasibility
------------------------------------------------------------------------------

# Inflation breakeven relative value — no-return source-feasibility audit

**Short title:** Inflation breakeven relative value: feasibility  
**Author:** Arhan Canli  
**Audited:** 2026-08-22  
**Stage:** forensic source audit after atlas enumeration; not a return preregistration.

## Scope and trial accounting

- Family account: `inflation_breakeven_relative_value`.
- Atlas cells: 2Y/5Y and 5Y/10Y, each at 21d, 63d, and 126d.
- This audit opens no security prices, market returns, portfolio returns, forward labels, signs,
  Sharpe ratios, drawdowns, correlations, or capacity estimates.
- Return hypotheses spent: **zero**. The six atlas cells remain untested.
- Existing source counts were already visible when this audit was written. Its thresholds are
  institutional data requirements, not a claim of preregistered statistical cutoffs.

## Evidence inspected

1. `T5YIE.parquet` and `T10YIE.parquet` from the local macro lake: observation date, value, and
   locally assigned publication date only.
2. `PCPI_first_release.parquet`: vintage CPI values and the flag distinguishing genuine first
   releases from the initial inherited history.
3. The macro-lake metadata and arrival log, to distinguish a current snapshot from preserved
   historical vintages.
4. The repository's data files for any security-level TIPS/nominal-bond history, inflation-swap
   history, cashflows, index ratios, quotes, or total returns.

## Required gates before a return preregistration

All must pass:

1. The chosen signal maturities have at least the contract's three years of aligned observations,
   unique dates, no internal nulls, and conservative availability timestamps.
2. Every maturity named by the chosen universe exists. A 2Y/5Y identity cannot borrow the 10Y
   series and retain its name.
3. Historical values are bound to genuine as-of vintages or an authoritative no-revision
   contract. A current full-history file plus synthetic `observation + 1 business day` timestamps
   does not prove what the historical file contained on that date.
4. Vintage CPI coverage is sufficient and its conservative publication rule is locked.
5. The implementation has security-level cashflows/index ratios and executable price or quote
   history for matched nominal/TIPS baskets, or licensed inflation-swap history. Constant-maturity
   estimates are signal inputs, not executable returns.
6. Bid/ask, financing, duration, carry, seasonality, index lag, deflation-floor treatment, and
   stressed capacity can be modelled from preserved inputs.

## Result

The 5Y and 10Y files are aligned, long, unique, and internally complete. Vintage CPI is also held.
That establishes signal-source depth only.

The 2Y leg is absent. The daily breakeven files are one current historical snapshot, not a
historical-vintage archive. No security-level matched nominal/TIPS prices, cashflows, index ratios,
quotes, total returns, inflation-swap history, or execution-calibration record is present.

**Decision: `DATA_GATED`.** The prior atlas reachability label “obtainable from data already held”
was too broad and is superseded by this audit. No return trial is authorized. A future owner
decision may acquire a lawful point-in-time fixed-income dataset; an ETF proxy would be a newly
named identity and cannot silently rescue this one.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-alphamax-betaneutral
------------------------------------------------------------------------------

# Beta-Neutral Momentum Construction (campaign): a killed candidate

**Short title:** Beta-Neutral Momentum Construction: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `alphamax_betaneutral`

The premise was that a dollar-neutral momentum book carries hidden NEGATIVE market beta, so a junk rally hurts both legs at once. Measuring the premise first killed it. On the research panel (2005-2026) the book's mean rolling 63-day beta is -0.014 — essentially zero. On the LIVE book it is +0.319, and the LONG leg is the high-beta side (leg beta 1.932 long vs 1.238 short) — the opposite of the premise. The treatment is then regime-dependent with opposite signs: research net Sharpe 0.160 to 0.361 (bootstrap P(dSharpe<=0)=0.0225), LIVE 0.921 to 0.570 (P=0.938). It also barely touches the episode it was designed for — 0.2 points of a 9.5-point loss on research, 0.7 of 10.5 live — and it buys beta-neutrality by selling dollar-neutrality: net exposure runs to +/-34% of gross, which breaks the market-neutral mandate. Not adopted. 0 trial slots burned. Reproduce: scripts/probe_alphamax_betaneutral.py.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.5700 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-alphamax-short-margin-floor
------------------------------------------------------------------------------

# AlphaMax Short-Leg Margin Floor (disclosure, not a strategy): a killed candidate

**Short title:** AlphaMax Short-Leg Margin Floor: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `alphamax_short_margin_floor`

A disclosure against our own published number rather than a tested idea. The equity sleeve's backtest has never modelled the broker's $5.00-per-share short maintenance requirement, which is charged per share regardless of account size — so shorting an $8 stock ties up roughly 62% of its market value in margin at ANY capital level. Applying an honest $17 short-leg price floor costs -0.112 net Sharpe (2015-2026, point-in-time prices from our own lake, so no snapshot bias). Part of the published edge lives in cheap shorts that are permanently margin-inefficient. We are publishing the haircut rather than the flattering number. Separately: a borrow-availability filter appeared to cost a further -0.225, but that estimate is CONFOUNDED — it applies a current broker snapshot to eleven years of history, which silently excludes every delisted name, and delisted names are exactly where short alpha concentrates. Measuring it honestly needs point-in-time borrow data we do not have, so we report it as UNKNOWN rather than publish a number we cannot defend. The current live short book is 92 of 94 names borrowable.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.1120 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-alphamax-shorttail
------------------------------------------------------------------------------

# Short-Leg Tail Controls (campaign): a killed candidate

**Short title:** Short-Leg Tail Controls (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `alphamax_shorttail`

Nine construction-side short-leg controls (per-name stop-outs at 30/50/100%, gross caps at 1.25x/1.5x/2.0x, short-leg vol targeting, with and without dollar-neutral restore). Killed by attribution rather than by Sharpe. In the July 2026 episode the baseline lost 4.98%, of which the LONG leg contributed 3.61 and the SHORT leg 1.34 — the short leg is 27% of the damage. The squeeze narrative is real (ALIT +88% split-adjusted, RPD +61%) but it is the minority of the loss; the larger driver was the momentum long complex selling off. A control that drove short-leg P&L to exactly zero still could not have fixed the episode. The actual controls recovered 0.02 to 0.77 points of the 4.98 (two of the nine made it worse) with within-episode drawdown unchanged: 5.49% baseline vs 5.33% to 5.57% across the nine. Four controls cleared the pre-registered gate on full-sample numbers and all four fail the beta filter — the best (short-leg vol target, net Sharpe 0.121 vs the baseline's -0.102 on the 2005-2026 panel) buys its gain with market beta, not alpha: beta t=16.4, alpha t=-0.14. Nothing adopted. 0 trial slots burned. Reproduce: scripts/probe_alphamax_shorttail.py.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.1210 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-alphamax-volscale
------------------------------------------------------------------------------

# Vol-Scaled / Crash-Protected Momentum overlay (campaign): a killed candidate

**Short title:** Vol-Scaled: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `alphamax_volscale`

Barroso-Santa-Clara constant-vol and Daniel-Moskowitz variance/dynamic scaling applied to the live AlphaMax sleeve. On the canonical window it HURTS (net Sharpe 0.87 vs the sleeve's own 0.91, maxDD worse by 1.3-3.1pts); incremental alpha over the book-level vol target the engine already runs is statistically zero in all 5 configs (t -1.64 to +0.81, overlay-scale correlation 0.54-0.66 to the engine's own rule). The insurance is already owned; buying it twice costs money. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.8700 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-alphamax-weightgrid
------------------------------------------------------------------------------

# Weighting x Breadth Construction Grid (campaign): a killed candidate

**Short title:** Weighting x Breadth Construction Grid: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `alphamax_weightgrid`

Four weightings (inverse-vol, equal, signal-proportional, vol-capped) crossed with four breadths (K=30/50/100/200), 2005-2026, live cell inverse-vol K=100. Net Sharpes span -0.293 to +0.066 against the live cell's -0.062 on the same harness (this is the deep-history panel, where the deployed 2023+ sleeve's 0.91 does not apply). Four of the 15 challenger cells individually cleared the 90% paired bootstrap — but the bootstrap's own dSharpe intervals imply those cells are 0.97 to 1.00 correlated with the live cell, so four passes is about the chance expectation for a family of near-copies, not evidence. The family-wise White Reality Check over the whole grid returns p=0.315: the best cell (signal-proportional K=50, dSharpe +0.128) is indistinguishable from luck. That family-wise gate was pre-registered precisely so the best cell could not be harvested. Zero cells adoptable; keep inverse-vol K=100. 0 trial slots burned. Reproduce: scripts/probe_alphamax_weighting.py.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.0660 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-cef-discount
------------------------------------------------------------------------------

# Closed-End-Fund Deep-Discount + Activist Catalyst (probe): a killed candidate

**Short title:** Closed-End-Fund Deep-Discount + Activist Catalyst: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `cef_discount`

The five-decade anomaly is REAL in free data and we could see it: entry-cohort funds genuinely narrow their discount versus the universe (+1.17pts at 4w t=5.4, +1.26 at 13w t=7.2, +1.39 at 26w). It still fails on economics — the convergence is too slow for its toll. Hedged net Sharpe -0.088 (-0.82 price-only) against a 0.5 gate: ~12.8%/wk turnover at 41bp one-way (6bp + half the 0.7% median CEF spread) hands back the ~1.3pt/quarter the discount closes. Two further honest notes: today's entry watchlist is EMPTY (0 of 328 funds qualify — the 2024-26 activist wave already closed sector discounts to multi-year tights), and the discount screen and the activist catalyst are nearly disjoint books (4.9% overlap), so the documented live-capital story is the CATALYST trade, not the one we screened. A pre-registered, hash-locked FORWARD experiment is now accruing point-in-time data toward a single-look evaluation in 2027. Reproduce: scripts/probe_cef_discount.py.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.0880 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-commodity-inventory-seasonal
------------------------------------------------------------------------------

# EIA Petroleum Inventory Scarcity: a killed candidate

**Short title:** EIA Petroleum Inventory Scarcity: killed

**Verdict:** KILLED  **Stage:** research gauntlet  
**Identity:** `commodity_inventory_seasonal`

One pre-registered configuration on 782 accepted official EIA WPSR first-release Table 4 vintages, 2016-2026 OOS: commercial crude excluding SPR mapped to USO and total gasoline mapped to UGA, five-year same-week seasonal expectation, trailing 52-release surprise scale, next-session-open entry, DBC beta hedge and explicit one-way costs. One of 783 discovered releases was quarantined for a published arithmetic contradiction. The sleeve was exceptionally orthogonal (average correlation +0.0012, maximum pair +0.0323) and controlled DBC beta (-0.014), but there was no return edge: net Sharpe -0.589, Newey-West t -1.84, DSR 7.37e-11, max drawdown -41.1%, and Sharpe at 2x costs -0.998. USO and UGA standalone Sharpes were both negative. The fixed 10% book check improved by 0.013 over its 728-session common window, but failed after mean-centering and failed 1 of 4 leave-one-year-out checks. UGA constrained fifth-percentile proxy capacity to about $14.9k at 1% ADV. The sign is not inverted and no threshold is retuned. Full curve, scores, weights, input lineage and result are preserved in artifacts/probe/eia_petroleum_inventory/. KILLED.

## Why it was worth testing

This ran the full pre-registered research gauntlet: a locked configuration, point-in-time data, costs charged, and pass/fail criteria fixed in writing before the result existed. Nothing about the specification was changed after the number arrived. That discipline is what makes the null trustworthy, and it is also what makes it final -- there is no version of this candidate that was 'nearly' admitted.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.5890 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-cot-positioning
------------------------------------------------------------------------------

# COT Positioning Overlay (campaign): a killed candidate

**Short title:** COT Positioning Overlay (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `cot_positioning`

Indistinguishable from zero (t~0.42 over 25 years); dies at 2x cost; the entire 'edge' is two equity-index legs. Genuine decorrelation, no edge to attach it to. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.0830 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-crypto-dated-basis
------------------------------------------------------------------------------

# Crypto Dated-Futures Basis (campaign): a killed candidate

**Short title:** Crypto Dated-Futures Basis (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `crypto_dated_basis`

Screened at an apparent 1.47 but refuted 3x and reproduced from scratch: the 8.2%/yr 'carry' is a roll-accounting fiction — the kept days (+0.55) and the dropped roll days (-0.55) cancel; honest all-days P&L telescopes to ~0%/yr, skew -6.84. A construction-fitting artifact (the 'edge' is earned by deleting the days it loses money). KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | not separately measured |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-crypto-lowvol-720
------------------------------------------------------------------------------

# Crypto Low-Volatility: a killed candidate

**Short title:** Crypto Low-Volatility: killed

**Verdict:** KILLED  
**Test window:** 2023-01-01 to 2026-06-01  
**Identity:** `crypto_lowvol_720`

The STRONGEST in-sample signal the 200+-factor campaign found anywhere (Rank-IC t = 6.66). Full purged walk-forward: net Sharpe 0.69 — respectable. But the Deflated Sharpe Ratio is 0.04: after honestly penalising for every config we tried, it is indistinguishable from luck. A high raw Sharpe is NOT enough. This is the clearest proof of why we deflate — the prettiest backtest of the campaign, KILLED on deflation.

## Why it was worth testing

The equity low-risk effect does not automatically transfer to crypto: the leverage constraint that is usually invoked to explain it barely binds in a market where retail can access high leverage directly. Testing it here was a test of the EXPLANATION, not only of the pattern, which is why a null is informative rather than merely disappointing.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | 0.6946 |
| Annualized return | 8.46% |
| Total return | 31.97% |
| Annualized volatility | 13.00% |
| Maximum drawdown | -20.12% |
| Annualized turnover | 20.10 |
| Trading days | 1248 |
| Final equity (USD) | 131,968.39 |
| Fees paid (USD) | 4,217.77 |
| Funding, net (USD) | -11,303.74 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-crypto-short-tsmom
------------------------------------------------------------------------------

# Crypto Short-Horizon Trend (campaign): a killed candidate

**Short title:** Crypto Short-Horizon Trend (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `crypto_short_tsmom`

The strong 0.60 screen lives entirely in the untradeable 2016-18 illiquid era; modern crypto is flat-to-dead with a catastrophic -4.88 skew (crash-day reversals). KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.3000 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-crypto-vrp
------------------------------------------------------------------------------

# Crypto Variance-Risk-Premium (campaign): a killed candidate

**Short title:** Crypto Variance-Risk-Premium (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `crypto_vrp`

Pitched at 2.15 Sharpe — the headline was a 252-vs-365 vol-annualization error inventing a phantom 15-vol-point premium. Honest measurement: net Sharpe -0.07, skew -2.19, fails all four stress-tests, shares carry's crash dependence. A seductive false positive, KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.0700 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-deephist-quality-top800
------------------------------------------------------------------------------

# Deep-History Quality (Top 800): a killed candidate

**Short title:** Deep-History Quality (Top 800): killed

**Verdict:** KILLED  
**Test window:** 2005-06-16 to 2026-06-22  
**Identity:** `deephist_quality_top800`

Quality premium does not survive net of cost on the 21-year survivorship-free universe. Net Sharpe far below the 0.30 minimum gate. KILLED, never re-tuned.

## Why it was worth testing

Quality investing is the claim that profitable, stable, low-accrual businesses earn more than their risk explains. It is among the best-documented anomalies in the literature and among the most heavily traded, which is exactly why it deserved a test on a survivorship-free universe with costs charged rather than assumed away. A premium that survives in a paper and dies in a fill is not a premium.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.5926 |
| Annualized return | -5.74% |
| Total return | -71.16% |
| Annualized volatility | 12.89% |
| Maximum drawdown | -72.12% |
| Annualized turnover | 3.18 |
| Trading days | 5286 |
| Final equity (USD) | 28,842.90 |
| Fees paid (USD) | 321.25 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-econtrend
------------------------------------------------------------------------------

# Economic-Trend Sleeve, macro-fundamental trend (campaign): a killed candidate

**Short title:** Economic-Trend Sleeve: killed

**Verdict:** KILLED  **Stage:** deployed gauntlet  
**Identity:** `econtrend`

Trend on first-release macro vintages (payrolls, CPI, IP, credit spreads, yields, dollar) driving the 17-ETF basket by a pre-committed economic sign matrix. It has a REAL crisis-alpha personality — +60.7% through the 2008 GFC (SPY -46%), +17.5% in the 2022 bear (SPY -18%), essentially uncorrelated with the live AlphaTrend book (+0.009) and mildly SPY-negative (-0.20). But it fails the adopt bar 2 of 3: net Sharpe 0.211 (bar 0.40), DSR 0.00 at N=103, and it gets caught in fast gap-down crashes (COVID -25.9%, breaching the -22.5% floor). Genuine decorrelation, not enough edge. A hostile 3-auditor leakage panel cleared the vintage plumbing before the one-shot ran. KILLED at the gauntlet. Also tested as a combined-book DIVERSIFIER (not just standalone), since near-zero correlation can lift a book even below the solo bar: it fails there too. At equal total vol its naive Sharpe ticks up ~0.02-0.04 but within noise, it DEEPENS the GFC and 2022 drawdowns, and decisively — strip its DSR-0.00 mean and the optimal weight goes to exactly 0.00 (the whole 'benefit' was return-stacking a mean statistically indistinguishable from zero, not real diversification). Not added, in any construction. Reproduce: scripts/probe_econtrend_book.py.

## Why it was worth testing

This one reached deployment before it was killed, which makes it the most expensive kind of kill and the most important to publish in full. A candidate that passed on the evidence available at the time and failed on better evidence later is not a process failure to be hidden; refusing to withdraw it would be.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.2110 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-eq-52whigh
------------------------------------------------------------------------------

# 52-Week-High Momentum (campaign): a killed candidate

**Short title:** 52-Week-High Momentum (campaign): killed

**Verdict:** KILLED  **Stage:** deployed gauntlet  
**Identity:** `eq_52whigh`

The one AlphaMax construction variant whose cheap screen cleared the bar (t 2.01 vs plain momentum's 1.73), so we honored the pre-registration and ran the FULL deployed-path walk-forward. It KILLED: net Sharpe -0.289 (WORSE than plain 12-1's own -0.049 on the same harness), DSR 0.00, and OOS correlation +0.42 to plain momentum — neither better nor genuinely different. The frozen 12-1 build stays. KILLED at the gauntlet.

## Why it was worth testing

This one reached deployment before it was killed, which makes it the most expensive kind of kill and the most important to publish in full. A candidate that passed on the evidence available at the time and failed on better evidence later is not a process failure to be hidden; refusing to withdraw it would be.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.2890 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-eq-mom-margin
------------------------------------------------------------------------------

# Equity Momentum (with Margin Costs): a killed candidate

**Short title:** Equity Momentum (with Margin Costs): killed

**Verdict:** KILLED  
**Test window:** 2023-07-06 to 2026-06-01  
**Identity:** `eq_mom_margin`

Margin financing costs erode the momentum edge below the frozen k30_dn_63 baseline. Variant killed per pre-registration; the clean h=63 sleeve is the deployed one.

## Why it was worth testing

This tested one specific construction choice inside the momentum family. Construction variants are the cheapest possible trials and therefore the most dangerous: they are easy to generate in bulk, they are highly correlated with each other and with the sleeve already deployed, and every one of them raises the deflation hurdle for the whole book. The prior was that it would fail, and it was pre-registered anyway so the failure would be recorded rather than quietly abandoned.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.5920 |
| Annualized return | -4.46% |
| Total return | -12.42% |
| Annualized volatility | 10.33% |
| Maximum drawdown | -15.07% |
| Annualized turnover | 7.60 |
| Trading days | 729 |
| Final equity (USD) | 87,575.57 |
| Fees paid (USD) | 144.29 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-eq-net-issuance
------------------------------------------------------------------------------

# Corporate Equity Supply (Net Issuance): a killed candidate

**Short title:** Corporate Equity Supply (Net Issuance): killed

**Verdict:** KILLED  **Stage:** deployed gauntlet  
**Identity:** `eq_net_issuance`

The broad corporate-equity-supply identity was run through the deployed-path walk-forward on a point-in-time Sharadar research lake: long firms shrinking split-adjusted basic shares and short firms expanding them, rebalanced every 63 sessions. The latest sealed sweep was decisively negative: net Sharpe -0.311, DSR 0.000102 after six trials, and max drawdown -37.1%. A separate source-correct full-window rerun scored +0.148 with -17.5% max drawdown, still below the 0.40 gate; the sign and magnitude instability across data paths is itself a failure, not a result to select around. Three distinct historical configurations remain charged to the same corporate-equity-supply family. A proposed completed-flow measurement may continue data-feasibility work only as a same-family refinement and cannot count as independent sleeve breadth. No sign flip, window selection, or trial reset is authorized. Evidence: artifacts/sweep/gauntlet_eq_net_issuance/walkforward.json, artifacts/analysis/null_fundamentals_rerun/result.json, and artifacts/feasibility/repurchase_issuance_flow/identity_overlap_audit.json. KILLED.

## Why it was worth testing

This one reached deployment before it was killed, which makes it the most expensive kind of kill and the most important to publish in full. A candidate that passed on the evidence available at the time and failed on better evidence later is not a process failure to be hidden; refusing to withdraw it would be.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.3110 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-eq-quality-gp
------------------------------------------------------------------------------

# Equity Quality (Gross Profitability): a killed candidate

**Short title:** Equity Quality (Gross Profitability): killed

**Verdict:** KILLED  
**Test window:** 2022-07-05 to 2026-06-01  
**Identity:** `eq_quality_gp`

Quality via GP/A + ROE fails on the narrow top-200 / 5-year slice. Net Sharpe below the 0.30 gate; needs the wide Sharadar fundamentals universe (20yr / 3000 names). KILLED.

## Why it was worth testing

Quality investing is the claim that profitable, stable, low-accrual businesses earn more than their risk explains. It is among the best-documented anomalies in the literature and among the most heavily traded, which is exactly why it deserved a test on a survivorship-free universe with costs charged rather than assumed away. A premium that survives in a paper and dies in a fill is not a premium.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.8214 |
| Annualized return | -3.21% |
| Total return | -11.97% |
| Annualized volatility | 5.59% |
| Maximum drawdown | -14.05% |
| Annualized turnover | 3.77 |
| Trading days | 981 |
| Final equity (USD) | 88,030.04 |
| Fees paid (USD) | 98.32 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-eq-value-btp
------------------------------------------------------------------------------

# Equity Value (Book-to-Price): a killed candidate

**Short title:** Equity Value (Book-to-Price): killed

**Verdict:** KILLED  
**Test window:** 2022-07-05 to 2026-06-01  
**Identity:** `eq_value_btp`

Value premium inverted across the 2022-2026 window. Net Sharpe below the 0.30 gate; the narrow top-200 universe is too small for the small/mid-cap value signal. KILLED.

## Why it was worth testing

Value is the oldest documented cross-sectional effect in equities and the one most likely to be already in the price. The question was never whether cheap stocks have outperformed at some point in history; it is whether a mechanical, point-in-time implementation still clears its own trading costs on a universe that includes the companies that went to zero.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.3219 |
| Annualized return | -1.60% |
| Total return | -6.11% |
| Annualized volatility | 6.61% |
| Maximum drawdown | -12.23% |
| Annualized turnover | 3.48 |
| Trading days | 981 |
| Final equity (USD) | 93,892.50 |
| Fees paid (USD) | 89.46 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-equity-pead
------------------------------------------------------------------------------

# Post-Earnings-Announcement Drift (campaign): a killed candidate

**Short title:** Post-Earnings-Announcement Drift: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `equity_pead`

Clean null on a tradable top-1000 universe: the drift is the WRONG sign net of cost; the published PEAD edge lives only in untradeable micro-caps. Corr 0.47 to momentum. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.6500 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-equity-short-interest-dtc
------------------------------------------------------------------------------

# Short Interest / Days-to-Cover Deciles (probe): a killed candidate

**Short title:** Short Interest / Days-to-Cover Deciles: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `equity_short_interest_dtc`

The first genuinely NEW INPUT in months rather than another transformation of price and volume: bi-monthly FINRA short interest for the whole US tape, 2017-12-29..2026-07-15 (3,804,024 rows, 23,314 tickers), unlocked by the Polygon Starter upgrade and ingested in full. ONE pre-registered config, no sweep: long the bottom days-to-cover decile, short the top, dollar-neutral, PIT top-2000 by ADV, price >= $5, positions formed on settlement + 10 BUSINESS DAYS (FINRA disseminates ~8; the extra margin makes lookahead un-arguable) and held to the next availability date. *** CORRECTION 2026-08-05 — THE FIRST PUBLISHED NUMBERS FOR THIS ENTRY WERE WRONG. *** The probe computed returns as log(close).diff() on data/lake, which stores RAW AS-TRADED closes: not split- or dividend-adjusted. Every forward split therefore booked a catastrophic fake loss — AAPL 2020-08-31 as -135%, NVDA 2024-06-10 as -229%, TSLA 2022-08-25 as -110%. The bias was DIRECTIONAL, not noise: splits happen in high-priced mega-caps, mega-caps have enormous ADV, and days_to_cover = SI/ADV is therefore tiny for them, so every fake collapse sorted into the LONG (bottom-DTC) leg. The production feature engine refuses raw prices outright; this standalone probe bypassed that guard. Fixed in scripts/lib/px_adjust.py, which adjusts the RETURN series only and deliberately leaves price floors and ADV ranks on raw as-traded values (back-adjusting levels would introduce a look-ahead the raw panel does not have). Both affected probes were repaired in the same pass. WHAT CHANGED: gross Sharpe before any cost was published as -0.220 (full) and +0.002 (easy-to-borrow); corrected it is -0.062 (NW t -0.19) and +0.204 (NW t +0.66). The published claim that there was 'no edge for frictions to eat' was therefore FALSE — there is a small gross edge, it is simply not statistically established and it is entirely consumed by costs. The KILL STANDS but on different reasoning. Corrected net of 6bp one-way at 20x annual turnover, on the easy-to-borrow universe that is actually shortable: -0.026 / -0.228 / -0.792 at 50 / 300 / 1000 bp per year of borrow. The top days-to-cover decile IS the hard-to-borrow bucket, so the 50bp row describes a trade nobody can put on; at a realistic 300bp it is -0.228. Against the pre-registered rule it fails gate (b) Newey-West t >= 2 and gate (d) survives 300bp on easy-to-borrow, and passes (a) and (c). Correlation to the live book is -0.017, so the diversification arithmetic was favourable and it still did not matter — the same lesson as mechflow_tom: a near-zero bar lowers what a candidate must BEAT, never what it must PROVE. The sign is NOT flipped and re-tested, and the gates were NOT relaxed to admit it once the corrected numbers looked better; that is precisely the search a pre-registration exists to forbid. KILLED. Reproduce: scripts/ingest_short_interest.py then scripts/probe_short_interest.py.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.2040 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-equity-vrp
------------------------------------------------------------------------------

# Equity-Index VRP / short-vol (campaign): a killed candidate

**Short title:** Equity-Index VRP / short-vol (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `equity_vrp`

The premium is REAL (VIX minus realized = +4 vol pts, t=57) but UNHARVESTABLE: negative in every crisis, skew -1.8 to -2.2, corr +0.45 to +0.66 to SPY — short-vol is leveraged long-beta in disguise, not an orthogonal sleeve. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.4200 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-funding-termstructure
------------------------------------------------------------------------------

# Funding Term-Structure / Slope (campaign): a killed candidate

**Short title:** Funding Term-Structure / Slope (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `funding_termstructure`

The decorrelated residual is noise (worked pre-2023, inverted after: +1.11 then -1.43); the only version that makes money is leaked carry-LEVEL — a duplication of what we own. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.1590 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-futcarry-xs
------------------------------------------------------------------------------

# Commodity / Cross-Asset Futures Carry (probe): a killed candidate

**Short title:** Commodity / Cross-Asset Futures Carry: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `futcarry_xs`

Cross-sectional carry on 38 real futures (long backwardation / short contango, front-vs-next slope), 2010-2016 — the only window the term-structure marks support. GROSS Sharpe is already -0.17, so there is no edge for costs to erode; net -0.24, DSR 0.00, all six construction variants negative. The feed itself dies mid-2016 (one root keeps a next-contract mark), so it could not run live even if it worked. KILLED twice over.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.2400 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-fx-carry-ratediff
------------------------------------------------------------------------------

# FX Carry (rate differential): a killed candidate

**Short title:** FX Carry (rate differential): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `fx_carry_ratediff`

Long high-rate / short low-rate currencies. Net Sharpe 0.18 but skew -2.74: the carry premium does not pay for its crash risk (carry 'picks up pennies in front of a steamroller'). Below the screen bar on both Sharpe and skew. KILLED at screen.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.1800 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-fx-carry-trend-overlay
------------------------------------------------------------------------------

# FX Carry + Trend Overlay (the real construction): a killed candidate

**Short title:** FX Carry + Trend Overlay: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `fx_carry_trend_overlay`

The professional FX book: trend hedges carry's crashes. It screened at 0.32 — but the robustness stress-test killed it. The Sharpe SPIKED only at the exact threshold we picked by hand (a knob artifact, ~0.15 on either side); it died at realistic cost (25x turnover, 0.05 at 5bp); ALL the performance came from one post-2021 regime; and dropping JPY collapsed it to -0.07 — the entire 'edge' was the single short-JPY trade. Not a diversified premium. KILLED on robustness, before we built a thing.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.3200 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-fx-trend-cs
------------------------------------------------------------------------------

# FX Trend (cross-sectional 12-1): a killed candidate

**Short title:** FX Trend (cross-sectional 12-1): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `fx_trend_cs`

Cross-sectional currency trend, net of cost, 2016-2026. Flat (net Sharpe -0.035) — a weak-trend decade for FX. Below the 0.30 screen bar. KILLED at screen.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.0350 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-insider-purchase-clusters
------------------------------------------------------------------------------

# Clustered Insider Open-Market Purchases: a killed candidate

**Short title:** Clustered Insider Open-Market Purchases: killed

**Verdict:** KILLED  **Stage:** research gauntlet  
**Identity:** `insider_purchase_clusters`

One pre-registered configuration on official SEC Form 4 purchases, 2016-2026: at least two officers/directors and $100k purchased inside 30 calendar days, filing date plus two sessions, next-open entry, full 63-session hold, trailing-ADV eligibility, SPY beta hedge and explicit one-way costs. The current replay scheduled 3,541 non-overlapping events and was genuinely orthogonal (average correlation -0.066, maximum pair +0.057), controlled beta (+0.046), and cleared the $5M capacity gate ($5.31M fifth-percentile AUM at 1% ADV). But there was no return edge: net Sharpe -0.232, Newey-West t -0.75, DSR 1.83e-07, max drawdown -24.8%, and Sharpe at 2x costs -0.285. A fixed 10% sleeve changed combined-book Sharpe by -0.093 and failed 4 of 4 leave-one-year-out checks. A pre-publication audit corrected weighted log-return aggregation to the canonical simple-return contract; preliminary Sharpe was -0.993 and the corrected verdict remained KILL. The immutable first corrected measurement has 2,669 observations and population-std Sharpe -0.243; the current lake adds 5 sessions, so it is explicitly an OOS extension, not an exact reproduction, and the identity packet remains incomplete. The sign is not inverted and no threshold is retuned. Full curve, event ledger, weights, input lineage and result are preserved in artifacts/probe/insider_purchase_clusters/. KILLED.

## Why it was worth testing

This ran the full pre-registered research gauntlet: a locked configuration, point-in-time data, costs charged, and pass/fail criteria fixed in writing before the result existed. Nothing about the specification was changed after the number arrived. That discipline is what makes the null trustworthy, and it is also what makes it final -- there is no version of this candidate that was 'nearly' admitted.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.2320 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-intraday-mom
------------------------------------------------------------------------------

# Intraday Flow-Momentum, first-30m predicts last-30m (probe): a killed candidate

**Short title:** Intraday Flow-Momentum: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `intraday_mom`

The twice-JFE-documented effect (Gao-Han-Li-Zhou) is fully DECAYED post-publication on SPY/QQQ/IWM: dead-zero in 2023-2026, and significantly INVERTED in 2020-2022 (a textbook publish-then-arbitrage overshoot). The only statistically-alive cell (TLT overnight, t=2.9) makes +1.2 bps/day gross against a >=2bp round-trip — a mirage economically. KILLED at screen.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | not separately measured |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-letf-eod-flow
------------------------------------------------------------------------------

# Leveraged-ETF End-of-Day Forced-Rebalance Flow (probe): a killed candidate

**Short title:** Leveraged-ETF End-of-Day Forced-Rebalance Flow: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `letf_eod_flow`

Leveraged ETFs MUST trade into the close (~$277B QQQ-family rebalance multiplier, ~$4B/day estimated flow) — a real, large, mechanical flow. But it is NOT tradeable on 2021-2026 data: no continuation into the close (+0.58 bps per 1-sigma flow, t=0.93), no overnight reversal, and all six strategy cells lose net of costs (best cell Sharpe -1.41). The ~0.6bp effect is ~6x below the 12bp round-trip cost floor — no cost assumption rescues it. The pre-2019 literature edge appears arbitraged away at the granularity free data sees. KILLED at screen.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -1.4100 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-mechflow-tom
------------------------------------------------------------------------------

# Turn-of-Month / Rebalancing Flow (probe): a killed candidate

**Short title:** Turn-of-Month / Rebalancing Flow (probe): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `mechflow_tom`

The calendar flow is real — SPY earns 5.65bp/day in the last-1-plus-first-3 window vs 3.96bp outside, and the footprint replicates on QQQ — but monetized standalone it sits in cash 76% of days: net Sharpe 0.27, below buy-and-hold SPY (0.58) and the screen bar, DSR 0.035 across 43 configs. The 60/40 month-end rebalance-fade variant decayed negative after 2018. A real effect that is an execution tilt, not a sleeve. KILLED as standalone. RE-EXAMINED 2026-08-03 because that first reason was BAD ARITHMETIC: a candidate need not beat the book to improve it, only clear own_SR > rho x S_b. Re-tested as a diversifier on ONE pre-registered config (no sweep, so no search penalty). The reframe was right about correlation — rho to the live book is +0.010, dropping the bar to +0.006 — and it still fails: own Sharpe -0.56 over the book's own window, and over 25 years / 6,309 sessions the full-history Sharpe of +0.278 carries a Newey-West t of only +1.42, with no decade reaching t=2 (best +1.32). A near-zero bar lowers what you must BEAT, never what you must PROVE. Adding it hurt the book at every weight (-0.03 to -0.15), and 87-96% of that harm came from the mean, not from variance. KILLED on the correct bar — this one is final.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.2700 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-mf-realfutures-breadth
------------------------------------------------------------------------------

# Real-Futures Breadth for the Trend Sleeve (probe): a killed candidate

**Short title:** Real-Futures Breadth for the Trend Sleeve: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `mf_realfutures_breadth`

We had been treating 'buy real futures data for genuine breadth' as the roadmap for the trend sleeve, on the theory that Sharpe scales with the square root of effective breadth and 17 ETFs cannot supply it. Half of that is right: measured effective breadth is 9.1 for 38 real futures versus 5.3 for the live 17-ETF basket (and only 3.5 for a 33-ETF expansion we already killed — more names, LESS breadth, which is why it failed). The other half is wrong. On an identical construction, identical costs and the identical 2010-2026 common window, the 38-market futures book returns net Sharpe -0.148 against the ETF sleeve's +0.498, independently reproducing an earlier -0.24 result we had discounted as a possible one-off. It is not a data fault: across all 38 back-adjusted series there is exactly one single-day move above 25%. Breadth MULTIPLIES the average per-market edge; where that edge is absent, more breadth buys more of nothing and 7.3x turnover instead of 4.3x. The capital-gated futures path is therefore NOT validated and we have stopped citing it. Reproduce: the probe is in the session record; data is data/lake_fut_real (38 markets).

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.1480 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-mf-realfutures-fasttrend
------------------------------------------------------------------------------

# Managed-Futures fast-trend / real-futures breadth (campaign): a killed candidate

**Short title:** Managed-Futures fast-trend: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `mf_realfutures_fasttrend`

Splits into robust-but-not-new (the slow book IS our existing AlphaTrend) and new-but-dead (the fast-trend leg is net-negative at every verifiable cost). Not a new sleeve. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.2000 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-multivenue-funding
------------------------------------------------------------------------------

# Crypto Multi-Venue Funding Aggregation (probe): a killed candidate

**Short title:** Crypto Multi-Venue Funding Aggregation: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `multivenue_funding`

Would aggregating funding across exchanges beat our Binance-only carry signal? No — null by its own pre-registered rule (promote required +0.10 Sharpe at 90% bootstrap confidence). The reason is structural: Binance and Bybit annualized funding are 0.94 correlated across 12,425 instrument-weeks, so there is almost no independent information to aggregate. The adjacent 'harvest on the best-paying venue' idea dies on arithmetic too — a median cross-venue gap of ~2.4%/yr against a four-legged ~30bp round trip implies a 22-day breakeven hold, marginal before you even price second-tier venue custody risk. The live sleeve stays Binance-only on its blessed config. Byproduct kept: a multi-exchange funding lake (Bybit deep history via mirror; OKX public history is depth-capped at ~90 days, a data finding worth recording). Reproduce: scripts/probe_multivenue_funding.py.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | not separately measured |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-onchain-carry-filter
------------------------------------------------------------------------------

# On-Chain Carry-Quality Filter (campaign): a killed candidate

**Short title:** On-Chain Carry-Quality Filter (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `onchain_carry_filter`

Placebo-indistinguishable: a random risk-off coin-flip of equal intensity matches it, and it does NOT repair carry's 2022 tail (skew got worse). No paid-data upgrade justified. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.0800 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-pm-odds-signal
------------------------------------------------------------------------------

# Prediction-Market Odds as Macro Signal (probe): a killed candidate

**Short title:** Prediction-Market Odds as Macro Signal: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `pm_odds_signal`

Do Polymarket-implied probabilities lead tradable markets? No — they lag them. The forward lead is null across 5 macro markets x 5 ETFs; the reverse is strong: bonds reprice a Fed move first and the odds catch up the NEXT day (corr +0.40 to TLT). Only ~2 years of usable history, all one easing cycle. The free odds are a slower, noisier copy of prices we already see. KILLED at feasibility.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | not separately measured |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-prereg-bab
------------------------------------------------------------------------------

# Pre-Registered Betting-Against-Beta: a killed candidate

**Short title:** Pre-Registered Betting-Against-Beta: killed

**Verdict:** KILLED  
**Test window:** 2005-01-04 to 2026-06-01  
**Identity:** `prereg_bab`

Pre-registered BAB on 21 years. Net Sharpe ~ -0.07, failed the DSR >= 0.95 gate. Low-risk anomaly does not survive net of cost here. KILLED.

## Why it was worth testing

The low-volatility effect is the observation that low-beta stocks have historically delivered better risk-adjusted returns than their beta predicts, usually explained by leverage constraints among institutional investors. It is a crowded trade and a structurally levered one, which makes the cost and financing assumptions load-bearing rather than incidental.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.0679 |
| Annualized return | -0.88% |
| Total return | -17.22% |
| Annualized volatility | 10.68% |
| Maximum drawdown | -34.15% |
| Annualized turnover | 2.86 |
| Trading days | 5385 |
| Final equity (USD) | 82,780.29 |
| Fees paid (USD) | 379.72 |
| Funding, net (USD) | 63.63 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-prereg-momentum
------------------------------------------------------------------------------

# Pre-Registered Momentum (deep history): a killed candidate

**Short title:** Pre-Registered Momentum (deep history): killed

**Verdict:** KILLED  
**Test window:** 2005-01-04 to 2026-06-01  
**Identity:** `prereg_momentum`

Pre-registered momentum on 21 years of deep history. Net Sharpe ~ -0.05, failed the DSR >= 0.95 gate. The deployed momentum sleeve is the frozen 2023+ k30_dn_63 instead.

## Why it was worth testing

Cross-sectional momentum is the anomaly this book already trades, so a second momentum construction had to clear a harder bar than a novel idea: it must add something the existing sleeve does not already capture. A variant that merely re-expresses the same signal buys correlation, not breadth.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.0493 |
| Annualized return | -0.76% |
| Total return | -15.07% |
| Annualized volatility | 10.66% |
| Maximum drawdown | -34.98% |
| Annualized turnover | 3.26 |
| Trading days | 5385 |
| Final equity (USD) | 84,925.53 |
| Fees paid (USD) | 525.00 |
| Funding, net (USD) | -2,943.06 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-prereg-quality
------------------------------------------------------------------------------

# Pre-Registered Quality (GP/A + ROE): a killed candidate

**Short title:** Pre-Registered Quality (GP/A + ROE): killed

**Verdict:** KILLED  
**Test window:** 2005-01-04 to 2026-06-01  
**Identity:** `prereg_quality`

Pre-registered quality on 21 years. Net Sharpe -0.83, the worst sleeve. KILLED; the wide-universe quality thesis fails to replicate on the available data.

## Why it was worth testing

Quality investing is the claim that profitable, stable, low-accrual businesses earn more than their risk explains. It is among the best-documented anomalies in the literature and among the most heavily traded, which is exactly why it deserved a test on a survivorship-free universe with costs charged rather than assumed away. A premium that survives in a paper and dies in a fill is not a premium.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.8316 |
| Annualized return | -4.27% |
| Total return | -60.75% |
| Annualized volatility | 7.29% |
| Maximum drawdown | -64.06% |
| Annualized turnover | 2.63 |
| Trading days | 5385 |
| Final equity (USD) | 39,248.43 |
| Fees paid (USD) | 321.76 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-prereg-value
------------------------------------------------------------------------------

# Pre-Registered Value (composite): a killed candidate

**Short title:** Pre-Registered Value (composite): killed

**Verdict:** KILLED  
**Test window:** 2005-01-04 to 2026-06-01  
**Identity:** `prereg_value`

Pre-registered composite value on 21 years. Net Sharpe -0.60, failed every gate. Confirms the value thesis does not replicate without small/mid-cap breadth. KILLED.

## Why it was worth testing

Value is the oldest documented cross-sectional effect in equities and the one most likely to be already in the price. The question was never whether cheap stocks have outperformed at some point in history; it is whether a mechanical, point-in-time implementation still clears its own trading costs on a universe that includes the companies that went to zero.

## The result

| Measure | Value |
|---|---|
| Net Sharpe | -0.5994 |
| Annualized return | -4.05% |
| Total return | -58.75% |
| Annualized volatility | 9.23% |
| Maximum drawdown | -64.27% |
| Annualized turnover | 2.87 |
| Trading days | 5385 |
| Final equity (USD) | 41,251.08 |
| Fees paid (USD) | 292.36 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-rates-curve-carry
------------------------------------------------------------------------------

# Rates-Curve Carry (campaign): a killed candidate

**Short title:** Rates-Curve Carry (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `rates_curve_carry`

Robustly NEGATIVE, not fragile-positive: the signal points the wrong way — steepest curves preceded the worst duration drawdowns (2022). Real decorrelation, negative edge. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.3300 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-residual-momentum
------------------------------------------------------------------------------

# Residual (beta-neutral) Momentum (campaign): a killed candidate

**Short title:** Residual (beta-neutral) Momentum: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `residual_momentum`

Corr 0.87 to raw 12-1 momentum on the broad survivorship-free universe — it is the SAME bet as AlphaMax, net-negative. The claimed 'separation' is false here. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.0980 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-tail-overlay
------------------------------------------------------------------------------

# Long-Vol Tail Overlay (campaign): a killed candidate

**Short title:** Long-Vol Tail Overlay (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `tail_overlay`

An honest positive-skew (+2.06) anti-equity hedge — but its ONLY thesis, improving the combined book, fails at every hedge weight. AlphaTrend already provides crisis convexity WITH a positive standalone Sharpe. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.5600 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-xasset-carry
------------------------------------------------------------------------------

# Cross-Asset Carry (campaign): a killed candidate

**Short title:** Cross-Asset Carry (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `xasset_carry`

5 constructions. The COMBINED cross-asset book is net-NEGATIVE (3 of 4 legs lose); the one positive leg (oil backwardation, +0.37) is a single-instrument bet that leave-one-out zeroes; rates-carry fails the Covid crisis gate. Real futures data cannot flip it. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | 0.3700 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-xasset-value
------------------------------------------------------------------------------

# Cross-Asset Value (campaign): a killed candidate

**Short title:** Cross-Asset Value (campaign): killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `xasset_value`

6 constructions, ALL net-negative. The decisive tell: flipping the value sign is positive in every asset class — the only premium present is anti-value = momentum/trend, which we already own. Cross-asset value on liquid proxies is just short-momentum, and it loses. KILLED.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.2400 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/kill-xs-seasonality
------------------------------------------------------------------------------

# Cross-Sectional Same-Calendar-Month Seasonality (probe): a killed candidate

**Short title:** Cross-Sectional Same-Calendar-Month Seasonality: killed

**Verdict:** KILLED  **Stage:** screen prototype  
**Identity:** `xs_seasonality`

The one equity-side signal genuinely DECORRELATED from our momentum sleeve — and that is exactly why it is worth publishing. Same-calendar-month ranking across a 33-ETF macro basket, 10y trailing PIT history, monthly, net of 6bp + borrow: net Sharpe -0.334, and NEGATIVE GROSS too (-0.176), so there is no edge for costs to erode. Correlation to plain 12-1 momentum is just +0.07 (it passes the costume test that killed residual momentum and 52-week-high) — but a 12-1 control on the SAME universe prints +0.175, so the harness can find a real signal; this one simply is not there. Decorrelation without edge is worthless. Screen gate failed, no walk-forward trial spent. Reproduce: scripts/probe_seasonality.py.

## Why it was worth testing

This died at the screen stage, before a full walk-forward was ever run. Screening exists so that ideas which cannot clear a coarse, cost-aware bar do not consume the far more expensive machinery behind it. A screen kill is a cheap kill, and it is published for the same reason as an expensive one: the trial was still spent, and it still raises the evidence bar for everything already in the book.

## The result

| Measure | Value |
|---|---|
| Screen net Sharpe | -0.3340 |

## What this does and does not say

It says this configuration, on this data, net of the costs we charge, did not clear the bar it pre-registered. It does not say the underlying economic effect does not exist, that no implementation of it works, or that someone with different data or different execution would reach the same conclusion. A null is evidence about a test, not a proof about a market.

It also does not say the trial was free. Every hypothesis tested raises the deflated-Sharpe hurdle for every sleeve already in the book, including the ones that survived. That is why the kill count is published beside the survivor count rather than behind it.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/legacy-dsr-restatement
------------------------------------------------------------------------------

# Legacy DSR restatement

This is a correction ledger, not a performance upgrade. Original artifacts remain intact.

Current selection context: **N=228**, identity-aligned **V[SR]=0.0008957471**.

- Restated: 33 variants across 5 families.
- Retired for missing return series: 7 families.
- Current DSR ≥ 0.95: 0 variants.

## Recomputed variants

| Family | Variant | Historical DSR | Current DSR | Status |
|---|---|---:|---:|---|
| alphamax_betaneutral | `LIVE-REPLICA k30_dn_63/BASE` | 0.183185 | 0.162490 | FAIL |
| alphamax_betaneutral | `LIVE-REPLICA k30_dn_63/BASE_asis` | 0.134993 | 0.118102 | FAIL |
| alphamax_betaneutral | `LIVE-REPLICA k30_dn_63/CTRL_NETLONG` | 0.069001 | 0.058845 | FAIL |
| alphamax_betaneutral | `LIVE-REPLICA k30_dn_63/V1_betaneutral` | 0.078945 | 0.067668 | FAIL |
| alphamax_betaneutral | `LIVE-REPLICA k30_dn_63/V2_betahedged` | 0.107465 | 0.093211 | FAIL |
| alphamax_betaneutral | `LIVE-REPLICA k30_dn_63/V2m_hedge_21d` | 0.110626 | 0.096055 | FAIL |
| alphamax_betaneutral | `RESEARCH top-2000 K=100/BASE` | 0.000000 | 0.000000 | FAIL |
| alphamax_betaneutral | `RESEARCH top-2000 K=100/BASE_asis` | 0.000000 | 0.000000 | FAIL |
| alphamax_betaneutral | `RESEARCH top-2000 K=100/CTRL_NETLONG` | 0.000000 | 0.000000 | FAIL |
| alphamax_betaneutral | `RESEARCH top-2000 K=100/V1_betaneutral` | 0.000003 | 0.000001 | FAIL |
| alphamax_betaneutral | `RESEARCH top-2000 K=100/V2_betahedged` | 0.000000 | 0.000000 | FAIL |
| alphamax_betaneutral | `RESEARCH top-2000 K=100/V2m_hedge_21d` | 0.000000 | 0.000000 | FAIL |
| alphamax_construction | `A1` | 0.150387 | 0.136112 | FAIL |
| alphamax_construction | `A2` | 0.209723 | 0.191973 | FAIL |
| alphamax_construction | `G1` | 0.294726 | 0.275058 | FAIL |
| alphamax_construction | `I1` | 0.529216 | 0.504142 | FAIL |
| alphamax_construction | `I2` | 0.141761 | 0.128013 | FAIL |
| alphamax_construction | `I3` | 0.024886 | 0.021383 | FAIL |
| alphamax_construction | `I4` | 0.156486 | 0.141846 | FAIL |
| alphamax_construction | `R0` | 0.150387 | 0.136112 | FAIL |
| alphamax_constructions | `gauntlet_eq_52whigh_252` | 0.000020 | 0.000000 | FAIL |
| alphamax_shorttail | `baseline` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `cap_1.25x` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `cap_1.5x` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `cap_2.0x` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `daily_reset` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `stop_100` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `stop_30` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `stop_50` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `stop_50_dn` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `svol` | 0.000000 | 0.000000 | FAIL |
| alphamax_shorttail | `svol_dn` | 0.000000 | 0.000000 | FAIL |
| econtrend | `locked_primary_oos` | 0.000000 | 0.000000 | FAIL |

## Retired historical DSR claims

- **exp2_crypto_vrp** — The persisted artifact contains summary statistics but no variant-level return series. DSR depends on observations, skew and kurtosis; it cannot be honestly reconstructed from annualized Sharpe.
- **alphamax_hyst_live** — The persisted artifact contains summary statistics but no variant-level return series. DSR depends on observations, skew and kurtosis; it cannot be honestly reconstructed from annualized Sharpe.
- **alphamax_turnover** — The persisted artifact contains summary statistics but no variant-level return series. DSR depends on observations, skew and kurtosis; it cannot be honestly reconstructed from annualized Sharpe.
- **alphamax_volscale** — The persisted artifact contains summary statistics but no variant-level return series. DSR depends on observations, skew and kurtosis; it cannot be honestly reconstructed from annualized Sharpe.
- **alphamax_weighting** — The persisted artifact contains summary statistics but no variant-level return series. DSR depends on observations, skew and kurtosis; it cannot be honestly reconstructed from annualized Sharpe.
- **alphatrend_arp** — The persisted artifact contains summary statistics but no variant-level return series. DSR depends on observations, skew and kurtosis; it cannot be honestly reconstructed from annualized Sharpe.
- **alphatrend_breadth** — The persisted artifact contains summary statistics but no variant-level return series. DSR depends on observations, skew and kurtosis; it cannot be honestly reconstructed from annualized Sharpe.

## Executable-code status

All 12 historical probe paths now use identity-aligned union accounting or fail closed at preflight. There are 0 executable raw-row DSR paths. Separately, 7 summary-only artifact families remain retired and cannot be treated as approved evidence.

Resolved paths:

- `scripts/exp2_crypto_vrp.py`
- `scripts/probe_alphamax_betaneutral.py`
- `scripts/probe_alphamax_construction.py`
- `scripts/probe_alphamax_constructions.py`
- `scripts/probe_alphamax_hyst_live.py`
- `scripts/probe_alphamax_shorttail.py`
- `scripts/probe_alphamax_turnover.py`
- `scripts/probe_alphamax_volscale.py`
- `scripts/probe_alphamax_weighting.py`
- `scripts/probe_alphatrend_arp.py`
- `scripts/probe_alphatrend_breadth.py`
- `scripts/probe_econtrend.py`

## Interpretation boundary

This restates DSR only. It does not upgrade data quality, validation grade, sleeve admissibility or investment performance, and it does not alter original artifacts.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/literature-bond-etf-nav-dislocation
------------------------------------------------------------------------------

# Bond-ETF NAV dislocation — literature and mechanism review

**Reviewed:** 2026-08-16. **Stage:** source review only. No market observations, returns, signs,
thresholds, horizons, or portfolio statistics were inspected.

## Mechanism under review

Corporate-bond ETFs can trade away from their reported net asset value because ETF shares trade
continuously while many underlying bonds trade infrequently and are valued using evaluated marks.
The creation/redemption mechanism is also not a frictionless full-holdings arbitrage: bond ETF
baskets can be fractional, change through time, and differ systematically between creations and
redemptions. Liquidity and dealer balance-sheet constraints can therefore permit persistent
price/NAV gaps.

That observation does not establish a secondary-market alpha. A discount may mean the ETF is
discovering the value of stale underlying marks rather than that the ETF is mispriced. Authorized
participants have creation/redemption access and basket information that an ordinary brokerage
account does not. ALPHAC must not label a long/short ETF trade as AP arbitrage or assume convergence
to an accounting NAV is executable.

## Adversarial evidence

- Federal Reserve research finds ETF arbitrage efficacy depends on liquidity, with stronger and
  more persistent effects for less-liquid bond ETFs.
- BIS work documents fractional and high-turnover bond baskets and links persistent premiums and
  discounts partly to slow NAV adjustment to ETF prices.
- The March 2020 episode is not clean proof of ETF underpricing: bond ETF prices could incorporate
  information faster than stale constituent marks.
- Public iNAV/indicative values are not necessarily real-time executable portfolio values and may
  reuse stale evaluated prices.

## Source implications

A credible historical test needs synchronized point-in-time records for ETF NBBO/trades, official
NAV and publication time, holdings and creation/redemption baskets, bond identifiers and corporate
actions, underlying TRACE trades, executable spread/impact estimates, and valuation timestamps.
Daily premium/discount data alone cannot identify which side of the gap contains the information.

FINRA offers transaction-level historical TRACE data with execution time, price, size, and yield,
but historical products require agreements and fees. Rule 6c-11 requires recent daily ETF website
disclosures and a chart for the most recently completed calendar year/current quarters; it does not
create a free permanent ten-year archive.

## Primary sources

- Federal Reserve, *Arbitrage and Liquidity: Evidence from a Panel of Exchange Traded Funds*:
  https://www.federalreserve.gov/econres/feds/arbitrage-and-liquidity-evidence-from-panel-of-exchange-traded-funds.htm
- BIS, *The anatomy of bond ETF arbitrage*:
  https://www.bis.org/publ/qtrpdf/r_qt2103d.htm
- BIS, *ETFs, illiquid assets, and fire sales*:
  https://www.bis.org/publ/work975.htm
- SEC Rule 6c-11 adopting release:
  https://www.sec.gov/files/rules/final/2019/33-10695.pdf
- FINRA TRACE historical-data information:
  https://www.finra.org/industry/trace-historic-academic-data

## Claim boundary

The literature supports a real price-discovery and market-structure question, not a return claim.
No evidence here establishes sign, timing, net profitability, diversification, capacity, or sleeve
admissibility.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/literature-customer-supplier-propagation
------------------------------------------------------------------------------

# Customer–supplier propagation — source and identity review

**Reviewed:** 2026-08-16. **Research stage:** literature and source engineering only. No prices,
returns, signs, thresholds, or portfolio statistics were inspected.

## Economic claim under review

Cohen and Frazzini document delayed incorporation of economically linked firms' news: customer
returns predict subsequent supplier returns when links are defined from suppliers' disclosed major
customers. The investable interpretation is limited attention to indirect cash-flow news, not a
generic momentum strategy. Later evidence is an important adversarial check: shared analyst
coverage can subsume several momentum-spillover effects, so a future implementation must
neutralize direct stock/industry momentum and test whether the relationship survives in a modern,
strictly out-of-sample period.

The candidate here is therefore not “buy suppliers of stocks that went up.” A relationship may
exist only after a supplier filing publicly identifies a material customer. Any future signal must
be tied to a later, timestamped customer event and must be evaluated after neutralizing supplier
momentum, customer momentum, industry momentum, size, beta, and shared-news exposure.

## Disclosure reality

US segment-reporting rules require disclosure when revenue from one customer reaches 10% of total
revenue, including the amount and relevant segment. They do not create a dependable requirement
to publish the customer's legal identity. Filers commonly use labels such as “Customer A,” “one
customer,” or a customer category. Consequently, the existence of a concentration disclosure is
not proof that an executable customer–supplier graph can be reconstructed from public filings.

SEC submissions and filing archives provide immutable accession identity and acceptance timing.
SEC XBRL APIs expose filed financial-statement facts in real time, but issuer-specific extensions
and dimensions do not guarantee a stable, historical customer identifier. Current SEC ticker/name
maps are not a point-in-time alias history and cannot safely resolve old customer names by
themselves.

## Falsification priorities

1. Measure the prevalence of concentration language in the already hash-addressed 10-K corpus.
2. On a deterministic, year-balanced sample, measure whether the disclosure names a customer
   rather than using an anonymous label.
3. Separate textual name extraction from historical issuer resolution; neither implies the other.
4. Fail closed if unresolved aliases, private customers, governments, subsidiaries, or current-map
   survivorship prevent a point-in-time public-company edge.
5. If source feasibility eventually passes, register this as one economic family and count every
   customer-event/sign/horizon variant in the same family-wise trial account.

## Primary sources

- Lauren Cohen and Andrea Frazzini, *Economic Links and Predictable Returns* (original paper):
  https://users.nber.org/~confer/2006/bfs06/frazzini.pdf
- Usman Ali and David Hirshleifer, *Shared Analyst Coverage: Unifying Momentum Spillover Effects*
  (adversarial evidence): https://www.nber.org/papers/w25201
- SEC EDGAR APIs and bulk-data documentation:
  https://www.sec.gov/search-filings/edgar-application-programming-interfaces
- FASB Statement No. 14, major-customer disclosure rule (historical source for the 10% rule):
  https://storage.fasb.org/fas14.pdf

## Claim boundary

This review establishes an economically motivated candidate and a serious source-risk hypothesis.
It makes no claim that the effect persists, that public filings provide a sufficient graph, or that
the candidate has positive net returns, diversification value, capacity, or admission eligibility.


------------------------------------------------------------------------------
SOURCE: https://canlicapital.com/research/literature-electricity-load-weather
------------------------------------------------------------------------------

# Electricity load/weather dislocation: literature and implementation boundary

**Short title

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.