Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Clarification on Docs for handle_data()...

In testing I've been lead to believe that the initialize() method will be called once, at the start of the test and then handle_data() will be called every minute thereafter.

the docs, however, state handle_data() is "Called whenever a market event occurs for any of your algorithm's specified securities."

Does this mean that, for example, if a sale on an open order is executed that handle_data() will get called? Or should I only be thinking of this method as a once-every-minute operation?

Also, regarding initialize()... the docs mention when "backtesting" the method will be called once. When live trading, will this actually be called at the start of each day, or is the state maintained forever until the algo is terminated so that it is only called once?

4 responses

Initialize() is called only once upon first deploy both in backtesting and live trading. This function is used to setup your variables. In live trading, if your algorithm has a fetcher call, your file will be retrieved every day because we don't save a copy of your data.

Handle_data() is called once per market event. This means it will pull new data for your securities whenever it's available. For liquid stocks (APPL, SPY, etc) handle_data will get called every minute because there is trade data to be processed. These stocks trade every minute. For illiquid stocks, handle_data will get called less frequently, maybe once every couple of minutes, when there is new trade data for the securities.

If you are using illiquid stocks, but want to make sure handle_data gets called every minute (for whatever reason, perhaps your algorithm design), you can include SPY in your stock universe.

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.

Hello Alisa,

What if the call to fetcher is within iniitialize()? Will it only get called once under live trading?

Grant

In live trading, initialize() is only called once when you first launch the algorithm. The specific fetcher call is made every day in the early hours before market open to retrieve your file since we don't store a copy. I realize this may be a bit confusing, and frankly not very elegant, and we're thinking of architectural solutions to make this behavior to be more consistent.

Comment: maybe putting fetchers in before_trading_start now instead of initialize?

Q: for daily algos, when does handle_data get called? is it before market open?

Thanks,