2016-12-25 13 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) 

こんにちは皆、私はいくつかのMatlabの経験を持つPythonには初めてです。コードは私がQuantopianで最近したものです。エラーメッセージが27行は、上記AttributeError: 'bool'オブジェクトには属性 'ndim'がありません

 my_pipe = make_pipeline() 

をである私の最初の質問です

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

です。 私の2番目の質問は、既存のアルゴリズムに基づいて、どのように私は式

Ytは、90日とXT-1以上のリターンであることと
Yt = a0 + a1Yt-1 + ..... + apYt-p + b1Xt-1 + ..... + bpXt-p + ut 

を使用して3ヶ月ごとに上VARモデルを実行できる、ということです、...、 Xt-pはボラティリティのラグですか?

ありがとうございます!詳細を指定する必要がある場合は、私にお知らせください。

+0

コードを正しくインデントし、取得しているエラーメッセージの完全なスタックトレースを投稿してください。 –

+0

インデントを修正するだけですが、Quantopian IDEからエラーメッセージの「完全なスタックトレース」が表示されませんでした。私が逃したものがあればお勧めします。 –

+0

エラーメッセージは、これらの2行以上で構成されていませんか? –

答えて

0

MarketCap係数を初期化するときは、ライン38上のかっこが欠落しています。その後

Market_Cap = (MarketCap() > 1000000000)

を追加していないので、あなたがライン69でKeyError例外を取得します(あなたのパイプラインの出力に「憧れます」 「ショート」と同じ)。

関連する問題