【问题标题】:Pandas: rolling std deviation/mean by trading daysPandas:按交易日滚动标准偏差/平均值
【发布时间】:2015-09-19 00:58:11
【问题描述】:

我正在尝试使用pandasrolling_* 函数提取交易数据的滚动标准偏差和均值。

我的数据如下:

Tick   Trading_day  Trade_price  

VOD     2013-1-2     30.23
VOD     2013-1-2     30.33
VOD     2013-1-2     30.24
VOD     2013-1-5     31.23
VOD     2013-1-5     30.23
VOD     2013-1-6     30.23
VOD     2013-1-7     30.23
VOD     2013-1-8     30.23
VOD     2013-1-9     30.23

...     .......      .....

RBS     2013-1-2     15.23
...     .......      .....

基本上,我想根据(-3,+3)个交易日计算出每只股票的平均价格和价格标准差。

请注意这里有两个棘手的事情

  1. 每个交易日有不同数量的交易(流动日频繁交易)。

  2. 这些是交易日(不是日历日),因此它们不是按顺序排列的。

我的理想输出是

Tick   Trading_day  mean_price   std_price  

VOD     2013-1-2     30.23         0.13
VOD     2013-1-5     30.11         0.09
VOD     2013-1-6     30.24         0.15
...     .....        .......      .....
RBS     2013-1-2     15.23         0.19

有人知道吗?提前致谢!

【问题讨论】:

  • IIUC 我认为你可以做到 df.set_index('Trading_day', drop=False).groupby('Tick').apply(lambda x: pd.rolling_mean(x, window = 1, freq='6d'))df.set_index('Trading_day', drop=False).groupby('Tick').apply(lambda x: pd.rolling_std(x, window = 1, freq='6d'))
  • 如果同一证券在任何给定日期有多个交易,您想如何计算平均价格?理想情况下,它将按交易规模加权,但未提供该信息。如果它不可用,那么我假设您想要一个简单的意思?
  • 另外,有没有可能一个交易日没有给出价格?还是在非交易日给出价格?也就是说,我们是否可以假设每个交易日都有一个价格,并且所有价格都发生在交易日?
  • @EdChum 非常感谢您
  • @Alexander 是的。我只想要简单的等重均值

标签: python pandas trading


【解决方案1】:

这是我在此示例中使用的数据:

df = pd.DataFrame({'Tick': ['VOD'] * 7 + ['RBS'] * 2,
                   'Trade_price': [30.23, 30.24, 31.23, 30.23, 30.23, 30.23, 30.23, 14.11, 15.23],
                   'Trading_day': ['1/2/13', '1/2/13', '1/5/13', '1/5/13', '1/6/13', '1/7/13', '1/8/13', '1/2/13', '1/5/13']})

首先,让我们使用.to_datetime() 并为您的日期列设置 Pandas 时间戳(如果它们还没有)。

df['Trading_day'] = pd.to_datetime(df.Trading_day)

接下来,对数据进行分组和转换,以便我们获取每个代码在任何给定日期的平均价格,并且日期在索引中是唯一的:

df = df.groupby(['Trading_day', 'Tick']).Trade_price.mean().unstack()
>>> df 
Tick           RBS     VOD
Trading_day               
2013-01-02   14.11  30.235
2013-01-05   15.23  30.730
2013-01-06     NaN  30.230
2013-01-07     NaN  30.230
2013-01-08     NaN  30.230

现在,您想“根据 (-3, +3) 个交易日计算出每只股票的平均价格和价格标准差。”。一种方法是使用pd.rolling_mean() 并将结果居中。鉴于数据集有限,我使用以 3 天为中心的窗口(即前一天、当天和第二天)。您将希望使用 7 天窗口来获得 +/- 3 个交易日。

>>> pd.rolling_mean(df, 3, center=True) 
Tick         RBS        VOD
Trading_day                
2013-01-02   NaN        NaN
2013-01-05   NaN  30.398333
2013-01-06   NaN  30.396667
2013-01-07   NaN  30.230000
2013-01-08   NaN        NaN

要获得滚动标准差,只需使用pd.rolling_std()

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 2021-05-22
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多