Back to Community
Missing Splits in Live Trading: VXX and TVIX (Aug. 9, 2016)

This morning, reverse splits for VXX (4 for 1) and TVIX (25 for 1) were not correctly applied in live algorithms. Last night, we didn't get the split data for VXX or TVIX. As a result, these splits were not properly applied in live algorithms.

This is an area where our live trading infrastructure isn't robust enough. We currently only have one corporate actions data vendor so when we aren't given an corporate actions event, it usually doesn't make it through to live algos for market open. This is something that's high on our list to fix.

Worth noting is that we are trading our prop account on the same infrastructure with the same data. Our interests are aligned. We need the platform to be more robust. We aren't satisfied with our system's performance and we are going to improve it.

For VXX and TVIX, we are manually adding the splits to our dataset, so live algorithms will have the correct split tomorrow.

What this means for broker-backed algorithms:

Current prices and positions for VXX and TVIX were correct for today. Trailing windows of data for VXX and TVIX (for example, from data.history) are not properly adjusted as the splits are not applied. Trailing windows will be properly adjusted tomorrow.

What this means for Quantopian paper trading (including contest) algorithms:

Prices are accurate, but share counts in algorithm portfolios were not properly adjusted. If you held a position in VXX or TVIX this morning, your performance plot probably looks like it had a big jump (up or down). Tomorrow, you should see your performance plot make the correcting change; if it jumped up today, it will jump down tomorrow and vice versa. Prices are accurate, but share counts in algorithm portfolios were not properly adjusted.


The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by Quantopian. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. No information contained herein should be regarded as a suggestion to engage in or refrain from any investment-related course of action as none of Quantopian nor any of its affiliates is undertaking to provide investment advice, act as an adviser to any plan or entity subject to the Employee Retirement Income Security Act of 1974, as amended, individual retirement account or individual retirement annuity, or give advice in a fiduciary capacity with respect to the materials presented herein. If you are an individual retirement or other investor, contact your financial advisor or other fiduciary unrelated to Quantopian about whether any given investment idea, strategy, product or service described herein may be appropriate for your circumstances. All investments involve risk, including loss of principal. Quantopian makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances.

7 responses

FYI I think there is another error today, the splits have been applied twice (multiplicatively).

Our engineers are currently looking into the issue. We'll provide an update when we learn more.

I forgot to post the update here yesterday. The issue was solved last night.

Hi there,

It seems there are more problems with reverse splits. Please see my post here . Are you all aware of this issue going on past VXX and TVIX?

Clone Algorithm
Total Returns
Max Drawdown
Benchmark Returns
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
def initialize(context):
    context.eeq = sid(24073)
    context.gnk = sid(27479)
    schedule_function(open_positions, date_rules.every_day(), time_rules.market_open())
def open_positions(context, data):
    order_target_percent(context.eeq, 0.5)
    order_target_percent(context.gnk, 0.5)
There was a runtime error.

Hi Jamie,

Kinda curious, this whole split thing. I'd think that the industry would have a sure-fire way of managing it. Has your data vendor provided a root cause/corrective action for their flub-ups? Seems like if they are doing business with any of the big boys, quality control would have beat them with a stick by now.

What's the story with (from ):


The latest total shares outstanding reported by the company; most common source of this information is from the cover of the 10K, 10Q, or 20F filing. This figure is an aggregated shares outstanding number for a company in terms of a particular share class. It can be used to calculate the most accurate market cap, based on each individual share’s trading price and the total aggregated shares outstanding figure.

My understanding is that you update fundamentals daily, so would shares_outstanding change before the market opens? Or are the fundamental data strictly trailing, and thus would not capture the change in number of outstanding shares until the next trading day? I figure Quantopian must get the data before the market opens, and thus could use it to check for missing splits. If Morningstar can't provide the data, is there a source for point-in-time shares outstanding? I'd think that exchanges would be required to publish the number of shares of any given stock that will be available for trading, prior to the market open. Mysterious that this would be a problem, especially now that we have this Internet/Web/Cloud thing up and running. Maybe Wall Street has a guy with a green eye shade and a #2 pencil tracking splits?

There are websites that list historical and announced upcoming splits, eg.

Their reliability varies, but scripts could monitor them daily or nightly, and alert Q when an upcoming split is not reflected in official Morningstar data a few days before the date, enough to call, confirm, and adjust the database manually if needed.

The proper way to correct the record would be to restore all the affected portfolios to their state at the close before the split, adjust the shares data, then rerun each algorithm on the days following the split, and update the contest leaderboards. Otherwise metrics like volatility, stability, max drawdown, etc., even the Sharpe and Sortino ratios, will not reflect their true performance at all. Please straighten this up.