Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
New here - Need help with some basic stuff

Hi there,

Needs some help with this kind of cording.

This is what I want to do.

  1. Buy 1000 AAPL at market price.
  2. Sell 1000 AAPL at market price + .25

I should not buy another 1000 AAPL unless I sell the existing 1000.
Currently the software keeps buying 1000 APPL without checking if there is any sell order or not.

Thank you for your help

# Put any initialization logic here.  The context object will be passed to  
# the other methods in your algorithm.  
def initialize(context):  
    pass

# Will be called on every trade event for the securities you specify.  
def handle_data(context, data):  
    # Implement your algorithm logic here.

    # data[sid(X)] holds the trade event data for that security.  
    # context.portfolio holds the current portfolio state.

    # Place orders with the order(SID, amount) method.

    # TODO: implement your own logic here.  
    order(sid(24), 1000)  
    filled_price = context.portfolio.positions[sid(24)].cost_basis  
    log.info(str(filled_price))  
    order(sid(24), -1000, style=LimitOrder(filled_price+ .25))  
4 responses

To tell if the sell order gets filled or not, you can use this function:

get_open_orders()  

For me I will simply do :

if bool(get_open_orders()):  
    # the selling order is still there  
    pass  
else:  
    # the selling order is gone  
    pass  

thank you will incorporate this and see if i can get the results.. thanks again

Hi Roshan,

The code in your handle_data method is called on every minute/day (depending on the frequency you choose) of your backtest. This means that if you only want to order under certain circumstances, you need to build that logic into your handle_data method. If I understand your post correctly, you only want to be ordering if you don't currently hold a position in AAPL. As you've already noticed, you can query the state of your portfolio by inspecting context.portfolio.positions. Maybe you want something like the following:

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.

Jiaming, FYI, you don't need to call to bool in your example, you can just do:

if get_open_orders():  

In general, for just about any Python expression, doing
if bool(expression): is equivalent to just doing
if expression: