An auditable Python research system for empirical asset-pricing and equity factor investing research across Australian and United States large-cap equity markets.
Project custodian: Dr Joseph N. Njiru
Organisation: Rigour Consulting
Runtime target: Python 3.11.9
Empirical-finance-ready research system, validated on deterministic synthetic data, awaiting licensed point-in-time empirical data for final asset pricing inference.
The repository is complete for deterministic synthetic research-engineering validation. It is not completed empirical asset-pricing evidence until licensed, point-in-time empirical data are integrated and independently validated.
This repository currently provides a validated research-engineering system. Synthetic results demonstrate system behaviour under controlled assumptions. They are not investment advice, are not survivor-bias-free empirical evidence, and are not evidence of deployable institutional performance.
All portfolio construction events in the synthetic validation run required relaxed holding constraints because the synthetic universe size produced fewer top-quintile and top-decile holdings than the configured minimums. This is acceptable for engine validation but not for institutional capacity claims.
- Defines canonical schemas with universal metadata and deterministic hashes.
- Builds exchange-aware ASX and US rebalance timing records.
- Generates deterministic synthetic data for end-to-end validation.
- Constructs momentum, low-volatility, value, quality, and composite factors.
- Builds long-only portfolios with explicit constraint relaxation and cost accounting.
- Runs monthly benchmark-aligned backtests, risk metrics, and information-coefficient diagnostics.
- Produces Markdown, HTML, CSV, Parquet, and PNG reproducibility evidence.
- Provides an empirical-readiness audit and real-data integration plan.
- It does not provide investment advice.
- It does not prove ASX or US factor premia.
- It does not claim survivor-bias-free empirical evidence from synthetic data.
- It does not claim institutionally deployable portfolio capacity.
- It does not download or use licensed real market data without explicit licences.
A true empirical finance claim requires historical universe membership, active and inactive securities, delisting returns or terminal-return sensitivity, corporate actions, dividends, total-return prices or equivalent reconstruction, point-in-time fundamentals, filing or availability timestamps, point-in-time classifications where sector controls are used, total-return or accumulation benchmarks, and auditable data licences.
cd <PROJECT_ROOT>
python -m pip install uv
python -m uv syncIf uv is available on PATH, uv sync is equivalent.
python -m uv run python run_project.py --stage all --config config/project_config.yaml
python -m uv run python run_project.py --stage audit --config config/project_config.yaml
python -m uv run pytest
python -m uv run ruff check .If uv is on PATH, replace python -m uv with uv.
config/: reproducibility and method configuration.src/equity_factor_system/: source package.tests/: automated validation tests..github/workflows/: CI and full-pipeline workflow definitions.docs/: essential installation, methodology, reproducibility, and empirical-data documentation.
Generated data and reports are not committed to the lean GitHub source repository. They are recreated by running the pipeline.
reports/equity_factor_investing_report.mdreports/equity_factor_investing_report.htmlreports/tables/final_quality_gate.csvreports/tables/final_empirical_quality_gate.csvreports/tables/empirical_finance_readiness_audit.csvreports/tables/peer_review_readiness_scorecard.csv
See CITATION.cff and LICENSE.