FinCore
Blog
Menu

Quant Lab

From a hunch to a validated, portfolio-ready strategy — without writing a line of backtesting code.

Build a strategy as a no-code recipe, walk it through fourteen real validation gates, and size it into a tradable portfolio — with every gate it hasn't cleared yet shown, not hidden.

Validation pipelinecandidate factor · live
Mechanismcaptured
Data proxycomputed
Portfolio sortQ5–Q1
Monotonicitymonotonic
Factor spanningsurvives FF5
Liquiditysurvives
Regimeregime-split
Holdout3 layers
01 / Build

No code. Just a thesis and a formula.

Every strategy starts as a Recipe-JSON — ranking signal, universe, rebalance frequency, holding period, selection rule — assembled through a form, not a notebook.

Momentum

Price and earnings momentum blocks, computed point-in-time.

Value

Classic value ratios, built from point-in-time BIST fundamentals, not a restated number.

Quality

Profitability and balance-sheet quality factors.

Low-volatility

Realized-volatility ranking blocks for a defensive tilt.

Foreign ownership & flow

The same point-in-time foreign-ownership data the discovery engine and the Optimizer's foreign-ownership sleeve both draw on.

...and more, growing

The catalogue is tiered and expanding — every new block ships point-in-time correct, or it doesn't ship.

Point-in-time, always

Every block in the catalogue is built with no look-ahead — the feature you see backtested is the feature that would have actually been computable on that date.

Two ways in

Build a specific recipe by hand, or run Discover and let an automated search surface candidates across the recipe space.

A form, not a notebook

Ranking signal, universe, frequency, holding period, and selection rule are set through the UI — nothing here requires writing or reading backtesting code.

A thesis becomes a formula. A formula becomes a recipe. No code in between.

02 / Gates

Fourteen gates. Nothing skipped, nothing hidden.

Every candidate — hand-built or discovered — walks the same chain, from a stated mechanism to a genuinely unseen holdout, before it's ever called a candidate factor.

Fourteen checks, in order

01

Mechanism

Thesis and sources captured for curated recipes — a human-judgment step, not automated, but never skipped silently.

02

Data proxy

The no-code feature catalogue turns the thesis into an actual computable variable — momentum, value, quality, low-vol, foreign flow, and more.

03

Pre-register

The Recipe-JSON — formula, direction, horizon, universe — freezes the moment you choose to track a candidate.

04

Portfolio sort

Every single backtest produces a Q5–Q1 quintile spread. No exceptions.

05

Monotonicity

The fraction of adjacent quintile transitions that move the right direction — does the signal actually rank, or just separate the extremes?

06

Cross-sectional regression

A real per-period Fama-MacBeth regression: signal against forward return, controlling for size, value, and momentum at once.

07

Factor spanning

Does the signal survive real, live BIST FF5 + Momentum exposure? Alpha, loadings, and t-stats, from actual OLS.

08

Liquidity test

Re-run as separate walk-forward passes across XU030/XU050/XU100/XU500 and ADV liquidity tiers — to rule out a microcap-driven result.

09

Parameter stability

Holding-period, top-N, and cost-sensitivity grids, swept and compared.

10

Subperiod test

A 3-block subperiod split, plus Combinatorial Purged Cross-Validation with Deflated-Sharpe correction for multiple testing.

11

Regime test

Excess return sliced by real market regime — trend, momentum, volatility — and by real sovereign 5-year CDS trend, both point-in-time.

12

Decay curve

The Q5–Q1 spread at 1, 5, 10, 20, 40, 60, and 120 trading days out, from fixed formation dates — exactly how fast the edge fades.

13

Cost & capacity

A cost-model grid — low, standard, conservative, stress basis points — priced against every candidate.

14

Holdout

Three independent layers: an internal 20% reserved split, CPCV's out-of-fold distribution, and a genuine frozen-validation replay from the moment you tracked it.

All fourteen feed one 0–100 confidence score — the number a strategy actually has to earn before it's worth sizing into a portfolio.

How the confidence score is built

Missing gates don't count against you A gate that hasn't run yet is excluded and the score renormalized around what has — not scored as a zero.
One number, fourteen inputs The 0–100 confidence score synthesizes every gate that has actually reported, not a single backtest metric dressed up.
Crowding is disclosed, not decided A BIST foreign-flow-based crowding prior flags signals that already look broadly held or traded. The exact haircut is still being calibrated — shown as a factor, not asserted as settled.

