我可能会为此使用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 文件读入一个名为 a 的对象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
这假设所有股票的记录时间都匹配:如果不匹配,则可以使用强大的重采样工具来对齐它们。