Back to Community
Trouble with selling positions

Hi,
I'm new to quantopian and am having trouble understanding what is happening when I close a position.

def initialize(context):  
    context.security_list=[sid(17009),sid(8014)]  
    context.track=0  
def handle_data(context,data):  
    if context.track==0:  
        order_target_percent(context.security_list[1],1)  
        print "Buy"  
    context.track=context.track+1  
    if context.track>5000:  
        sell_it_all(context,data)  

def sell_it_all(context, data):  
    for stock in context.portfolio.positions:  
        # Note. Use 0 as the target percent not -1  
        order_target_percent(stock, 0.0)  

This is the code I have just to try understand it. I initially buy stock and after 5000 bars (randomly selected time frame) I want to sell it all.
When I do this I expected the graph to stop moving as seeing as I am not buying anything more and I sold all my positions but the value of the portfolio still changes.
Am I missing something?

Loading notebook preview...
Notebook previews are currently unavailable.
1 response

Welcome to Quantopian!

The problem with your algorithm is that it's placing way more orders than you think. handle_data() runs every minute, so once your content.track hits 5000, you start placing an order every minute. The order is too big to fill in a minute, so you're in this runaway situation where orders are being placed on top of each other willy-nilly without your portfolio ever getting to a stable state. One way to handle this have sell_it_allcheck for open orders and exit if there are open orders present.

A better way to handle it, though, is to get in the habit of using the Optimize API. With optimize you pass in your desired portfolio and your constraints, and the API does all the order management for you. You avoid all of the annoying order management stuff like you're running into here. I'm attaching a backtest that looks mostly like your code, but changes the order method.

Note that in this algo we're still doing all of the ordering in handle_data which isn't recommended - you should put it into a schedule_function and run it daily or something. But for the sake of this example I left it alone.

Clone Algorithm
3
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
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
# Backtest ID: 59e8e3e20d3eb741159ea378
There was a runtime error.
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.