我目前正致力于课程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文件,显示已发生但未实际绘制事件的事件数。我不确定为什么会这样。我正在使用pandas 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时。
答案 0 :(得分: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_neutral
设置为False
,它会为您提供一个漂亮的图表,但在计算平均回报时也会考虑SPY市场数据。因此,为了在计算平均值时使用“正确”逻辑,解决方法是对此行进行注释并使用此修改重新编译QSTK。
希望这有帮助。
此致 丹尼尔
答案 1 :(得分: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]
答案 2 :(得分:1)
@Atti,你是对的。
pandas.core.frame.DataFrame
Expression df - df['A'] is deprecated after pandas release 0.15.2
Warning
df - df['A']
is now deprecated and will be removed in a future release. The preferred way to replicate this behavior is df.sub(df['A'], axis=0)