(続)pandas.DataFrame.resampleを使用して価格を異なるタイムフレームの足へ変換する
前回「pandas.DataFrame.resampleを使用して価格を異なるタイムフレームの足へ変換する」の続き。
前回は総じて次のコードで時間足を作成した。
#coding:utf-8 import csv import pandas as pd import numpy as np filename = "USDJPY.csv" df = pd.read_csv(filename, sep=',', parse_dates=True, float_precision = "high") #IndexをdateTimeIndexに変換 dateTimeIndex = pd.DatetimeIndex(df['Time']) df.index = dateTimeIndex #Resampling ohlcDataFrame = df["2016/09/07"].resample("H") print ohlcDataFrame
出力結果は下記だった。
Open High Low Close
2016-09-07 06:00:00 102.056471 102.080221 101.056471 102.080134
2016-09-07 07:00:00 102.098426 102.118429 101.098426 102.118429
2016-09-07 08:00:00 101.810564 101.830572 100.810564 101.830572
2016-09-07 09:00:00 101.541465 101.561465 100.541465 101.561465
・・・・・・・・・・・・・・
そして、これらの値は各カラムの該当時間帯データの平均だった。
ここまでが前回の復習。
今回は、次が目的。
・Openは該当時間帯の最初のデータとする
・Closeは該当時間帯の最後のデータとする
・Highは最大値とする
・Lowは最小値とする
ただ、結論から言って、OpenとCloseについては、現時点で方法が不明。
High、Lowについてメモする。
次のようにHighについては、resampleメソッドの引数で「how="max"」として最大値を取得し、Lowについては「how="min"」として最小値を取得すれば良い。
# HighとLowを取得する resultOHLC = pd.DataFrame() resultOHLC["High"] = df["2016/09/07"]["High"].resample("H", how="max", closed="left", label="left", fill_method="ffill") resultOHLC["Low"] = df["2016/09/07"]["Low"].resample("H", how="min", closed="left", label="left", fill_method="ffill") print resultOHLC
結果は下記。
High Low
2016-09-07 06:00:00 102.144 101.005
2016-09-07 07:00:00 102.149 101.036
2016-09-07 08:00:00 102.126 100.245
2016-09-07 09:00:00 101.700 100.356
2016-09-07 10:00:00 101.595 100.206
2016-09-07 11:00:00 101.552 100.330
・・・・・・・・・
なお、resample関数のlabel="left"としているのでデータは「2016-09-07 06:00:00」から開始。
label="right"とすると、「2016-09-07 07:00:00」から開始となる。
これと同様に、Openについてはleftの値を、Closeについてはrightの値を選ぶオプションがあればいいのだが・・・。