これにはおそらく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
そして、NaN
を 0 で埋めます。
>>> 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
これは、記録時間がすべての株で一致していることを前提としています。一致していない場合は、それらを調整するための強力なリサンプリング ツールがあります。