Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Initial / Starting values

I would like to compare my algorithm back test directly against my real world results over the same time period. Ideally, I could set an initial position amount and cost basis to go along with the starting cash.

I tried to update the relevant values in the initialize function, but they seem to be ignored or discarded.

Is what I'm trying to do currently possible?

6 responses

Hi KV,

You will need to set your ordering logic in the handle_data() function. The initialize() function gets called only once, in the first bar of the algorithm, to setup your variables. You need to setup your stock in the intialize() method using context. Context is augmented Python dictionary used for holding state between methods.

You can also define your slippage and commission models in the initialize function. By default, the simulation will transact up to 25% of the total volume in the bar. And the commission is set to $0.03 per share. You can easily change these settings to better fit your strategy, or create your own custom models all together.

As you begin to develop your algorithm, take a look at the ordering types. I would suggest to use order_target, order_target_percent, or order_target_value, which will help prevent from taking an over-leveraged position.

I've attached a basic algorithm that shows how to setup these variables. If you need help on a specific algo, feel free to invite me via collab, my email is [email protected]. We can get you going as soon as possible!

Cheers,
Alisa

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.

(Haven't been able to get back to this until now.)

Thanks for the response, but it didn't particularly address my issue. Perhaps I didn't word it clearly...

I would like the starting values for these to be set at certain values (example):
context.portfolio.positions[sid(3241)].amount = 500
context.portfolio.positions[sid(3241)].cost_basis = 13.27

I've tried different things to get these values to stick, but they are ignored and/or presumed to be 0. In my algorithm backtest, the first action triggers a sale of 123 shares. The next pass through shows context.portfolio.positions[sid(3241)].amount to be -123 rather than 377.

I can understand if this is something I cannot do, but it would be handy. Then I could more easily see that my algorithm was behaving like my real-world trades...

Thanks,
K

Hello KV BA,

To my knowledge, you can't start a backtest with anything other than a cash position.

Grant

Grant is correct, the backtester allows you to initialize only your starting cash position. It doesn't handle cases very well where you start with an existing portfolio or try to deposit a monthly sum to the account. This is one of the rough edges of the system. When we built the backtester, we created a system where you set the initial cash parameters of your strategy code and then see what happens.

I suppose I should be able to force an initial purchase, and keep track of the cost basis in a different variable (not that I'm sure I'm going to use cost basis anymore).

Thanks for the confirmation.