【问题标题】:Non-consecutive intraday index非连续盘中指数
【发布时间】:2016-04-20 10:40:31
【问题描述】:

此问题与: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() 很容易。我想要的是盘中类似的东西,例如第二个分辨率,但不包括周六/周日。

这样做的目的是能够在保持标签不变的情况下绘制连续几天的金融时间序列图。即这个:

vs 下面(请注意,在第二个分辨率下,x 标签被保留,尽管此处仅显示日期 - 当您放大时,时间变得可见):

这不是实现这一目标的唯一方法;请参阅链接问题以获取替代建议(最简单的可能是将use_index=False 参数用于pandas.Series.plot())。但是这个问题是指创建一个非连续的DateTimeIndex;我不是在寻求替代解决方案

【问题讨论】:

  • 如何创建一个盘中索引并删除周六和周日以及之后的夜间时间?
  • 是的,我想这会奏效。那会有多少样板代码?
  • 只有两行代码(见我的回答):)

标签: pandas matplotlib finance quantitative-finance


【解决方案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)

其中calendar 将是numpy 数组datetime 对象。

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多