我正面临一个问题w.r.t pandas resample。 我有1米频率的OHLC数据。我希望将这些数据转换为5米频率并计算它的移动平均值。 假设我的移动平均值为20个柱(每个5米),然后我首先将100bars(1m bar)加载到数据帧,使用
将其转换为5m频率conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'last'}
resample_high = df_high.resample('5T', closed='right',label='right').apply(conversion).dropna()
然后计算这个新数据框的移动平均值。 1分钟后,新的1米数据栏将可用(实时馈送),我将更新当前数据帧 1.)从数据框中删除第1个条目(总条目99) 2.)向数据框添加新条目(总条目100)
我将再次计算移动平均线并继续上述过程直到一天结束。
这里的问题是当我创建重采样数据帧时,它从
开始xx:05:00
xx:10:00
xx:15:00
我期待框架以第一个日期索引开头,比如说数据是: -
4/8/2016 14:27,850.6,850.75,849.85,849.85,4667
4/8/2016 14:28,849.85,849.95,849.4,849.5,9933
4/8/2016 14:29,849.5,850,849.45,850,2720
4/8/2016 14:30,849.95,850.45,849.45,849.45,7795
4/8/2016 14:31,849.45,850.95,849.45,850.9,7143
5米重新采样以
开始4/8/2016 14:30:00 XX XX XX XX
由于新的条目没有添加到数据框计算中,因此简单移动平均值的计算每次都是错误的。
如果有任何不清楚的地方,请告诉我,我会尽量让它更精细。
添加了重新采样和计算SMA的代码(使用TALIB模块)。
conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close':'last', 'Volume': 'last'}
order = df_high.columns.tolist()
resample_high = df_high.resample('5T', closed='right', label='right').apply(conversion).dropna()
df_h = resample_high[order]
SMA_20 = talib.SMA(np.array(df_h['Close']), timeperiod=20)[19] }
转换问题: - 我的数据是: -
04/08/16 10:32:00 843.9 844.1 843.8 843.8 3618
04/08/16 10:33:00 843.85 844 843.5 843.7 3590
04/08/16 10:34:00 843.6 843.8 843.25 843.55 3841
04/08/16 10:35:00 843.55 843.9 843.55 843.75 4012
04/08/16 10:36:00 843.75 844.2 843.75 843.85 5337
04/08/16 10:37:00 843.9 844.8 843.9 844.4 2978
04/08/16 10:38:00 844.4 844.75 844.4 844.6 2773
04/08/16 10:39:00 844.55 844.85 844.3 844.4 3887
转换后我得到: -
2016-04-08 10:35:00 843.90 844.10 843.25 843.75 4012
2016-04-08 10:35:00 843.85 844.00 843.25 843.75 4012
2016-04-08 10:35:00 843.60 843.90 843.25 843.75 4012
2016-04-08 10:35:00 843.55 843.90 843.55 843.75 4012