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' object has no attribute 'ndim'
    There was a runtime error on line 27.

27行目は

        my_pipe = make_pipeline()

上記は私の最初の質問です。2 番目の質問は、既存のアルゴリズムに基づいて、式を使用して 3 か月ごとに VAR モデルを実行するにはどうすればよいかということです。

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

Yt は 90 日間のリターンで、Xt-1、...、Xt-p はボラティリティのラグですか?

少し早いですがお礼を!詳細を指定する必要がある場合はお知らせください。

4

1 に答える 1

0

MarketCap ファクターを初期化するときに、38 行目にかっこがありません。

Market_Cap = (MarketCap() > 1000000000)

その後、パイプラインの出力に「ロング」を追加していないため (「ショート」も同様)、69 行目で KeyError が発生します。

于 2016-12-27T18:00:39.643 に答える