使用 python 和 pandas 将 OHLC 股票数据转换为不同的时间范围

2024-04-23

有人可以指出我关于 OHLC 数据时间范围转换的正确方向吗Pandas http://pandas.pydata.org/?我想做的是构建一个数据帧,其中包含较高时间范围的数据,给定较低时间范围的数据。

例如,假设我有以下一分钟(M1)数据:

                       Open    High     Low   Close  Volume
Date                                                       
1999-01-04 10:22:00  1.1801  1.1819  1.1801  1.1817       4
1999-01-04 10:23:00  1.1817  1.1818  1.1804  1.1814      18
1999-01-04 10:24:00  1.1817  1.1817  1.1802  1.1806      12
1999-01-04 10:25:00  1.1807  1.1815  1.1795  1.1808      26
1999-01-04 10:26:00  1.1803  1.1806  1.1790  1.1806       4
1999-01-04 10:27:00  1.1801  1.1801  1.1779  1.1786      23
1999-01-04 10:28:00  1.1795  1.1801  1.1776  1.1788      28
1999-01-04 10:29:00  1.1793  1.1795  1.1782  1.1789      10
1999-01-04 10:31:00  1.1780  1.1792  1.1776  1.1792      12
1999-01-04 10:32:00  1.1788  1.1792  1.1788  1.1791       4

其中每分钟都有开盘价、最高价、最低价、收盘价 (OHLC) 和交易量值 我想构建一组 5 分钟读数 (M5),如下所示:

                       Open    High     Low   Close  Volume
Date                                                       
1999-01-04 10:25:00  1.1807  1.1815  1.1776  1.1789      91
1999-01-04 10:30:00  1.1780  1.1792  1.1776  1.1791      16

所以工作流程是这样的:

  • Open 是时间窗口中第一行的 Open
  • High 是时间窗口中的最高 High
  • 低就是最低的低
  • 关闭是最后一次关闭
  • 体积只是体积的总和

但有几个问题:

  • 数据有间隙(注意没有 10:30:00 行)
  • 5 分钟间隔必须在回合时间开始,例如M5 于 10:25:00 开始,而不是 10:22:00
  • 首先,不完整的集合可以像本例中那样省略,也可以包含在内(这样我们就可以有 10:20:00 5 分钟的条目)

The Pandas 关于上下采样的文档 http://pandas.sourceforge.net/timeseries.html#up-and-downsampling给出了一个例子,但他们使用平均值作为上采样行的值,这在这里不起作用。我尝试过使用groupby and agg但无济于事。对于获得最高高点和最低低点可能并不那么难,但我不知道如何获得第一个开盘价和最后一个收盘价。

我尝试的是以下内容:

grouped = slice.groupby( dr5minute.asof ).agg( 
    { 'Low': lambda x : x.min()[ 'Low' ], 'High': lambda x : x.max()[ 'High' ] } 
)

但它会导致以下错误,我不明白:

In [27]: grouped = slice.groupby( dr5minute.asof ).agg( { 'Low' : lambda x : x.min()[ 'Low' ], 'High' : lambda x : x.max()[ 'High' ] } )
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/work/python/fxcruncher/<ipython-input-27-df50f9522a2f> in <module>()
----> 1 grouped = slice.groupby( dr5minute.asof ).agg( { 'Low' : lambda x : x.min()[ 'Low' ], 'High' : lambda x : x.max()[ 'High' ] } )

