Stale figis associated with current price data

Ticker LPRO is listed in the master security database with figi FIBBG00JQ2W5J8, delisted date of 2020-07-02 and name NEBULA ACQUISITION CORP-CL A.

However, there is current price data for this figi in ustock-1min (and 1d), and the ticker is still active on NASDAQ with name Open Lending Corp. My algorithm generates a forecast for this figi, but fails to find a corresponding contract id from interactive brokers when it comes to trade.

Looking at the chart for LPRO, it looks to have been a SPAC that "de-SPACed" just prior to the delisting date. I suspect the figi changed on that date, but the security master wasn't changed, which is why there is no corresponding contract id in interactive brokers.

Edit: the solution I am implementing is to filter figis with no corresponding ibkr contract id. However, this artificially reduces the universe in cases like this where the contract id is only missing because the security master has a stale figi, so it would be good if there was a process implemented at source to check for this.

The approach you’re using, to filter out securities without an ibkr_ConId (at least in live trading) is recommended because 100% alignment between different data providers is not possible, as discussed in more detail in the usage guide. The intuition is that when your strategy involves two different providers (in this case US stock data and IBKR execution), your trading universe should be the intersection of the respective universes of the two providers.

We’ll look at this particular case and see if there is a way to better handle it. At the very least, the ustock_DateDelisted field shouldn’t be set when there is still current price data.

The question of which Figi should be used after a de-SPAC transition (or other merger type event) is not an easy one. You could argue that it should be the new Figi because that's the current one, but you could also argue that it should be the old Figi because that one was in use first and you want to treat the new data as a continuation of the old data and not change the identifier mid-stream.

Particularly after a de-SPAC event I think the argument is strongly in favor of using the new figi. Certainly from a trading perspective, since that is the key that will correctly resolve at brokers. But also from a research perspective: the SPAC and the de-SPAC'ed entities really are two distinct beasts.

On this view, the fact that the original figi is delisted is correct. What is incorrect is associating post-delisting price data with the delisted figi instead of the new figi.

Mergers are different. Typically, it's not a merger of equals and one continuous series (pre- and post- merger) for the acquiring company makes sense. But generally the figi won't change in that case anyway?

For better or worse, most data providers for research applications (backtesting, charting) will treat the SPAC and its target as one security (easy to spot on charts by the characteristic flattish line around 10 before the de-SPAC). IBKR sometimes treats SPACs as one security (DWAC->DJT, SBE->CHPT), preserving the same ConId, and sometimes treats them separately (NEBU->LPRO), assigning a new ConId.

Whether the old or new Figi is used, the most important thing is that it’s consistent between supported data providers and brokers. To that end, we’ve expanded some of the consistency enforcement we’re already doing to make sure there’s an IBKR ConId attached to securities like LPRO. The next time you collect listings for any IBKR securities, it will pull down the enhanced Sid<->ConId mappings so that LPRO and similarly affected securities will be tradable. I would still recommend using the filter you described, but now it should filter out fewer securities.