3

私は現在、コーセラ計算金融の宿題 2 に取り組んでいます。

この行を実行している間:

ep.eventprofiler(df_events, d_data, i_lookback=20, i_lookforward=20,
            s_filename=report_filename, b_market_neutral=True, b_errorbars=True,
            s_market_sym='SPY')

エラーが発生します:

anaconda/lib/python2.7/site-packages/pandas/indexes/base.py:2397: RuntimeWarning: Cannot compare type 'Timestamp' with type 'str', sort order is undefined for incomparable objects
  return this.join(other, how=how, return_indexers=return_indexers)

これはpdfファイルを作成し、発生したイベントの数を示しますが、実際にはイベントを描画しません。なぜこれが起こるのか分かりません。私はパンダ0.18.0を使用しています

何か案は?助けてくれてありがとう。

df_events.dtypes サンプル:

ALTR    float64
ALXN    float64
AMAT    float64
AMD     float64
AMGN    float64
AMP     float64
AMT     float64
         ...
WDC     float64
WEC     float64
WFC     float64
WFM     float64
WHR     float64
WIN     float64
WLP     float64
WM      float64
WMB     float64
WMT     float64
XLNX    float64
XOM     float64
XRAY    float64
XRX     float64
XYL     float64
YHOO    float64
YUM     float64
ZION    float64
ZMH     float64
SPY     float64
dtype: object

d_data.dtypes ログのサンプルは次のとおりです。

           YHOO    YUM   ZION    ZMH     SPY
2008-01-02 16:00:00  23.72  37.88  45.29  66.29  144.93
2008-01-03 16:00:00  23.84  37.35  44.38  66.36  144.86
2008-01-04 16:00:00  23.16  36.82  42.40  66.50  141.31
2008-01-07 16:00:00  23.18  37.68  43.28  68.66  141.19

私は得る

 d_data.dtypes
*** AttributeError: 'dict' object has no attribute 'dtypes'

d_data dtypes を印刷しようとすると。

4

3 に答える 3

4

問題は次の行によって引き起こされます。

df_rets = df_rets - df_rets[s_market_sym]

これらの数行で:

if b_market_neutral == True:
    df_rets = df_rets - df_rets[s_market_sym]
    del df_rets[s_market_sym]
    del df_events[s_market_sym]

機能中eventprofiler(...)。率直に言って、この行はバグであり、少なくともコメントとして記載する必要があると思います-背後にあるロジックが私の理解を逃れているためです。他の人は大丈夫です。

引数b_market_neutralFalseに設定すると、見栄えの良いグラフが得られますが、平均リターンを計算する際に SPY 市場データも考慮されます。したがって、平均値を計算するときに「適切な」ロジックを使用するための回避策は、この行にコメントを付けて、この変更を加えて QSTK を再コンパイルすることです。

お役に立てれば。

よろしく、ダニエル

于 2016-08-17T17:09:46.890 に答える
3

@DanielTC問題がどこにあったかを指摘してくれてありがとう、私はそれを確認することができます.

ロジックは、個々の株式の毎日のリターンから市場のリターンを差し引く必要があるため、株式が得た/失ったものだけが残るということだと思います

私はこのようにそれを解決しました:

if b_market_neutral is True:
    # it fails here: df_rets = df_rets - df_rets[s_market_sym]
    df_rets = df_rets.sub(df_rets[s_market_sym].values, axis=0) # this works
    del df_rets[s_market_sym]
    del df_events[s_market_sym]
于 2016-09-25T14:06:07.420 に答える