Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Scheduling Function using minute data

I would like to use the schedule function to buy/sell just one time per day, every day. Below is the code I have written to do this. When I run it, it works using daily data. When I switch to minute data, handle data is called every minute instead of every day. What should I change in the code? Thanks for your help!

def initialize(context):  
        # Rebalance daily at market open  
    schedule_function(handle_data, date_rule=date_rules.every_day(),  
                      time_rule=time_rules.market_open(minutes = 15))  
    context.switch = True  
    #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.  

    if context.switch == True:  
        order_target_percent(sid(8554), 1)  
        context.switch = False  
    else:  
        order_target_percent(sid(8554), -1)  
        context.switch = True  

    record(leverage = context.account.leverage)  
    # track how many positions we're holding  
    record(num_positions = len(context.portfolio.positions))  
4 responses

Hi Ujae,

The handle_data method name is reserved and is called either every day or every minute depending on which mode you run the code in. If you would like to schedule a function to run once a day, regardless of the mode you are in, all you have to do is change your code to look like this:

def initialize(context):  
        # Rebalance daily at market open  
    schedule_function(rebalance, date_rule=date_rules.every_day(),  
                      time_rule=time_rules.market_open(minutes = 15))  
    context.switch = True  
    #pass

#reserved function name, don't want it to do anything  
def handle_data(context, data):  
    pass

# Will be called on every trade event for the securities you specify.  
def rebalance(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.  

    if context.switch == True:  
        order_target_percent(sid(8554), 1)  
        context.switch = False  
    else:  
        order_target_percent(sid(8554), -1)  
        context.switch = True  

    record(leverage = context.account.leverage)  
    # track how many positions we're holding  
    record(num_positions = len(context.portfolio.positions))  

This should do the trick!

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.

Thank you very much!

For convenience, I've run a backtest using this code so others can clone the algorithm if they would like.

Hi Jamie,

Sorry for the dumb questions. I am a beginner the Q.

I want to execute the trades whenever the specified criteria meets in the algorithm. As per the Quantopian2, the open positions will be closed at the end of the every trading day. But i want to execute the trades as below.
1) How to Execute the trades with an interval of 1 min or 5 min or 15 min when the specified condition has been met? Does it needs the Scheduler_function (rebalance) ?
2) Can we execute the trades with in a minute like 15 s or 30 s range?
3) How can I Sell or Cover all the positions at the end of the every trading day (even if does not meet my criteria - as i do not want to hold overnight) ?

Thanks for the help.