QuantKernel 6.2 ships with a fifth strategy: Project Convexity. It is not an incremental feature. It represents a fundamentally different class of signal — one built on a data standard and a screening methodology that the overwhelming majority of retail systematic frameworks cannot replicate. This post is a full technical walkthrough of every architectural decision.
I. The Survivorship Problem
The single most common error in systematic fundamental strategy development is invisible to most practitioners: the universe they test on is not the universe that existed when the strategy would have fired.
Most retail quant frameworks — and a surprising number of professional ones — pull their universe from the current S&P 500 or NASDAQ-100 constituent list. The problem is structural: that list already excludes every company that went bankrupt, got delisted, or was acquired over the lookback period. You are, by definition, testing only on the survivors.
Survivorship bias in fundamental backtests is not a minor correction factor. In universe-construction studies, it can inflate apparent returns by 1–3% per year and compress apparent drawdowns by material amounts. Any strategy screened on a survivor-only universe has an unknown and unquantifiable forward bias.
Sharadar's Point-In-Time (PIT) database solves this at the data layer. Every financial data row is tagged with an announcement_date — the exact calendar date on which that data was publicly available. This includes delisted tickers, bankrupt entities, and acquired companies. The universe is constructed at each screening date from every company that existed on that date — not from the list of companies that survived to the present.
// announcement_date gating — the most common look-ahead error
There is a second, subtler form of look-ahead bias that affects even practitioners who know about survivorship bias: using fiscal_period_end instead of announcement_date as the gating timestamp.
A company with a fiscal quarter ending March 31 typically reports earnings between late April and mid-May — a delay of 30 to 90 days. If your pipeline gates on fiscal_period_end, you are implicitly assuming that the revenue and margin data was available to you on March 31 — weeks before the actual 10-Q filing. This is the single most common error in systematic fundamental strategies, and it produces results that look excellent in backtest and degrade in live trading for reasons that are genuinely difficult to diagnose post-hoc.
The PITFilterPipeline gates all fundamental data exclusively on announcement_date. No row of financial data is visible to the pipeline until its announcement_date has passed the current screening date. This is non-negotiable.
II. Three-Gate PITFilterPipeline
The pipeline runs three sequential gates. A candidate must pass all three to become a signal. There is no scoring or ranking within the pipeline — it is binary at each gate.
// Gate 1 — Fundamental Acceleration
The first gate does not screen for revenue growth. It screens for the second derivative of revenue growth — acceleration. This distinction is load-bearing.
A company compounding YoY revenue growth at 40% for three consecutive years is well-known. That rate is already priced into the multiple. The opportunity is in the company that grew at 15%, then 22%, then 31% — where the growth curve is visibly bending upward. The market hasn't fully repriced the acceleration yet. That is the signal.
Formally: we compute the YoY revenue growth rate for each of the last three reported quarters (all gated on announcement_date). We require the 2nd difference — g[t] - 2*g[t-1] + g[t-2] — to be positive. Flat or decelerating growth, even at high absolute rates, fails Gate 1.
Gate 1 also requires operating-margin inflection: the operating margin must be expanding quarter-over-quarter on an LTM basis. This is the leverage point — where revenue growth converts to profit growth non-linearly. A company with accelerating revenue but contracting margins is still in investment mode; the economics haven't yet proven themselves.
// Gate 2 — Technical Validation
The second gate ensures we are not buying fundamental strength into technical weakness. Three sub-conditions must all pass.
- RS percentile top 10%. Relative Strength is computed daily across the full survivorship-free universe — including all the weaker names that would be excluded from a standard benchmark. A stock in the top 10% of this expanded universe is demonstrably stronger than an RS ranking computed against the S&P 500 survivors alone.
- Within 5% of 52-week high. We are not buying weakness. A stock printing new highs or consolidating just below its 52-week high is displaying institutional accumulation behavior. Buying breakouts from strength, not from oversold conditions.
- VCP (Volatility Contraction Pattern) confirmed. Detailed in Section IV. The stock must be forming a quantified base with decreasing contraction depth and volume dry-up. This eliminates wide, volatile, untested names.
// Gate 3 — Universe Construction
The third gate applies liquidity and size floors: $1.5B market capitalization minimum and $15M average daily trading volume (ADTV) minimum. These are not arbitrary round numbers.
The ADTV floor is the critical one. At $15M/day, a $150K position represents approximately 1% of daily volume. Below this threshold, position entry and exit begin to move the market — you are no longer operating as a price-taker. The $1.5B market cap floor ensures the company has sufficient institutional coverage that the fundamental data is being actively arbitraged by market participants, reducing the probability of data errors surviving undetected in the price.
~3,000+ tickers (incl. delisted)
Fundamental Acceleration
+ operating margin inflection
pass
Technical Validation
VCP with volume dry-up
pass
Universe Construction
survivorship-free PIT universe
OrderIntents → ConvexityStore
III. The RegimeGateway — Why Isolation Matters
Project Convexity has exactly one dependency on the QuantKernel core system: a read-only Regime enum. This is an intentional architectural constraint, not an oversight.
The regime system produces four states: ATTACK (full offensive posture, maximum capital deployment), NEUTRAL (normal operating conditions), HEDGE (defensive posture, intraday strategies scaling back), and ICE_POINT (systemic risk detected, tactical strategies halt new entries). The RegimeGateway reads this state once per daily runner execution. It is read-only and fail-closed.
// Fail-closed gateway semantics
Fail-closed means: if the HTTP read of the regime state fails for any reason — network timeout, malformed response, unexpected enum value — the gateway defaults to blocking new entries. It never silently defaults to open. The cost of a missed entry is bounded. The cost of an unintended entry during a systemic event is not.
// The critical design decision: exits are never regime-forced
This is the most important architectural decision in the Convexity sleeve, and it requires explicit justification.
When the QuantKernel core transitions to HEDGE or ICE_POINT, the tactical strategies — Trend Tracker, Intraday Breakout, Pairs — scale back or halt new entries. This makes sense for strategies with 1–5 day holding periods. When a regime shift says 'risk off,' positions that will close within the week should be managed conservatively.
A growth compounder bought at the correct base with a weeks-to-months holding horizon is a different instrument entirely. Forcing a sale because VIX spiked today is almost always value-destructive. The growth thesis doesn't change because of an intraday volatility event. The base is still intact. The fundamental acceleration is still intact. The correct response is to stop opening new scouts — not to exit the winners you already own.
Riding through a regime shift is the entire point of the Convexity sleeve. A risk-off toggle that force-sells a growth compounder mid-base is not a risk manager — it is a volatility-sensitive stop-loss dressed up as architecture.
This is the architectural divide between a risk-off toggle and a proper position manager. The ConvexityRiskManager manages individual position state — SCOUT, ADD, and subsequent phases — independently of the regime signal. The regime signal only gates new entry. It has no authority over existing positions.
IV. The VCP Detector
The VCP (Volatility Contraction Pattern) is a base-formation pattern described qualitatively in the discretionary literature — most prominently in Minervini's work on stage analysis. The implementation challenge is operationalization: converting a pattern that is partly subjective in the source material into a deterministic, reproducible algorithm.
The detector uses five parameters:
-
base_days— the minimum number of calendar days the stock has been in the base (consolidation phase). Too short and you are not detecting a base; you are detecting normal intraday noise. -
contraction_depths— a chronological list of drawdown depths within the base. The defining quantitative requirement: these must be strictly decreasing. A sequence like [0.25, 0.12, 0.05] — 25%, 12%, 5% — describes a base that is tightening. A sequence like [0.25, 0.30, 0.12] fails the VCP test even though the final contraction is tight. -
volume_dryup— the average daily volume in the final contraction leg must be below 50% of the 50-day moving average volume. This is the institutional footprint disappearing: sellers have exhausted themselves, and there is no distribution. The base is 'drying up.' -
pivot_high— the most recent local high within the base. This becomes the breakout trigger price: the signal fires when price closes abovepivot_highon above-average volume. -
base_low— the lowest point within the base. This becomes the hard stop: a close belowbase_lowinvalidates the base and triggers position exit. The base is broken.
An important note that belongs in any honest technical description of this detector: This is one defensible operationalization of a pattern that is, in the discretionary literature, partly subjective. Treat the screen as a candidate funnel, then visually review the survivors. The VCP detector is not a mechanical entry system in isolation — it is the final filter in a three-gate pipeline that has already validated fundamental acceleration, RS ranking, and proximity to the 52-week high. By the time a name passes all three gates and VCP detection, it is a high-quality candidate list, not a mechanical trade list.
V. What 6.2 Means for the Platform
QuantKernel 6.2 now runs five parallel strategy tracks across two fundamentally different time horizons:
- High-frequency tactical layer — Trend Tracker AI (DB2, 1–5 days), Intraday Breakout Engine (Dual Thrust + R-Breaker, intraday), Pairs Arbitrage (Z-score, 1–3 days), Options Income Engine (Bull Put Spread, theta decay). These strategies respond to regime signals on a short loop.
- Low-frequency strategic layer — Project Convexity (PIT fundamental acceleration + VCP, weeks to months). This strategy reads regime signals as entry gates only. Existing positions are managed by ConvexityRiskManager on their own state machine.
The regime signal is the coordination layer between these two tracks. When the tactical core declares ICE_POINT, it is not telling the Convexity sleeve to sell — it is telling it to stop opening new scouts. The existing compounders ride out the event. This is how proper multi-strategy fund architecture works: each pod has capital independence and risk independence, but they share a common macro regime signal that gates new exposure without disrupting the natural lifecycle of existing positions.
The architecture choice to use Sharadar PIT data rather than FMP or yfinance is not incidental. It is what makes every result from the pipeline defensible. A backtest that was constructed using announcement_date-gated survivorship-free data can be presented with confidence. A backtest constructed on point-in-time data and tested on current-constituents data cannot — no matter how good the numbers look.
Exits managed by ConvexityRiskManager
All five strategies run in parallel in production. Convexity signals are distributed to subscribers through a dedicated Discord channel with zero cross-contamination with the tactical signals. The daily runner executes after market close: RS ranking, PIT screening, VCP detection, OrderIntents to ConvexityStore, execution.