Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Minute backtest differs greatly from Daily backtest

I'm building a basic algorithm based off of manual trades I made last month. The daily backtest comes close, but misses a few trades. While the minute backtest goes beserk. Could someone point me in the right direction as to why this is happening? Thanks.

5 responses

Here is the daily backtest:

Hi Mandeep,

There are a few reasons why your minutely backtest differs greatly from the daily backtest. The biggest is that in minutely mode, your code in handle_data is executing every minute versus in daily mode where your code is executing everyday. So in daily mode, you're ordering once per day, but in minutely mode (potentially) you're ordering every minute.

The other reason why this can differ is that daily mode executes your orders, at the fastest, at the close price of the next day. I would suggest a read through this thread: https://www.quantopian.com/posts/trade-at-the-open-slippage-model for more information.

Anyways, a good way to go about modeling a daily algo in minutely mode is to use our schedule_function (https://www.quantopian.com/posts/announcement-new-schedule-function-method-allows-you-to-specify-when-a-function-runs) method to run your code at the end of day, everyday.

You can see an example attached to this post.

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.

Hi Seong Lee,

Thanks for the response. I think you're right in that I might have to introduce the schedule function into my code. What confuses me is that with the shares = int(cash / currentprice) line, shouldn't this stop orders from being placed every minute in a minute backtest? In my minute backtest, it looks like orders are being placed regardless of how much cash the portfolio contains. I imagine if I were to set a schedule to trade at certain times, the minute backtest would behave the same way. Does the minute backtest behave different than I think it does?

In the original, this would have prevented the runaway as it was ordering again before the previous minute's order was filled.

def handle_data(context, data):  
    if get_open_orders():  
        return  

Thanks Gary, that was exactly what was missing. Hopefully this helps others in the future with the same problem.