如何在python pandas中执行简单的信号回测

时间:2014-07-22 10:04:10

标签: python numpy pandas finance quantitative-finance

我想通过提供购买信号作为DatetimeIndex来检查大熊猫的简单快速回测,以检查ohlc引用DataFrame(调整后的收盘价)并且我不确定我是否正确这样做。

要明确我想在整个持有期间计算所有交换买入信号(以及股票收益?)的累积回报。之后我想通过一个简单的锐化函数比较几个计算。这是在熊猫中快速轻松地测试购买信号的正确方法吗?

非常感谢任何帮助!

信号:

In [216]: signal
Out[216]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2000-08-21, ..., 2013-07-09]
Length: 21, Freq: None, Timezone: UTC

OHLC:

In [218]:
df.head()
Out[218]:
open    high    low close   volume  amount
Date                        
2000-01-14 00:00:00+00:00    6.64    6.64    6.06    6.08    74500   4.91
2000-01-17 00:00:00+00:00    6.30    6.54    6.25    6.40    45000   5.17
2000-01-18 00:00:00+00:00    7.56    8.75    7.51    8.75    250200  7.07

后台测试:

analysis = pd.DataFrame(index=df.index)
#calculate returns of adjusted close price
analysis["returns"] = df['amount'].pct_change()
#set signal returns to quote returns where there is a signal DatetimeIndex and ffill
analysis["signal"] = nan
analysis["signal"][signal] = analysis["returns"][signal]
analysis["signal"] = analysis["signal"].fillna(method="ffill")
#calculation of signal returns
trade_rets = analysis["signal"].shift(1)*analysis["returns"]

预期结果(buy_returns的值不正确):

Out[2]:
returns buy_returns
Date        
2000-08-21 00:00:00+00:00    -0.153226  -0.076613
2001-02-12 00:00:00+00:00    0.000000    0.000000
2002-10-29 00:00:00+00:00    0.246155    0.030769
2003-02-12 00:00:00+00:00    0.231884    0.014493
2003-03-12 00:00:00+00:00    1.548386    0.048387

我的问题是如何计算一个返回系列来表示熊猫中提供的买入信号(真/假系列或日期时间指数)的强度?

1 个答案:

答案 0 :(得分:1)

您没有足够的信息来进行回溯测试。你的战略&#34;目前只有正确或错误。如果它是真的,你想买多少?如果它连续两次成为真,这是否意味着买入并持有或两次买入? False意味着清算还是不清算?

你需要:

  1. 将您的信号转换为t&#34;
  2. 中保存的数量
  3. 然后检查持有该数量的结果是
  4. 不要忘记进行基准测试
  5. 在做(2)时,我认为你的问题的重点在于,不要专注于速度,只需制作一个直观的迭代模拟器,迭代时间,做你说的,并有一个新的整体价值。对于您正在查看的数据大小而言,任何从熊猫中变得更加复杂的加速都不会眨眼间。