Episode 8: c36 And c4, Promising Is Not Deployable

Daniel Ratke
Research & Engineering

Term map
Backtesting vocabulary for this article
Treat signal timestamp, point-in-time universe, quote-aware fill, reject reason, replay artifact, walk-forward test, and cache key as first-class terms. They separate reproducible research from a backtest that only preserves the final performance table.
Follow the linked definitions for Point-in-time contracts, Quote-aware fills, Reject reasons, Replay artifact, Cache key, Signal timestamp, Look-ahead leakage, Walk-forward test, Slippage model, Same-bar fill, Promotion gate, and Options data API.
Read this article with Options Backtesting API, Backtesting Framework, Backtesting Data Quality Checklist, Backtesting Execution Realism, Quote-Aware Options Backtests, and Backtest to Paper Trading Parity Checklist.
Scope
This episode focuses on the two most interesting near-misses in the repo:
c36VWAP mean reversionc4dispersion-relative breakout
The main evidence lives in RUNS.md, decision_gate.json, launch_contract.json, and launch_contract.json.
Result Snapshot
c36
c36_vwap_mr_option_native_quality_v1:+16004PnL,15trades, DSR0.6400- failed only
trades_per_week_ok - final label on April 8:
open_paper_only
c4
- repaired stock stage restored realistic behavior after a false collapse
- best repaired rows reached
79and85trades in later follow-ups - final label on April 18:
park_c4
These are not dead branches in the same way as Episode 7. They are stronger than that. But they still did not earn admission.
Strategy Context
c36 is an option-native descendant of the c18 VWAP mean-reversion family. The underlying logic is a short-horizon intraday mean-reversion trade defined by VWAP residual z-scores, bounded VWAP slope, explicit sigma constraints, and short holding periods. The quality version requires relative volume, raises the z-score entry threshold, narrows acceptable sigma and slope conditions, and cuts the time-in-trade budget. The opportunity version does the opposite: it lowers the excursion threshold, relaxes some constraints, and allows more trades to form. c36 then monetizes those stock-level setups through quote-aware single-leg option execution in the 0-2 DTE window. So the branch is scientifically clean: same core signal family, same option-expression type, but different tradeoffs between selectivity and sample size.
c4 is a different animal. It is a dispersion-relative breakout family. The stock-level logic requires the primary ticker to break its opening structure while outperforming a beta-adjusted proxy by a minimum relative-strength edge. The guard_v3 version tightens that edge, caps the proxy's own movement more aggressively, adds a beta-shock veto, and forces the trade to prove itself quickly. The later density-repair versions then relax those same constraints incrementally to recover trade count. In the SPY repair path, the repo even introduced an SPY-to-DIA proxy override so that the index sleeve would be benchmarked against a broader market proxy without disturbing the rest of the default proxy map. The option follow-up overlays then tried to express the same stock winner through 2-5 DTE single-leg or vertical-debit structures with strict quote-aware filters.
The c36 Lesson
c36 is a good example of why raw profitability is not enough.
The branch produced a quality variant that made money and looked reasonable on robustness, but it was too sparse. Then it produced an opportunity variant with much better activity but meaningfully worse quality.
Seen mechanistically, this is exactly what one would expect from the parameter changes. Lowering the z-score hurdle and widening the admissible microstructure envelope increases the number of mean-reversion attempts, but it also admits weaker excursions and noisier reversals. The repo did more than observe that density and quality traded off. It engineered that tradeoff explicitly and then measured the degradation.
That is a classic frontier in systematic trading:
- more opportunity
- less edge quality
The repo handled it well by refusing to pretend those are the same outcome. c36 therefore became:
- not dead
- not promoted
- kept as
open_paper_only
That is a rational status.
The c4 Lesson
c4 is more complicated because part of its story is debugging.
On April 17, the repo showed that a prior collapse was not a true strategy failure. It was a launch-path bug:
- the run had used an empty writable DuckDB instead of the intended seeded snapshot
- the corrected rerun restored normal trade counts and strategy shape
That is a valuable result because it prevented the wrong conclusion. But after the bug fix, the branch still failed the promotion gate.
This is what makes c4 such a good public case study. The branch combined three different research realities in one arc: a real implementation bug, a real post-bug improvement in strategy shape, and a real subsequent failure to clear a strict portfolio gate. Those are analytically different events, and the repo treated them as such.
The c4 gate required more than just "interesting":
selection_status=feasible- positive return
trades_per_week >= 1.5orb_overlap_days >= 30c66_overlap_days >= 30offset_ratio_on_orb_down_days >= 0.5- zero extra option attempts
- zero quote rejects
By April 18, the repo's answer was clear enough to say publicly: park_c4.
What Worked
What worked in both branches was discrimination.
The repo did not flatten these cases into a single vague category of "still being evaluated." Instead:
c36became a backup candidate with a known density problemc4improved materially, then still failed a harsh and explicit gate
That gives the public a much more truthful view of progress.
What Did Not Work
The negative result is that neither branch could yet cross the line from credible research to clear promotion.
For c36, the bottleneck is density.
For c4, the bottleneck is admission under a portfolio-aware gate, even after important bug repair.
For c4 in particular, the negative result is instructive because the branch did not fail on one spectacular flaw. It failed by accumulating several smaller deficits: feasibility, overlap, offset behavior on ORB-down days, and option-parity cleanliness. That kind of failure is common in serious portfolio construction. A strategy often dies not because it is obviously bad, but because it is not clearly additive enough.
Those are different kinds of failure. Publishing them together shows an audience that not all near-misses are the same.
Why This Week Matters
This is the episode where the repo proves it can say no to models it likes.
In One Piece terms, these are crew candidates that passed some tests, failed others, and did not get the slot yet.
That is how a portfolio improves. Not by loving every promising profile equally, but by being specific about why each one is not yet ready.
Public Build Takeaway
The right public framing is:
c36has signal but not enough densityc4has improved shape but still does not clear the gate- "promising" and "deployable" are not synonyms
That distinction is one of the most valuable things this repo can teach publicly.
Related workflow
For the Episode 8: c36 And c4, Promising Is Not Deployable workflow, continue through Options Backtesting API, Backtesting Framework, Backtesting Execution Realism, Backtesting Data Quality Checklist, Quote-Aware Options Backtests, and Backtest to Paper Trading Parity Checklist.
How the terminology applies
For Episode 8: c36 And c4, Promising Is Not Deployable, the backtesting workflow should treat Point-in-time contracts, Quote-aware fills, Reject reasons, Replay artifact, Cache key, and Signal timestamp as operational state rather than glossary decoration. That framing keeps the research claim causal: the strategy can only select instruments, prices, and labels that existed at the decision time.
A developer implementing this research idea should persist Look-ahead leakage, Walk-forward test, Slippage model, Same-bar fill, Promotion gate, and Options data API beside the result, instead of leaving those words in a term card. It also turns attractive performance into an auditable record where fills, skips, thresholds, and replay inputs can be challenged independently.
The review artifact for Episode 8: c36 And c4, Promising Is Not Deployable becomes more useful when OPRA-originating data, OCC option symbol, Bid/ask spread, Midpoint, Quote/trade condition, and Quote vs trade semantics appear in the same body of evidence as the selected rows. When a result is promoted, these fields should appear in the run manifest, rather than a prose summary or final equity curve.
In production notes for this backtesting workflow, REST snapshot, WebSocket stream, Entitlement gate, Quote freshness, Timestamp semantics, and Pagination cursor define the checks that decide whether the workflow is reproducible. The result is a backtest that can be rerun, compared across threshold families, and rejected when the evidence is not strong enough.
For Episode 8: c36 And c4, Promising Is Not Deployable, the practical acceptance test is simple: another developer should be able to read the body, identify the exact inputs, reproduce the request sequence, and explain the accepted and rejected rows without relying on the bottom terminology grid. If a phrase appears in the page vocabulary, it should correspond to a stored field, a validation check, a replay step, or an implementation decision in the backtesting workflow.
This is also the reason the article should not measure success only by the final chart, table, or headline metric. The better standard is whether the data path, timing model, entitlement state, and evidence trail survive review. When those pieces are written directly into the body, the terminology becomes part of the workflow readers can implement.
Terminology
Market-data terms used in this article
These terms keep the article connected to the CuteMarkets knowledge base and to the exact API workflow behind the research.
Point-in-time contracts
Contract discovery anchored to the research date so a backtest does not use future listings.
Quote-aware fills
Entry and exit assumptions based on bid/ask quotes, quote age, spread width, and side-specific fill rules.
Reject reasons
Logged explanations for skipped contracts or fills, including stale quote, wide spread, no bid, or missing data.
Replay artifact
The saved request, selection, fill, reject, and metric record that lets another developer audit the backtest.
Cache key
The structured identifier that keeps provider, endpoint, ticker, timestamp, plan, and schema state from being mixed.
Signal timestamp
The exact time a strategy made a decision, used to reconstruct the visible universe and quote window causally.
Look-ahead leakage
A research error where a fill, contract, indicator, or label uses information unavailable at decision time.
Walk-forward test
A validation method that repeatedly trains and evaluates across separated time windows instead of trusting one optimized sample.
Slippage model
A fill-cost assumption based on bid/ask side, midpoint, spread percent, quote age, and liquidity policy.
Same-bar fill
An intraday backtest assumption that can become invalid when signal, entry, stop, and target ordering is ambiguous.
Promotion gate
The written threshold that decides whether a research candidate can move into paper trading or production monitoring.
Options data API
The product surface for chains, contracts, quotes, trades, aggregates, Greeks, IV, open interest, and expirations.
OPRA-originating data
The U.S. listed-options source context behind quotes, trades, exchange participation, and consolidated option-market records.
OCC option symbol
The exact option contract identifier that preserves root, expiration, call or put side, and strike.
Bid/ask spread
The execution interval between bid and ask that determines whether a contract is realistically tradable.
Midpoint
The computed center between bid and ask, useful as a reference price but not proof that an order would fill.
Quote/trade condition
The condition-code, exchange, correction, sequence, and timestamp context that explains how a quote or trade row can be used.
Quote vs trade semantics
The distinction between executable bid/ask markets, printed transactions, and bar-level summaries.
REST snapshot
A reproducible request for current or historical market state, used for initialization, backfills, and audit logs.
WebSocket stream
A persistent live connection that needs subscription topics, reconnect tracking, freshness labels, and REST repair paths.
Entitlement gate
The product, plan, quote, live, delayed, historical, or commercial-use boundary checked before data is shown.
Quote freshness
The age, timestamp, and live or delayed state of a bid/ask record before it is used in a scanner, backtest, or UI.
Timestamp semantics
The exchange, provider, ingestion, session, and application time context attached to a market-data record.
Pagination cursor
The continuation token or next URL that keeps large chains, trades, quotes, and historical windows complete.

Written by
Daniel Ratke
Research & Engineering
Daniel covers the deeper research notes: options backtesting, execution realism, robustness testing, data engineering, and strategy validation.
Product links
Build the workflow with CuteMarkets
This article is part of the broader CuteMarkets product and research stack. Use the landing pages below to move from the blog into the specific API workflow you want to evaluate.
Beginner options path
Send newcomers to the beginner path for calls, puts, chains, Greeks, IV, and risk.
Options Data API
See the main options overview for real-time and historical options data.
Historical Options Data API
Inspect the historical contracts, quotes, trades, and aggregates workflow.
Options Chain API
Go straight to chain snapshots, expirations, and strike discovery.
Pricing
Review plans before you move from free evaluation into production usage.