Skip to content
Fengrui Yang

Selected Systems

01. Personal system

Quant Research & Execution Platform

A private quantitative research system built to connect historical research evidence, portfolio decisions, and execution-aware workflows without allowing ambiguous data or hidden fallbacks to silently change a decision.

Role
Architecture, research, and implementation.
Context
Independent personal project.
Domain
Quantitative research, Data systems, Portfolio systems

01 Problem

How can research, portfolio construction, market evidence, and execution remain consistent as one decision process?

A quantitative model can look correct in research while the surrounding system remains fragile. Historical identity, dataset versions, timestamps, portfolio state, and downstream market evidence can all change the meaning of a decision.

The design problem was therefore not only how to generate signals, but how to preserve the evidence and assumptions that produced each downstream decision.

02 Constraints

  • Historical research inputs must be point-in-time and explicitly identified.
  • Missing or ambiguous evidence must stop the workflow rather than trigger guessed, nearest, latest, or default substitutions.
  • Research outputs and execution-facing state must remain separated so that one cannot silently redefine the other.
  • The system is intentionally designed for a single-user research workflow rather than as an enterprise or forensic platform.

03 System

Decision path

  1. Research Evidence

    Point-in-time inputs and research outputs.

  2. Portfolio Decision

    Translate research into explicit target decisions.

  3. Reference Evidence

    Attach decision-time market evidence to the target.

  4. Execution Boundary

    Keep downstream execution handling behind a separate system boundary.

  • Research Evidence feeds Portfolio Decision
  • Portfolio Decision feeds Reference Evidence
  • Reference Evidence feeds Execution Boundary

04 Engineering decisions

  1. Make point-in-time evidence explicit.

    Historical data being available today does not mean it was knowable at the time of a historical decision. Research inputs therefore need explicit temporal and dataset identity rather than an implicit 'latest' view.

    Alternatives rejected

    • Using the latest available record during historical reconstruction.
    • Allowing ambiguous historical state to resolve silently.
  2. Fail closed instead of guessing.

    When identity, timing, evidence, or state is missing or ambiguous, continuing with a guessed substitute can make a result look valid while changing its meaning. Unsupported cases therefore stop explicitly instead of falling back to nearest, latest, default, or inferred values.

    Alternatives rejected

    • Nearest-date substitution.
    • Latest/default fallback.
    • Silent degradation when evidence is incomplete.
  3. Separate research from execution-facing state.

    A research result and an executable decision make different claims. Keeping research, portfolio construction, decision evidence, and downstream execution boundaries explicit prevents a statistical backtest from being treated as executable performance.

    Alternatives rejected

    • Allowing research outputs to flow directly into execution semantics.
    • Treating gross research results as if they represented executable outcomes.
  4. Freeze decision evidence across days.

    Mutable market-data records can be refreshed after a decision was made. Freezing the evidence required by a decision preserves what the system actually relied on at that point in time instead of reconstructing it later from potentially changed state.

  5. Prefer deterministic support over artificial coverage.

    Forcing every edge case through the pipeline would require assumptions or fallback behavior that weakens reproducibility. The system instead prefers a smaller supported set with explicit semantics and explicit rejection outside that set.

    Alternatives rejected

    • Maximizing coverage through inferred values.
    • Silently substituting another source or state.

05 Validation

Objective

Verify that supported inputs preserve the same decision semantics and that unsupported or ambiguous states fail explicitly rather than silently changing the result.

Methods
  • Automated invariant and regression tests across research, portfolio, and decision-evidence boundaries.
  • Deterministic reruns against versioned or frozen evidence.
  • Negative-path tests for missing, ambiguous, stale, or unsupported states.
Evidence considered
  • Explicit dataset and evidence identifiers.
  • Frozen decision artifacts for cross-day reproducibility.
  • Machine-readable failure reasons instead of silent fallback.
Limitations
  • The public case study does not expose strategy logic, brokerage/account state, private runtime configuration, or execution-specific operational details.
  • Research backtest results are not presented as executable performance evidence.
  • This is a personal single-user platform, not an enterprise or forensic audit system.

06 Trade-offs

  • Fail-closed behavior reduces convenience and coverage in exchange for deterministic semantics.
  • Explicit evidence boundaries add engineering overhead, but reduce hidden coupling between research and downstream decisions.
  • The platform optimizes for correctness and reproducibility in a single-user workflow rather than enterprise-scale generality.

07 Outcome

The platform establishes a reproducible evidence path from historical research through portfolio decisions to execution-aware reference evidence.

Unsupported states remain visible as explicit failures rather than being silently converted into apparently valid decisions.

08 Reflection

The main lesson is that model quality is only one part of a quantitative system. Identity, timing, provenance, state, and the semantics of a decision can matter just as much as the model itself.

That shifted the project from simply building trading models toward building a decision system whose assumptions remain inspectable.

09 Technologies

Python, PostgreSQL