3

我最近刚刚发现了 pandas 和 python。我已经阅读了 Wes 的书,此外,我还反复浏览了 SO 的 pandas 标记问题,以收集这个问题的答案。所以我尝试过......不幸的是,我微薄的编程智慧正在闪耀;)

这是我正在尝试做的事情:

我有盘中外汇数据(每小时),我正在尝试对其进行一些非常简单的分析。我正在寻找测试价格测试每日开盘价并拒绝或通过它的频率。

这对我来说似乎很简单......我只是迷失了将所有组件组合在一起以获得最终的完整解决方案。

在伪代码中,这是我想要实现的目标:

  • 通过 read_csv 读取数据
  • 计算每个每日开放水平(使用 at_time?)
  • 对于所有每小时蜡烛
    • 测试蜡烛低点是否低于每日开盘价
    • 测试蜡烛的收盘价是否高于每日开盘价

如果有人能指出我正确的方向,我将不胜感激。我已经到了要放弃这个的地步了。我觉得答案应该很简单,但我现在迷路了

这是我一直在使用的数据:

data = pd.read_csv('data/GBPUSD60.csv', 
                names=['Date','Time','Open','High','Low','Close','Volume'],
                parse_dates={'Timestamp': ['Date', 'Time']},
                index_col=['Timestamp'])

                # Get rid of the volume
                del data['Volume']

结果DF:

                     Open    High    Low     Close   
Timestamp                   
2012-11-14 04:00:00  1.58766 1.58890 1.58749 1.58877      
2012-11-14 05:00:00  1.58874 1.58887 1.58819 1.58849      
2012-11-14 06:00:00  1.58849 1.58921 1.58831 1.58890      
2012-11-14 07:00:00  1.58890 1.58895 1.58811 1.58876      
2012-11-14 08:00:00  1.58874 1.58934 1.58841 1.58849      

我假设我需要采取以下两种方式之一:

  • 或者按天对数据进行分组并遍历行以测试​​日内蜡烛。
  • 其次,我可以使用 df.apply 函数并生成一个函数来测试蜡烛

这两种方法的问题在于,我在尝试访问我需要的字段时遇到了各种各样的麻烦。

4

1 回答 1

1

你的伪代码是正确的。这是语义

第 1 步:制作日期列

df['date'] = [i.date() for i in df.index]

第 2 步:获取每日开盘价(假设开盘价是当天第一根蜡烛的开盘价)

df['dailyOpen'] = df.groupby('date').open.transform(lambda s: s[0])

第 3 步:比较

df['flag'] = (df.low < df.dailyOpen) & (df.close > df.dailyOpen)

如果您想要一天中发生上述情况的次数,这应该可以

res = df.groupby('date').flag.sum()
于 2013-04-07T12:54:00.007 回答