Quantopian 纳斯达克Top20 市值加权

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

 

http://www.waitingfy.com/archives/5462

5462

Leave a Reply

Name and Email Address are required fields.
Your email will not be published or shared with third parties.