Back to Community

It seems like every time I make an algorithm I break Quantopian. I'm pretty sure you can't have a return under -100%. Please tell me what I'm doing wrong.

Clone Algorithm
Total Returns
Max Drawdown
Benchmark Returns
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
This is a template algorithm on Quantopian for you to adapt and fill in.
from quantopian.algorithm import attach_pipeline, pipeline_output
from quantopian.pipeline import Pipeline
from import USEquityPricing
from quantopian.pipeline.factors import AverageDollarVolume, Returns
def initialize(context):
    context.returns_lookback = 2
    Called once at the start of the algorithm.
    # Rebalance every day, 1 hour after market open.
    schedule_function(my_rebalance, date_rules.every_day(), time_rules.market_open(hours=2))
    # Record tracking variables at the end of each day.
    schedule_function(my_record_vars, date_rules.every_day(), time_rules.market_close())
    # Create our dynamic stock selector.
    attach_pipeline(make_pipeline(context), 'my_pipeline')
def make_pipeline(context):
    A function to create our dynamic stock selector (pipeline). Documentation on
    pipeline can be found here:
    dollar_volume = AverageDollarVolume(window_length=1)
    high_dollar_volume = dollar_volume.percentile_between(95, 100)
    recent_returns = Returns(window_length=context.returns_lookback, mask=high_dollar_volume)
    high_returns = recent_returns.percentile_between(90, 100)
    pipe_columns = {
    pipe_screen = high_returns
    pipe = Pipeline(
        screen = pipe_screen,
        columns = pipe_columns
    return pipe
def before_trading_start(context, data):
    Called every day before market open.
    context.output = pipeline_output('my_pipeline')
    context.long_secs = context.output[context.output['high_returns']]

    # These are the securities that we are interested in trading each day.
    context.security_list = context.long_secs.index.tolist()
    context.security_set = set(context.security_list)
def my_assign_weights(context, data):
    Assign weights to securities that we want to order.
def my_rebalance(context,data):
    Execute orders according to our schedule_function() timing. 
    for stock in context.security_list:
        if data.can_trade(stock):
            if stock in context.long_secs.index:
                order_target_percent(stock, 5)
    for stock in context.portfolio.positions:
        if stock not in context.security_set and data.can_trade(stock):
            order_target_percent(stock, 0)
def my_record_vars(context, data):
    Plot variables at the end of each day.
def handle_data(context,data):
    Called every minute.
There was a runtime error.
2 responses

Make sure you are not somehow leveraging and buying more than your initial capital amount. I see you are using order_target_percent which generally prevents that from happening, but you are just indicating to always use 5% of your capital as the parameter- if I had to guess, you have more than 20 stocks in your list at times, and are thus buying with more than 100% of your capital. Change that 5 to 1/len(context.long_secs.index) and see if that helps.

Hi Brandon,

If you pass a 5 as the second argument to order_target_percent, it will order up to a target of 500% of your portfolio value. You probably wanted 5% which would be 0.05. Check out this tutorial lesson on ordering for more info.


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.