This code may be helpful in IDE (Research --> Algorithms) to accomplish what you specified.
from quantopian.pipeline.factors import SimpleMovingAverage as SMA, MarketCap
from quantopian.pipeline.data.builtin import USEquityPricing as USEP
from quantopian.algorithm import attach_pipeline, pipeline_output
from quantopian.pipeline.filters import QTradableStocksUS, Q500US
from quantopian.pipeline import Pipeline
# --------------------------------------
MA_F = 5; MA_S = 10; N = 4 ;
# --------------------------------------
def initialize(context):
schedule_function(my_rebalance,date_rules.every_day(), time_rules.market_close(minutes = 30), True)
mcap = MarketCap(window_length = 1, mask = QTradableStocksUS())
sma_f = SMA(inputs = [USEP.close], window_length = MA_F)
sma_s = SMA(inputs = [USEP.close], window_length = MA_S)
longs = (sma_f > sma_s)
screen = QTradableStocksUS() & (longs) & mcap.top(N)
attach_pipeline(Pipeline({'longs': longs}, screen), 'my_pipe')
def my_rebalance(context,data):
output = pipeline_output('my_pipe')
longs = output[output['longs']].index
for sec in context.portfolio.positions:
if sec not in longs:
order_target_percent(sec, 0)
for sec in longs:
wt = 1.0/len(longs) if len(longs) > 0 else 0
order_target_percent(sec, wt)