3 Comments
User's avatar
Martin's avatar

Really interesting follow-up, thanks a lot! I'm a complete beginner when it comes to short-selling stocks, but I'd like to try implementing the strategy you presented as closely as possible. A few parts of the live workflow are still unclear to me, though, and I'd really appreciate it if you could clarify them.

Earlier in the article you say that the live program currently uses an equal-weighted basket. In the "Running it yourself" section, however, you recommend sizing each name by pre-market dollar volume as a proxy for opening-auction size. Is pre-market-dollar-volume weighting now the intended/live sizing method, replacing equal weighting?

Related to that: since the smallest 20% by opening-auction size had roughly zero average return, do you actually use a minimum liquidity/pre-market-dollar-volume filter, or do you still trade the smaller names but simply allocate less to them? If there is a filter, do you first take the top 5 ranks and then filter (leaving fewer positions), or filter the wider ranked universe first and then take the top 5 remaining names?

Finally, the "/premarket-drop-risk" API docs state that pre-market dollar volume is not a served field. What data source and exact definition/premarket window do you use for this in the live implementation (e.g. 04:00–09:00 ET cumulative dollar volume/VWAP-based notional)?

And for a beginner like me who does not currently have a "Massive" data feed: would you recommend keeping the implementation simple at first and just omitting the pre-market-volume filter/weighting altogether, so that I can trade directly from the Alphanume signal and TradeZero without adding another market-data subscription? Or would you consider the pre-market dollar-volume component important enough that it should not be left out even for a small initial implementation?

Thanks in advance!

Alphanume Research's avatar

Hey Martin!

Our code was already running the basic equal-weighting version, but we found that pre-market dollar volume was a good proxy for auction volume and led to higher out-of-sample returns (e.g., >= $500k from 9:00-9:25. Specifically, those beneath that threshold were dropped from that day’s basket before orders went out. This was a recent finding, so we were just noting it for you to test yourself.

Correct, the API as it exists doesn’t return the volume, you’d have to construct that feature yourself, for now (i.e., sum(v * vw) over the lookback window).

Yeah, you don’t necessarily need a separate data subscription and the base-version should work well enough, but if you ever want to test an optimization (e.g., different exit times, the volume threshold above), having one would only add more value

Martin's avatar

Thank you, that makes sense. Just one timing question to make sure I understood correctly:

Did you literally mean cumulative dollar volume from 09:00 to 09:25 ET for the $500k filter?

I'm asking because the Alphanume signal is available around 09:08, and the public TradeZero starter stops submitting MOO entries around 09:24/09:25. So if you wait until the full 09:00-09:25 window is complete before dropping names below $500k, there seems to be essentially no time left to submit the opening orders.

Do you actually evaluate the volume filter slightly earlier (e.g., through 09:23/09:24), submit as soon as a name has crossed $500k, or does your live routing allow MOO submissions after 09:25?

Thanks again. I know you're very busy, and your words mean a lot to me!