Confidence isn't asserted here. It's fourteen numbers you can go check yourself.

03 / Optimize

The other half: turn a validated signal into a tradable book.

The Portfolio Optimizer takes a validated signal, or FinCore's curated BIST factors, and sizes it — with the institutional controls exposed, not buried.

Portfolio Optimizer

From a validated signal to a sized, tradable book.

Mean-variance optimization with the institutional controls exposed in the UI, not buried in a config file. Choose the risk model, set a CVaR constraint, cap turnover. Liquidity-aware sizing keeps the optimizer from oversizing into a name the market can't actually absorb, a rule-based regime layer adjusts stance between risk-on and risk-off, and sector rotation plus two purpose-built BIST sleeves — low-volatility and foreign-ownership — are ready out of the box.

CVaR and max-turnover, set in the UI Liquidity-aware sizing, never blind to ADV Validated against 1/N, not just a backtest chart
Optimizer runwalk-forward · vs 1/N
1 Pick risk model & constraints CVaR, max turnover 2 Apply BIST sleeves low-vol, foreign-ownership 3 Regime layer adjusts stance risk-on / risk-off 4 Tearsheet vs 1/N control bootstrap CIs

The validation tearsheet is a walk-forward backtest of the Optimizer's actual output against a naive 1/N equal-weight control, with bootstrap confidence intervals around the difference — so "does this add anything over just diversifying equally" has a real, statistically honest answer, not a chart that only shows the optimizer's own equity curve.

An optimizer without a control group is just a chart. This one has to beat 1/N to earn the word alpha.

Honesty

Pre-registration means something here — not a checkbox.

Tracking a discovered candidate freezes its Recipe-JSON and its validation window at that moment. That freeze is the platform's actual pre-registration lock, not a naming convention.

A strategy that decays doesn't quietly disappear from the list — its decay curve keeps updating as it ages, and gates the platform hasn't finished building yet are flagged as open, not silently skipped.

A pipeline that hides its gaps isn't rigorous. It's just quiet.

Frozen at the moment you track it Tracking a discovered candidate locks its Recipe-JSON and validation window — the platform's actual pre-registration mechanism, not a UI convention.
Decay is shown, not hidden Tracked strategies show their 1D–120D decay curve as they age; when an edge fades, the interface says so rather than letting a strategy quietly vanish.
Gaps are flagged, not hidden A true per-signal lookback-window sweep and a full capacity/impact model beyond ADV tiers are known gaps today — stated, not presented as finished.
Holdout means untouched The internal 20% split, CPCV's out-of-fold distribution, and the frozen-validation replay are three separate layers, not one convenient number.
04 / FAQ

The questions a desk asks before it trusts a pipeline.

Short, specific answers — the same understated register as the rest of this platform.

Does this replace a quant researcher?

No — mechanism, why a signal should predict returns, is still a human judgment call, captured as a thesis and sources field on curated recipes. Quant Lab automates everything downstream of that judgment: the feature computation, the fourteen validation gates, and the sizing — the part that used to take a researcher weeks of backtesting code.

How is pre-registration actually enforced, not just claimed?

The freeze happens at the moment you choose to track a discovered candidate — its Recipe-JSON and validation window lock at that instant, and the frozen-validation holdout layer replays only against data from after that moment. It's a real timestamp, not a policy.

What happens when a tracked strategy's edge decays?

The decay curve — Q5–Q1 spread at 1 through 120 trading days out — keeps updating as the strategy ages, and untracking is explicit and visible rather than a strategy quietly vanishing from the list.

What's missing from the pipeline today?

Two things, stated plainly: a true per-signal lookback-window parameter sweep isn't built yet, and capacity/market-impact modeling goes only as far as ADV liquidity tiers, not a full impact model. Both are known gaps in the confidence score's inputs, not hidden ones.

Does the crowding signal mean a strategy is dead?

No — it's a disclosed input, not a verdict. The BIST foreign-flow crowding prior flags when a signal already looks broadly held or traded; its exact calibration is still being refined, and it's shown alongside the other thirteen gates for you to weigh, not used to silently kill a candidate.

Give your desk a pipeline it doesn't have to take on faith.

Request a walkthrough focused on your factor universe, your BIST coverage, and what a first validated candidate would look like in week one.