2016-12-25 4 views
0
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.filters.morningstar import Q1500US 
from quantopian.pipeline.factors import AnnualizedVolatility 
from quantopian.pipeline.factors.morningstar import MarketCap 
from quantopian.pipeline import factors, filters, classifiers 

Market_Cap=(MarketCap > 1000000000) 

def lowvolport(): 
    return filters.make_us_equity_universe(
    target_size=50, 
    rankby=factors.AnnualizedVolatility(window_length=90), 
    mask=Market_Cap, 
    ) 

def initialize(context): 
    # Schedule our rebalance function to run at the start of each week. 
    schedule_function(my_rebalance, date_rules.week_start(),    time_rules.market_open(hours=1)) 

    # Record variables at the end of each day. 
    schedule_function(my_record_vars, date_rules.every_day(), time_rules.market_close()) 

    # Create our pipeline and attach it to our algorithm. 
    my_pipe = make_pipeline() 
    attach_pipeline(my_pipe, 'my_pipeline') 

def make_pipeline(): 
    """ 
    Create our pipeline. 
    """ 

    # Base universe set to the Q1500US. 
    base_universe = Q1500US() 

    Market_Cap = (MarketCap > 1000000000) 
    # Filter to select securities to long. 
    volatility_bottom = AnnualizedVolatility(inputs=[USEquityPricing.close], window_length=90, mask=base_universe) 

    volatility_bottom_50=volatility_bottom.bottom(50) 

    # Filter for all securities that we want to trade. 
    securities_to_trade = (Market_Cap & volatility_bottom_50) 

    return Pipeline(
    columns={ 
     'Market_Cap': Market_Cap 
    }, 
    screen=(securities_to_trade), 
    ) 

def my_compute_weights(context): 
    """ 
    Compute ordering weights. 
    """ 
    # Compute even target weights for our long positions and short positions. 
    long_weight = 0.5/len(context.longs) 
    short_weight = -0.5/len(context.shorts) 

    return long_weight, short_weight 

def before_trading_start(context, data): 
    # Gets our pipeline output every day. 
    context.output = pipeline_output('my_pipeline') 

    # Go long in securities for which the 'longs' value is True. 
    context.longs = context.output[context.output['longs']].index.tolist() 

    # Go short in securities for which the 'shorts' value is True. 
    context.shorts = context.output[context.output['shorts']].index.tolist() 

    context.long_weight, context.short_weight = my_compute_weights(context) 

def my_rebalance(context, data): 
    """ 
    Rebalance weekly. 
    """ 
    for security in context.portfolio.positions: 
    if security not in context.longs and security not in context.shorts and data.can_trade(security): 
     order_target_percent(security, 0) 

    for security in context.longs: 
    if data.can_trade(security): 
     order_target_percent(security, context.long_weight) 

    for security in context.shorts: 
    if data.can_trade(security): 
     order_target_percent(security, context.short_weight) 

def my_record_vars(context, data): 
    """ 
    Record variables at the end of each day. 
    """ 
    longs = shorts = 0 
    for position in context.portfolio.positions.itervalues(): 
     if position.amount > 0: 
      longs += 1 
     elif position.amount < 0: 
      shorts += 1 

    # Record our variables. 
    record(leverage=context.account.leverage, long_count=longs, short_count=shorts) 

Привет всем, я новичок в python с некоторыми навыками Matlab. Код - это то, что я недавно сделал в Quantopian. Сообщение об ошибкеAttributeError: объект 'bool' не имеет атрибута 'ndim'

AttributeError: 'bool' object has no attribute 'ndim' 
    There was a runtime error on line 27. 

27-й линии

 my_pipe = make_pipeline() 

выше мой первый вопрос. Мой второй вопрос заключается в том, что на основе существующего алгоритма, как я могу выполнить модель VAR через каждые три месяца, используя формулу

Yt = a0 + a1Yt-1 + ..... + apYt-p + b1Xt-1 + ..... + bpXt-p + ut 

с Yt является возврат в течение 90 дней и Xt-1, ..., Xt-p - лаги волатильности?

Благодарим заранее! Пожалуйста, дайте мне знать, нужно ли указывать какие-либо детали.

+0

Пожалуйста, правильно отложите свой код и опубликуйте полную трассировку стека для сообщения об ошибке, которое вы получаете. –

+0

Просто исправьте отступ, но из Quantopian IDE мне не удалось увидеть «полную трассировку стека» для сообщения об ошибке. Пожалуйста, предложите, если что-нибудь я пропустил. –

+0

Ваше сообщение об ошибке состояло не более чем из этих двух строк? –

ответ

0

Вы отсутствуете скобки в строке 38 при инициализации фактора Капитализации:

Market_Cap = (MarketCap() > 1000000000)

После этого вы получите исключение KeyError в строке 69, потому что вы не добавили «тоскует» к выходу вашего трубопровода (то же самое для «шорт»).

Смежные вопросы