チャネルブレイクアウト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分経ったので今日はここまで。

↓次


この記事が気に入ったらサポートをしてみませんか?