// "Humans vs Machines" hero — a punchy lead-in that frames the pitch:
// machines already do the trading. Either you have one working for you, or
// you are the liquidity it takes from.
//
// Animated horizontal volume bar fills from 0 → ~80% machine share over
// 4 years. Live-style ticker of "machine-executed orders this second" runs
// underneath. Clean, factual, no AI-slop gradients.
window.ApexHeroMachines = (function () {
const { useState, useEffect, useRef, useMemo } = React;
// Theme is passed in from the variation (terminal.jsx) so colors stay consistent.
function HumansVsMachinesHero({ theme, r, onApply }) {
const t = theme;
// --- 1) Animated machine-share bar (timeline 2003 → 2025) -------------
// Sourced from publicly-cited industry research (Select USA, FINRA,
// academic surveys). Shown as illustrative, not real-time data.
const series = useMemo(() => ([
{ y: 2003, m: 15 },
{ y: 2007, m: 35 },
{ y: 2010, m: 56 },
{ y: 2014, m: 65 },
{ y: 2018, m: 70 },
{ y: 2022, m: 75 },
{ y: 2025, m: 78 },
]), []);
const FINAL_M = series[series.length - 1].m; // 78
const FINAL_H = 100 - FINAL_M;
const [progress, setProgress] = useState(0); // 0..1 over animation
const startedRef = useRef(false);
const containerRef = useRef(null);
// Animate when scrolled into view — but also kick off on mount because
// the hero sits at the top of the page anyway.
useEffect(() => {
let raf;
const DURATION = 2200;
const t0 = performance.now();
function frame(now) {
const p = Math.min(1, (now - t0) / DURATION);
// ease-out cubic
const eased = 1 - Math.pow(1 - p, 3);
setProgress(eased);
if (p < 1) raf = requestAnimationFrame(frame);
}
raf = requestAnimationFrame(frame);
return () => cancelAnimationFrame(raf);
}, []);
const machinePct = FINAL_M * progress;
const humanPct = 100 - machinePct;
// --- 2) Live-style "orders this second" odometer ---------------------
// ~ 70M algorithmic orders/sec across global equity venues at peak is a
// common public estimate; we tick a counter that drifts so it feels live.
const [orderCount, setOrderCount] = useState(0);
useEffect(() => {
const id = setInterval(() => {
// 800–1400 orders per ~80ms tick → reads as ~10-17k/sec
setOrderCount(c => c + 800 + Math.floor(Math.random() * 600));
}, 80);
return () => clearInterval(id);
}, []);
// --- 3) Layout --------------------------------------------------------
const sidePad = r.isMobile ? 16 : 32;
return (
Our complex models trade for you. A portfolio of systematic strategies, combined to minimize drawdown and maximize returns — executed automatically through your own brokerage, on your own capital, with no performance fee.
78% of trades are placed by
machines
.
Don't be the other 22%.
“can computers trade?”
around 2010.
It’s now: whose computers are trading for you?
You just have to stop being the only one without one.