【问题标题】:Pandas rolling standard deviation熊猫滚动标准差
【发布时间】:2017-04-06 03:47:44
【问题描述】:

还有其他人对 pandas 中的新 rolling.std() 有问题吗?不推荐使用的方法是rolling_std()。新方法运行良好,但会产生一个不随时间序列滚动的常数。

示例代码如下。如果您交易股票,您可能会认出布林带的公式。我从rolling.std() 得到的输出每天都在跟踪股票,显然不是滚动的。

这在熊猫 0.19.1 中。任何帮助,将不胜感激。

import datetime
import pandas as pd
import pandas_datareader.data as web

start = datetime.datetime(2012,1,1)
end = datetime.datetime(2012,12,31)
g = web.DataReader(['AAPL'], 'yahoo', start, end)
stocks = g['Close']
stocks['Date'] = pd.to_datetime(stocks.index)
stocks['AAPL_LO'] = stocks['AAPL'] - stocks['AAPL'].rolling(20).std() * 2
stocks['AAPL_HI'] = stocks['AAPL'] + stocks['AAPL'].rolling(20).std() * 2
stocks.dropna(axis=0, how='any', inplace=True)

【问题讨论】:

  • 您可以添加您实际期望的输出吗?
  • stocks['AAPL'].rolling(20).std() 给出与pd.rolling_std(stocks['AAPL'], window=20) 完全相同的输出...
  • 我无法在此处重现:听起来您好像在说 stocks['AAPL'].rolling(20).std() 是恒定的,但我看到了一个非恒定的随时间变化的结果。例如,在绘图时,我发现 2012 年 7 月左右的条带比 2012 年 4 月左右的条带要细得多。
  • 感谢您显示 std() 工作正常。我原本预计 20 天的回溯会更顺畅,但似乎我也必须使用 mean()。

标签: python pandas standard-deviation


【解决方案1】:
import pandas as pd
from pandas_datareader import data as pdr
import numpy as np
import datetime

end = datetime.date.today()
begin=end-pd.DateOffset(365*10)
st=begin.strftime('%Y-%m-%d')
ed=end.strftime('%Y-%m-%d')


data = pdr.get_data_yahoo("AAPL",st,ed)

def bollinger_strat(data, window, no_of_std):
    rolling_mean = data['Close'].rolling(window).mean()
    rolling_std = data['Close'].rolling(window).std()

    df['Bollinger High'] = rolling_mean + (rolling_std * no_of_std)
    df['Bollinger Low'] = rolling_mean - (rolling_std * no_of_std)     

bollinger_strat(data,20,2)

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2021-01-18
    • 2019-11-19
    • 2014-05-09
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多