from quantopian.pipeline import Pipeline from quantopian.algorithm import attach_pipeline, pipeline_output from quantopian.pipeline.data.builtin import USEquityPricing from quantopian.pipeline.factors import SimpleMovingAverage from quantopian.pipeline.classifiers.morningstar import Sector from quantopian.pipeline.data import morningstar as morningstar from quantopian.pipeline.filters.morningstar import Q500US, Q1500US from quantopian.pipeline.factors.morningstar import MarketCap from quantopian.pipeline.data import Fundamentals import quantopian.algorithm as algo def make_pipeline(): exchange = Fundamentals.exchange_id.latest nyse_filter = exchange.eq('NAS') #q500 = Q500US() q1500 = Q1500US() mktcap = MarketCap() sector = morningstar.asset_classification.morningstar_sector_code.latest mkt_cap = morningstar.valuation.market_cap.latest pipe = Pipeline() attach_pipeline(pipe, 'pipeline_tutorial') pipe.add(Sector(), 'Sector') pipe.add(mktcap, 'mktcap') pipe.add(exchange, 'exchange') pipe.set_screen(q1500 & nyse_filter) return pipe def initialize(context): set_benchmark(symbol('QQQ')) algo.schedule_function( rebalance, algo.date_rules.month_start(), algo.time_rules.market_open(hours=1), ) algo.attach_pipeline(make_pipeline(), 'pipeline') context.buy_stock_count = 20 context.leverage = 1.0 #context.buy_stock_percent = float(context.leverage / context.buy_stock_count) cash = context.portfolio.cash context.purchase_value = cash / context.buy_stock_count context.stocks_sold = [] def before_trading_start(context, data): output = pipeline_output('pipeline_tutorial') context.my_universe = output.sort('mktcap', ascending=False).iloc[0:context.buy_stock_count] def rebalance(context, data): """ Execute orders according to our schedule_function() timing. """ if True: for stock in context.my_universe.index: buy_stock_percent = context.my_universe["mktcap"][stock] / context.my_universe["mktcap"].sum() order_target_percent(stock, buy_stock_percent * context.leverage) for stock in context.portfolio.positions: if stock not in context.my_universe.index: order_target_value(stock, 0) pass
5462