非连续盘中指数

时间:2016-04-20 10:40:32

标签: pandas matplotlib finance quantitative-finance

此问题与:Python pandas, how to only plot a DataFrame that actually have the datapoint and leave the gap out

有关

我想知道在日内分辨率下生成非连续DateTimeIndex的最简单方法,即只保留某些[证券交易所]时间之间的样本,例如08:00-16:30,并且只给了工作日,例如周一至周五奖金是允许提供有效日期的日历。

在白天范围内,对于周一至周五,pandas.bdate_range()很容易。我想要的是在日内类似的东西,例如第二个决议,但不包括星期六/星期日。

这一点是能够在保持标签的同时,绘制没有“间隙”的金融时间序列的连续天数。即:

with gaps in index

vs以下(注意 x标签是持久的,在第二个分辨率下,虽然这里只显示日期 - 当您放大时间变得可见时):

consecutive

这不是实现这一目标的唯一方法;查看关于替代建议的关联问题(最简单的可能是将use_index=False参数用于pandas.Series.plot())。但是这个问题是关于创建一个非连续的DateTimeIndex;我不是要求替代解决方案

1 个答案:

答案 0 :(得分:1)

您可以创建一个完整的日内指数并过滤掉夜晚和周末:

import pandas as pd
index = pd.date_range('2016-01-01', '2016-01-16', freq='1min')
index[(index.dayofweek <= 4) & (index.hour >= 8) & (index.hour <= 16)]

输出:

DatetimeIndex(['2016-01-01 08:00:00', '2016-01-01 08:01:00',
               '2016-01-01 08:02:00', '2016-01-01 08:03:00',
               '2016-01-01 08:04:00', '2016-01-01 08:05:00',
               '2016-01-01 08:06:00', '2016-01-01 08:07:00',
               '2016-01-01 08:08:00', '2016-01-01 08:09:00',
               ...
               '2016-01-15 16:50:00', '2016-01-15 16:51:00',
               '2016-01-15 16:52:00', '2016-01-15 16:53:00',
               '2016-01-15 16:54:00', '2016-01-15 16:55:00',
               '2016-01-15 16:56:00', '2016-01-15 16:57:00',
               '2016-01-15 16:58:00', '2016-01-15 16:59:00'],
              dtype='datetime64[ns]', length=5940, freq=None)

您可以通过向面具添加条件来包含日历:

import numpy as np
np.in1d(index.date, calendar)

其中calendarnumpydatetime个对象数组。