gpt4 book ai didi

python - 遍历多个 csv 文件并计算 NYSE tick 的最有效方法

转载 作者:行者123 更新时间:2023-11-28 22:53:39 26 4
gpt4 key购买 nike

我在具有以下结构的单独 csv 文件中有所有纽约证券交易所股票的 1 分钟数据:

(数据、开盘价、最高价、最低价、收盘价、成交量)

2013-09-16 09:30:00,461.01,461.49,461,461,183507
2013-09-16 09:31:00,460.82,461.6099,460.39,461.07,212774
...
2013-09-16 15:59:00,449.72,450.0774,449.59,449.95,146399
2013-09-16 16:00:00,450.12,450.12,449.65,449.65,444594
2013-09-17 09:30:00,448,448,447.5,447.96,173624
2013-09-17 09:31:00,449.2628,449.68,447.5,448,193186
....

我要计算NYSE tick (上涨交易的股票数量减去下跌交易的股票数量)并将其写入具有以下结构的新 csv 文件:

2013-09-16 09:30:00,[tick]
2013-09-16 09:31:00,[tick]
...
2013-09-16 15:59:00,[tick]
2013-09-16 16:00:00,[tick]
2013-09-17 09:30:00,[tick]
2013-09-17 09:31:00,[tick]
....

基本上,我需要:

Loop every csv file
# For every file compare close[t] to close[t-1]
If close[t] > close[t-1]:
increment tick by 1
Else:
subtract 1 from tick

如何在 Python 中最有效地执行此操作?

最佳答案

我可能会使用 pandas为此的图书馆。它有很多很好的功能,可以处理一般时间序列,特别是 OHLC 数据,但我们不会在这里使用任何功能。

import glob
import numpy as np
import pandas as pd

stocks = glob.glob("stock*.csv")

total_tick = 0
for stock in stocks:
df = pd.read_csv(stock,
names=["time", "open", "high", "low", "close", "volume"],
parse_dates=[0], index_col="time")
tick = df["close"].diff().apply(np.sign).fillna(0.0)
total_tick += tick

total_tick.to_csv("tick.csv")

产生的输出看起来像

2013-09-16 09:30:00,0.0
2013-09-16 09:31:00,3.0
2013-09-16 15:59:00,-5.0
2013-09-16 16:00:00,-3.0
2013-09-17 09:30:00,1.0
2013-09-17 09:31:00,-1.0

我在其中制作了看起来像您的示例数据。


基本思想是您可以将 csv 文件读入名为 DataFrame 的对象中:

>>> df
open high low close volume
time
2013-09-16 09:30:00 461.0100 461.4900 461.00 453.484089 183507
2013-09-16 09:31:00 460.8200 461.6099 460.39 474.727508 212774
2013-09-16 15:59:00 449.7200 450.0774 449.59 436.010403 146399
2013-09-16 16:00:00 450.1200 450.1200 449.65 455.296584 444594
2013-09-17 09:30:00 448.0000 448.0000 447.50 447.465545 173624
2013-09-17 09:31:00 449.2628 449.6800 447.50 477.785506 193186

我们可以选择一列:

>>> df["close"]
time
2013-09-16 09:30:00 453.484089
2013-09-16 09:31:00 474.727508
2013-09-16 15:59:00 436.010403
2013-09-16 16:00:00 455.296584
2013-09-17 09:30:00 447.465545
2013-09-17 09:31:00 477.785506
Name: close, dtype: float64

求差,注意如果我们从前一个值中减去,那么初始值是未定义的:

>>> df["close"].diff()
time
2013-09-16 09:30:00 NaN
2013-09-16 09:31:00 21.243419
2013-09-16 15:59:00 -38.717105
2013-09-16 16:00:00 19.286181
2013-09-17 09:30:00 -7.831039
2013-09-17 09:31:00 30.319961
Name: close, dtype: float64

根据其符号使其为正或负:

>>> df["close"].diff().apply(np.sign)
time
2013-09-16 09:30:00 NaN
2013-09-16 09:31:00 1
2013-09-16 15:59:00 -1
2013-09-16 16:00:00 1
2013-09-17 09:30:00 -1
2013-09-17 09:31:00 1
Name: close, dtype: float64

然后用 0 填充 NaN

>>> df["close"].diff().apply(np.sign).fillna(0)
time
2013-09-16 09:30:00 0
2013-09-16 09:31:00 1
2013-09-16 15:59:00 -1
2013-09-16 16:00:00 1
2013-09-17 09:30:00 -1
2013-09-17 09:31:00 1
dtype: float64

这假设所有股票的记录时间都匹配:如果不匹配,则可以使用强大的重采样工具来对齐它们。

关于python - 遍历多个 csv 文件并计算 NYSE tick 的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19199869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com