チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ14
の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。
fromListToDFメソッドの続きです。
def fromListToDF(self, candleStick):
"""
Listのローソク足をpandasデータフレームへ.
"""
date = [price[0] for price in candleStick]
priceOpen = [int(price[1]) for price in candleStick]
priceHigh = [int(price[2]) for price in candleStick]
priceLow = [int(price[3]) for price in candleStick]
priceClose = [int(price[4]) for price in candleStick]
date_datetime = map(datetime.datetime.fromtimestamp, date)
dti = pd.DatetimeIndex(date_datetime)
df_candleStick = pd.DataFrame(
{"open": priceOpen, "high": priceHigh, "low": priceLow,
"close": priceClose},
index=dti)
return df_candleStick
df_candleStick = pd.DataFrame(
{"open": priceOpen, "high": priceHigh, "low": priceLow,
"close": priceClose},
index=dti)
return df_candleStick
価格データと日時データを、日時データをindexとしてpandas dataframeに変換します。
参考: https://deepage.net/features/pandas-dataframe.html
dataframeの形にしておくと後の処理がやりやすいためこの変換を行います。
ちなみにこの価格データをohlcデータと言ったりします。
open, high, low, closeのデータなので頭文字を取ってohlcデータです。
最後にdataframeの形にしたローソク足データをreturnして終了です。
loopメソッドに戻ります。
if candleTerm == None:
df_candleStick = self.fromListToDF(candleStick)
else:
df_candleStick = self.processCandleStick(candleStick, candleTerm)
candleTermが指定されていない場合はgetCandlestickメソッドで取得したローソク足データをdataframeに変換してdf_candleStick変数に入れることがわかりました。
ではcandleTermが指定されている場合はどうなるか。
df_candleStick = self.processCandleStick(candleStick, candleTerm)
processCandleStickメソッドを見ていきます。
def processCandleStick(self, candleStick, timeScale):
"""
1分足データから各時間軸のデータを作成.timeScaleには5T(5分),H(1時間)などの文字列を入れる
"""
df_candleStick = self.fromListToDF(candleStick)
processed_candleStick = df_candleStick.resample(timeScale).agg(
{'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last'})
processed_candleStick = processed_candleStick.dropna()
return processed_candleStick
コメントによると「1分足データから各時間軸のデータを作成」するメソッドです。
ここまでで取得しているローソク足は1分足のデータなので、それを用いて「各時間軸のデータを作成」するのでしょう。
引数としてcandleStick, timeScaleを受け取ります。
candleStickはローソク足データです。
timeScaleはコメントによると「5T(5分),H(1時間)などの文字列を入れる」とのことで、時間を意味する文字列が入っているようです。
df_candleStick = self.fromListToDF(candleStick)
これまで見てきた `fromListToDF` メソッドが使われています。
ローソク足データをpandas dataframeの形式に変換しています。
processed_candleStick = df_candleStick.resample(timeScale).agg(
{'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last'})
`resample(timeScale)` はpandasのメソッドで、時系列データのリサンプリング処理を行ってくれます。
例えば1分間隔のデータを5分間隔のデータに変換することができます。
コメントで書かれていた「5T(5分),H(1時間)などの文字列」というのはpandasのresampleメソッドの仕様として定められたものです。
参考: http://docs.pyq.jp/python/pydata/pandas/resample.html
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?