Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Add and remove securities using an external file, fetcher

In live trading I want to be able to use a csv file to determine which stocks are being traded where any stock that disappears from the list (because I removed it from the csv source) will simply be prohibited from buying (only) and will continue in the algo until it is all sold based on the rules (when conditions were right to sell) and any new stock symbols not seen before will be added. Then no need to stop/restart to make changes. Since the removal of one is a phase-out, unless I'm mistaken the built-in universe_func won't do, because a stock being phased out would suddenly not appear in data to be able to sell off properly.

Basically, from the outside world I want to populate:

    context.phase_out_list = []  

Can this be done?

Thanks in advance.

2 responses

Hi Gary,

This is an interesting use-case of fetcher and has come up a few times before. My go-to strategy at this point is to call fetcher twice, once to populate the universe and another to keep track of what dates I want to keep my positions in the stocks (or indicate a phase_out_list) in this case. So your CSV should include the date at which you want to add it to the phase_out_list.

So an example would go like this:

def pre_func(df):  
    #: Create a copy of the date column  
    df['phase_out_date'] = df['date']  
    return df

def initialize(context):

    #: Set my universe  
    fetch_csv(url,  
        pre_func=pre_func,  
        universe_func=my_universe)

    #: Call the same url again because we need to keep track of our phase out dates  
    fetch_csv(url,  
            pre_func=pre_func)  
    context.phase_out_list = []

def handle_data(context, data):  
    #: If the current datetime matches the phase out time, add it to the context.phase_out_list  
    for stock in data:  
        if data[stock]['phase_out_list'] == get_datetime():  
            context.phase_out_list.append(stock)  

If you can try modifying the template above to match your code, give it shot, and come back to me with any questions/errors so we can work it out

  • Seong
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.

Ok thank you for helping propel things forward.

Yes! The universe can be controlled remotely via csv. The source tab in this backtest has quite a bit of information, it is fairly simple.