/usr/lib/python2.7/site-packages/pandas/core/groupby.pyc in agg(self, func, *args, **kwargs)
    242         See docstring for aggregate
    243         """
--> 244         return self.aggregate(func, *args, **kwargs)
    245 
    246     def _iterate_slices(self):

/usr/lib/python2.7/site-packages/pandas/core/groupby.pyc in aggregate(self, arg, *args, **kwargs)
   1153                     colg = SeriesGroupBy(obj[col], column=col,
   1154                                          grouper=self.grouper)
-> 1155                     result[col] = colg.aggregate(func)
   1156 
   1157             result = DataFrame(result)

/usr/lib/python2.7/site-packages/pandas/core/groupby.pyc in aggregate(self, func_or_funcs, *args, **kwargs)
    906                 return self._python_agg_general(func_or_funcs, *args, **kwargs)
    907             except Exception:
--> 908                 result = self._aggregate_named(func_or_funcs, *args, **kwargs)
    909 
    910             index = Index(sorted(result), name=self.grouper.names[0])

/usr/lib/python2.7/site-packages/pandas/core/groupby.pyc in _aggregate_named(self, func, *args, **kwargs)
    976             grp = self.get_group(name)
    977             grp.name = name
--> 978             output = func(grp, *args, **kwargs)
    979             if isinstance(output, np.ndarray):
    980                 raise Exception('Must produce aggregated value')

/work/python/fxcruncher/<ipython-input-27-df50f9522a2f> in <lambda>(x)
----> 1 grouped = slice.groupby( dr5minute.asof ).agg( { 'Low' : lambda x : x.min()[ 'Low' ], 'High' : lambda x : x.max()[ 'High' ] } )

IndexError: invalid index to scalar variable.

因此,任何对此方面的帮助将不胜感激。如果我选择的路径不起作用,请建议其他相对有效的方法(我有数百万行)。一些关于使用 Pandas 进行金融处理的资源也很好。


在更新版本的 Pandas 中,有一个resample https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html方法。它非常快并且对于完成相同的任务很有用:

ohlc_dict = {                                                                                                             
    'Open': 'first',                                                                                                    
    'High': 'max',                                                                                                       
    'Low': 'min',                                                                                                        
    'Close': 'last',                                                                                                    
    'Volume': 'sum',
}

df.resample('5T', closed='left', label='left').apply(ohlc_dict)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python 和 pandas 将 OHLC 股票数据转换为不同的时间范围 的相关文章

随机推荐

  • 猫头鹰旋转木马键盘导航

    我正在寻找向 Owl Carousel 插件添加键盘导航 原始 jQuery 插件的 Github 有一个关于此主题的线程here https github com OwlFonk OwlCarousel issues 65 所以我尝试了以
  • Sphinx 文档中人类可读的迭代

    Sphinx autodoc 扁平化字典 列表和元组 使得长的几乎难以阅读 漂亮的打印格式也并不总是需要的 因为一些嵌套容器最好保持扁平化而不是列化 有没有办法显示可迭代对象as typed在源代码中 直接从源获取它 并添加一个 rst其命
  • 在事件处理程序中获取表单元素

    我想添加一个onSubmit事件所有的HTML Forms验证提交文件大小并阻止其提交javascript 问题是我没有id of the form 也没有那些file input element 现在 我怎样才能获得所需的值input 可
  • Prolog 同构图

    这里尝试解决同构图问题 作业信息 判断2个无向图是否同构 没有孤立的顶点 顶点数小于30 图的边作为谓词给出 即 e 1 2 f 1 2 我正在尝试使用以下方法 对于每对边 即图 1 和图 2 中的每条边 Try to bind the v
  • PHP 标头重定向 301 - 有何影响?

    I have example com 如果用户登录 它应该自动加载example com option X其中 X 是用户的预定义选择 所以 我在顶部这样做index php header Location option X 但是 如果用户
  • 将字符串转换为带时区的日期

    我有日期字符串2017 01 03T10 45 00 000 02 00我需要将其转移到类似的东西2017 01 03 10 45 00 0200 let formatter DateFormatter formatter dateForm
  • 查找 AAR 依赖项

    我正在使用编译成 AAR 文件的第 3 方 SDK 我想使用此 AAR 为 Xamarin 创建绑定库 如何找到此 AAR 使用的依赖项 如果我使用 Java 反编译器 我可以看到许多类都有针对第 3 方 SDK 的导入语句 因此我 有时
  • ruby on Rails 3.1 将 .swf 移动到资产管道?

    是否可以将 SWF 文件移动到资源管道中 如果可以 如何做到这一点 我建议将它们放在一个名为的文件夹中app assets flash 将此文件夹添加到您的资源路径中 config assets paths lt lt Rails root
  • 贪心聚类算法速度提升

    我正在尝试在 python 中实现一个非常简单的贪婪聚类算法 但很难优化它的速度 该算法将采用距离矩阵 找到具有最多小于预定距离截止值的分量的列 并将行索引 具有小于截止值的分量 存储为簇的成员 簇的质心是列索引 然后 从距离矩阵中删除每个
  • 将 StarUML 图转换为 Visio 绘图

    我有一个使用 Star Uml 创建的类图 但现在的要求是将其移植到 MS Visio 是否可以将 uml 移植到具有可用 xml 信息的 vsd 提前致谢 导出为 Windows 图元文件 WMF 和增强型 Windows 图元文件 EM
  • 使用 VB.NET 循环遍历 XML 文件

    我在处理 XMl 文件时遇到问题 我想循环 使用 VB NET 该文件并提取 OrderID 元素的所有值
  • 在 Corda 中,哪些数据会发送到非验证公证服务?

    这个问题经常出现在对话中 当 Corda 交易被发送到非验证公证服务进行最终确定时 公证服务可以看到并推断出关于世界的什么 在将交易发送给非验证公证人之前 会按如下方式进行过滤 stx buildFilteredTransaction Pr
  • 如何组合两个表达式: result = exp1(exp2);

    作为主题 在这种情况下如何将两个表达式组合成一个表达式 Expression
  • 双向绑定无法解析 java.lang.String 属性的 setter

    我正在研究 Android Studio 2 1 AFIK 中引入的数据绑定 API 的双向绑定 我收到这个有趣的错误 错误 任务 app compileDebugJavaWithJavac 执行失败 gt java lang Runtim
  • tkinter 和 pygame 不想在一个窗口中工作[重复]

    这个问题在这里已经有答案了 我想创建一个应用程序 并希望使用 tkinter 作为 GUI 并使用 Pyglet 和 Pygame 等游戏库之一 我没有找到任何有关将 pyglet 嵌入 tkinter 的信息 但找到了一些使用 tkint
  • 如何避免权限被拒绝 (publickey) SSH 密钥 (Windows)

    我想通过 SSH 连接我的 ec2 但我收到这个错误 WARNING UNPROTECTED PRIVATE KEY FILE Permissions for F Config first1 pem are too open It is r
  • Visual Studio 2010 QuickWatch 窗口不可见

    当我在 VS2010 中突出显示一个变量并右键单击以选择 QuickWatch 时 QuickWatch 窗口不会出现 VS 的行为就像模态窗口打开一样 让我无法执行任何操作 直到我点击 取消 一位同事建议我转到 窗口 菜单并选择 重置 W
  • SqlException - 未找到网络路径

    我正在运行我的代码并收到此错误 但是这是什么意思 找不到网络路径说明 未处理的异常 发生在当前 Web 请求执行期间 请 查看堆栈跟踪以获取有关错误及其位置的更多信息 它起源于代码 异常详细信息 System ComponentModel
  • 在 TypeScript 中找不到名称 jsPdf

    我的任务是使用 JavaScript 将数据打印到 pdf 文件中 所以我选择 jsPdf 来完成我的任务并且也成功了 我的任务是将打印任务转换为 TypeScript 我面临一个新问题Can t find name jsPdf in Ty
  • 使用 python 和 pandas 将 OHLC 股票数据转换为不同的时间范围

    有人可以指出我关于 OHLC 数据时间范围转换的正确方向吗Pandas http pandas pydata org 我想做的是构建一个数据帧 其中包含较高时间范围的数据 给定较低时间范围的数据 例如 假设我有以下一分钟 M1 数据 Ope