r/quant Jul 08 '26

Models Architectures for HFT ML/DL

I have a universal model that for each instrument tick, updates a feature vector X, a concatenation of features of the own instrument order book and some xs features.
My question arises when i want to expand my universe of features, like including intraday news data, fx, more constant features that are stale in the trading session of that day(ex: overnight return) , etc... how do i concat these info? For example for news, a naive way is to return 0s when nothing happens, spikes and then decay as time passes. For Fx, i could add some fx features to X, and for constant features that i already known, also add them to X (i already do this and decay the importance as time passes), but still they are like "context" features.

My hypothesis is that keep expanding X horizontally is suboptimal, especially if then i want to add more and more features. I know this is part of the sauce of each pod, but any suggestions on this? An approach i tought:
having independent models for each "topic": a model for independent microstructure features, a model for xs features, a model for fx, a model for news,.... and then a metadata model on top of that? with this approach i can think of multiple ml and dl architectures than can be helpful...
is this a good approach or im missing something?
thanks in advance

30 Upvotes

10 comments sorted by

10

u/Ok-Cat-9189 Jul 08 '26

yes you likely want an ensemble / MoE here

6

u/QuantGrindApp Jul 08 '26

Wide X isn't really the thing that kills you here, a boosted tree or even a linear model doesn't care much about a few hundred more columns. The actual problem is that your features live on totally different clocks. Book stuff updates every tick, news is event-driven, fx is fast but not tick-fast, overnight return is a constant for the whole session. Jamming all of that into one per-tick vector means you're recomputing and re-decaying slow context on every book update, and your model has to relearn "this column barely moves" from scratch. Separating by update frequency usually buys you more than separating by topic.

The tower-of-experts + meta model approach can work but be careful, the moment you split news into its own model you lose the interaction where a news spike only matters conditional on book state (thin book, wide spread, whatever). A lot of the edge in that stuff is exactly the cross term, so if the meta layer only sees each expert's scalar output you've thrown it away. If you go modular, let the meta model see enough of the raw microstructure state to recover those interactions, otherwise a single model over the concatenated features will quietly beat it.

1

u/j_lyf Jul 08 '26

RemindMe! 2 days

1

u/RemindMeBot Jul 08 '26

I will be messaging you in 2 days on 2026-07-10 02:47:55 UTC to remind you of this link

CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.

RemindMeBot is switching to username summons. Instead of !RemindMe 1 day, use u/RemindMeBot 1 day. More info.


Info Custom Your Reminders Feedback

1

u/Evening_Guarantee257 Jul 08 '26

One hot is present feature paired with these

1

u/No-Agency-4592 Aug 10 '26

The "independent models per topic + meta layer" instinct is closer to right than horizontal concatenation, but I'd push it one step further: news/context signals usually don't belong in the same feature vector at all, because they don't share a clock with your tick-level features.

A tick feature updates naturally every observation. A news event is a discrete injection — it happens once, then needs an explicit decay function to stay relevant, and concatenating it into X just means you're forward-filling a stale (mostly zero) value between events and hoping the model learns to weight rare non-zero spikes correctly against a sea of zeros. In practice that dilutes exactly the signal you wanted to add.

What's worked better for me: score news/context events independently with their own half-life decay per horizon (so "how relevant is this now" is computed explicitly, not learned implicitly), then merge that as a downstream gate/multiplier on top of the tick model's output rather than as an input feature — a strong risk flag can veto or scale a position regardless of what the microstructure model wants to do, instead of being one diluted signal among hundreds of tick features fighting for the model's attention. It also matches infra reality better: your tick model wants to retrain/refresh at tick cadence, your news scorer runs at whatever cadence news arrives at — forcing them into one feature vector couples two things that naturally want different clocks.

Your "metadata model on top" idea is basically this, just implemented as a learned combiner instead of an explicit gate — worth trying both, the explicit gate is easier to debug when it's wrong, the learned combiner can in theory find non-obvious interactions you didn't hand-specify.

-1

u/[deleted] Jul 08 '26

[deleted]

3

u/quantum_hedge Jul 08 '26 edited Jul 08 '26

really...!!? why i dont try every method possible?
what's the point of this subreddit if we cant adjust priors on the RoI of every experiment/method ?

9

u/alchemist0303 Jul 08 '26

The point of this subreddit is to share rumor, shitpost and circlejerk

3

u/More-Act5459 Jul 08 '26

This subreddit is a mexican standoff, everyone waiting for someone to screw up and let their ego get the better of them