1024bets ETF — Composite Scoring
Reference Python composite-scoring function for the 1024bets ETF universe. Four sub-scores (FCF, reinvestment ROIIC, indispensability, options-eligibility) → 0–1024 composite → AKQJ tier.
TL;DR: Reference Python composite-scoring function for the 1024bets ETF universe. Four sub-scores (FCF, reinvestment ROIIC, indispensability, options-eligibility) → 0–1024 composite → AKQJ tier.
Summary
Reference Python composite-scoring function for the 1024bets ETF universe. Four sub-scores (FCF, reinvestment ROIIC, indispensability, options-eligibility) → 0–1024 composite → AKQJ tier.
Preview
"""
1024bets ETF — Composite Scoring (reference)
Illustrative scoring function for the 1024bets index/ETF candidate filter. Maps
an equity onto a 0–1024 score from four sub-scores corresponding to the Alpha
Bets 27 triple filter + an Aloha Flywheel readiness factor.
NOT a live index. NOT a registered ETF. Reference math; thresholds and weights
illuminate the model only.
"""
from dataclasses import dataclass
@dataclass
class CandidateMetrics:
fcf_billions_ttm: float # absolute FCF, $B
reinvestment_roic_pct: float # 5-yr avg ROIIC on reinvested capital
structural_indispensability: int # 0..10 qualitative score
options_eligibility_score: int # 0..10, IV / liquidity / weekly
WEIGHTS = {
"fcf": 0.30,
"reinvest": 0.30,
"indispensability": 0.25,
"options": 0.15,
}
SCORE_MAX = 1024
def _normalize_fcf(fcf_b: float) -> float:
"""Map absolute FCF $B to 0..1. $50B is the gate; $200B saturates."""
if fcf_b < 50.0:
return max(0.0, fcf_b / 50.0) * 0.5 # below-gate, partial credit
return min(1.0, 0.5 + (fcf_b - 50.0) / 300.0)
def _normalize_roic(roic_pct: float) -> float:
"""Map reinvestment ROIIC % to 0..1. 12% is mediocre, 25% is great."""
return min(1.0, max(0.0, (roic_pct - 8.0) / 22.0))
def composite_score(m: CandidateMetrics) -> int:
fcf_n = _normalize_fcf(m.fcf_billions_ttm)
roic_n = _normalize_roic(m.reinvestment_roic_pct)
indis_n = m.structural_indispensability / 10.0
opt_n = m.options_eligibility_score / 10.0
weighted = (
WEIGHTS["fcf"] * fcf_n
+ WEIGHTS["reinvest"] * roic_n
+ WEIGHTS["indispensability"] * indis_n
+ WEIGHTS["options"] * opt_n
)
return int(round(weighted * SCORE_MAX))
def tier(score: int) -> str:
if score >= 880:
return "Ace"
if score >= 720:
return "King"
if score >= 560:
return "Queen"
if score >= 400:
return "Jack"
return "below threshold"
if __name__ == "__main__":
examples = [
("BRK.B", CandidateMetrics(45, 18, 9, 6)),
("AAPL", CandidateMetrics(110, 32, 9, 9)),
("MSFT", CandidateMetrics(80, 28, 9, 9)),
("COST", CandidateMetrics(8, 22, 7, 5)),
]
for tkr, m in examples:
s = composite_score(m)
print(f"{tkr:6} score={s:4d} tier={tier(s)}")
… (1 more lines in Drive)
Full artifact
Stored in Google Drive (husshone): view · download.
Cross-referenced from
Drive shortcuts pointing back to this artifact live in:
- husshtech /
wiki/concepts/alpha-bets-27/code/1024bets-etf-composite-scoring.py(open) — relates towiki/concepts/alpha-bets-27.md - husshtech /
wiki/concepts/aces-kings-queens-jacks/code/1024bets-etf-composite-scoring.py(open) — relates towiki/concepts/aces-kings-queens-jacks.md - husshtech /
wiki/concepts/iron-rules/code/1024bets-etf-composite-scoring.py(open) — relates towiki/concepts/iron-rules.md
Relations
- wiki/concepts/alpha-bets-27.md
- wiki/concepts/aces-kings-queens-jacks.md
- wiki/concepts/iron-rules.md