Something very similar and may help you:
from quantopian.algorithm import attach_pipeline, pipeline_output
from quantopian.pipeline.filters import StaticAssets
from quantopian.pipeline import Pipeline
import quantopian.pipeline.factors as Factors
# --------------------------------------------------------------------
ASSETS, MOM, N, LEV = symbols('SPY', 'XLV', 'TLT', 'IEF'), 80, 2, 1.0
# --------------------------------------------------------------------
def initialize(context):
schedule_function(trade, date_rules.month_start(), time_rules.market_open(minutes = 65))
m = StaticAssets(ASSETS)
momentum = Factors.Returns(window_length = MOM + 1, mask = m)
pipe = Pipeline(columns = {'Momentum': momentum}, screen = m)
attach_pipeline(pipe, 'pipeline')
def before_trading_start(context, data):
output = pipeline_output('pipeline')
output.sort_values(['Momentum'], ascending = False, inplace = True)
context.etfs = output.head(N).index
record(leverage = context.account.leverage, num_positions = len(context.portfolio.positions))
def trade(context, data):
if get_open_orders(): return
weight = LEV/len(context.etfs)
for etf in context.portfolio.positions:
if data.can_trade(etf):
if etf not in context.etfs:
order_target(etf, 0)
for etf in context.etfs:
if data.can_trade(etf):
order_target_percent(etf, weight)