Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
problem w/ DVMT?

There appears to be a problem w/ the ticker DVMT. I'm using pipeline, and data.can_trade and still getting:

Something went wrong. Sorry for the inconvenience. Try using the built-in debugger to analyze your code. If you would like help, send us an email.
Cannot order DVMT on 2016-09-07 19:45:00+00:00 as there is no last price for the security. Try using data.can_trade to check whether an asset is delisted.
There was a runtime error on line 154.

However, the attached notebook shows that there was a price for 2016-09-07.

9 responses

Backtest. Still getting error, even though I think I'm removing DVMT from the list of stocks to be traded.

Backtester shows no trade on 2016-09-07, but research platform does.

1969-12-31 19:00 PRINT 2016-09-07 00:00:00+00:00
2016-09-08 08:45 PRINT 2016-09-07 13:31:00+00:00 NaN
2016-09-07 13:32:00+00:00 NaN
2016-09-07 13:33:00+00:00 NaN
2016-09-07 13:34:00+00:00 NaN
2016-09-07 13:35:00+00:00 NaN
Name: Equity(50242 [DVMT]), dtype: float64

Hello Grant,

It looks like your algorithm holds an EMC (sid(2518)) position on 09/07/2016, which is the pay date for a stock dividend that pays out in DVMT (Dell). This causes the algo to acquire an unexpected position in DVMT and when it calls order_optimal_portfolio with no target weight for this asset, the optimizer tries to sell out of the position. However, the backtester doesn't have trade data for DVMT until 2016-09-08, so it thinks DVMT isn't tradable and rejects the attempt to close the position.

A temporary fix would be to filter out EMC from your tradable universe either by removing it from the pipeline output in before_trading_start, or excluding it from your pipeline using the built-in filter StaticAssets. Adding a more general solution to the optimization API is on our list of issues to tackle.

The get_pricing function actually uses a different data feed than the one used by the backtester and the pipeline API. We are currently working on migrating get_pricing to use the new data feed, so the datasets match in both environments.

Disclaimer

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.

Thanks Ernesto -

I never would have figured that one out!

It sounds like the trick might be to also apply the data.can_trade test to stocks in the currently held portfolio, since sometimes one ticker can magically convert into another one overnight. Or I guess one would still be hosed, since universe=todays_universe only applies to the stocks being added--everything else gets dropped automatically under the hood.

Why does the optimization routine not apply the data.can_trade test upon selling? Could the test be added? It'd be a one-line change, right? Or is the optimization API on the back-burner? Or maybe you are batching up a bunch of changes? Is it on github? Maybe I could submit a request there?

Hi Ernesto,

Any feedback on a fix? Seems really straightforward.

Thanks,

Grant

We resolved this problem by changing the way we model EMC's transaction. Rather than model it as a cash dividend and a stock dividend, it is now modeled as a regular delisted security. Your algorithm gets an all-cash payout at the closing price, just like we do for delistings. Of course this isn't a perfect representation of the transaction, but it is a good analog on the important aspects of calculating returns.

None of the can_trade options you suggest are available; the problem occurs well before it gets to the orders being placed. The optimization routine can't construct an optimal portfolio when the portfolio includes a security with an unknown (and unknowable) price. My favorite quote about software development: "Seems really straightforward."

Disclaimer

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.

Thanks Dan,

What about live trading at IB? If I'm thinking about this correctly, if EMC were held the prior day at IB, then it would magically be converted to DVMT at the open the next day, right? And it would appear in the portfolio. Wouldn't there still be a problem, under live trading with a broker? There would be no price until the first trade, so presumably, the optimization API and ordering would choke, right?

Yes, there is still an open bug about this particular case.

If you are integrated with a broker, and if your portfolio holds an equity that is listed on a major exchange but has never traded, and you run the optimization API, the optimizer can't handle it and will throw an exception.

Thanks. I suppose it tries to look up the price, but there is no key; the sid doesn't exist, or something like that. Maybe a brute-force try-except? Anyway, for me, the broker use case is not of concern presently; just thought I'd point it out, since it came to mind.