【发布时间】:2020-03-11 18:48:59
【问题描述】:
我正在使用 Pandas 计算证券价格的布林带。我使用 20 天平均收盘价和两个标准差 +/- 该值来计算波段。
在使用 pandas .rolling().std(); 时,我注意到我的计算值与第三方数据提供商报告的值之间存在差异;在“手动”(逐步)计算 stdev 时,我能够重现与第三方网站一致的值,并且与使用 .rolling.std() 在相同数据上计算的值类似地不同。
下面给出了数据的一个子集,包括两组计算; “手动”和熊猫“滚动”。我的代码中是否存在导致 pandas 滚动数据发生变化的内容?
close_values = {'close': [88.64, 87.02, 88.7, 89.89, 90.93, 90.4, 90.21, 90.16, 90.94, 91.93,
90.26, 85.5, 81.89, 82.18, 78.31, 75.65, 79.61, 76.55, 80.41, 77.87]}
df = pd.DataFrame(close_values)
df['period_mean'] = df['close'].mean()
df['abs_^2_var'] = (np.abs(df['close'] - df['period_mean'])) ** 2
df['stdev_man'] = np.sqrt(df['abs_^2_var'].rolling(20).mean())
df['stdev_roll'] = df['close'].rolling(20).std()
df['BolU_man'] = round(df['period_mean'] + (df['stdev_man'] * 2), 4)
df['BolL_man'] = round(df['period_mean'] - (df['stdev_man'] * 2), 4)
df['BolU_roll'] = round(
df['close'].rolling(20).mean() + (2 * (df['close'].rolling(20).std())), 4)
df['BolL_roll'] = round(
df['close'].rolling(20).mean() - (2 * (df['close'].rolling(20).std())), 4)
print(df)
这是上面的输出:
close period_mean abs_^2_var stdev_man stdev_roll BolU_man BolL_man \
0 88.64 85.3525 10.807656 NaN NaN NaN NaN
1 87.02 85.3525 2.780556 NaN NaN NaN NaN
2 88.70 85.3525 11.205756 NaN NaN NaN NaN
3 89.89 85.3525 20.588906 NaN NaN NaN NaN
4 90.93 85.3525 31.108506 NaN NaN NaN NaN
5 90.40 85.3525 25.477256 NaN NaN NaN NaN
6 90.21 85.3525 23.595306 NaN NaN NaN NaN
7 90.16 85.3525 23.112056 NaN NaN NaN NaN
8 90.94 85.3525 31.220156 NaN NaN NaN NaN
9 91.93 85.3525 43.263506 NaN NaN NaN NaN
10 90.26 85.3525 24.083556 NaN NaN NaN NaN
11 85.50 85.3525 0.021756 NaN NaN NaN NaN
12 81.89 85.3525 11.988906 NaN NaN NaN NaN
13 82.18 85.3525 10.064756 NaN NaN NaN NaN
14 78.31 85.3525 49.596806 NaN NaN NaN NaN
15 75.65 85.3525 94.138506 NaN NaN NaN NaN
16 79.61 85.3525 32.976306 NaN NaN NaN NaN
17 76.55 85.3525 77.484006 NaN NaN NaN NaN
18 80.41 85.3525 24.428306 NaN NaN NaN NaN
19 77.87 85.3525 55.987806 5.495136 5.63789 96.3428 74.3622
BolU_roll BolL_roll
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 NaN NaN
10 NaN NaN
11 NaN NaN
12 NaN NaN
13 NaN NaN
14 NaN NaN
15 NaN NaN
16 NaN NaN
17 NaN NaN
18 NaN NaN
19 96.6283 74.0767
【问题讨论】:
标签: python pandas standard-deviation rolling-computation