チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ12

の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。

if candleTerm == None:
   df_candleStick = self.fromListToDF(candleStick)
else:
   df_candleStick = self.processCandleStick(candleStick, candleTerm)

candleTermはloopメソッドの引数で渡されています。
candleTermがNoneであれば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

fromListToDFにはcandleStick=ローソク足データを渡します。
このメソッドはコメントによると渡されたローソク足データをpandasで使いやすいデータ構造に変換するようです。
pandasはデータ解析ライブラリです。
詳しくは https://qiita.com/ysdyt/items/9ccca82fc5b504e7913a などを参照ください。

date = [price[0] for price in candleStick]

少し複雑ですが、candleStick配列をfor文で回して取得した要素の0番目をdate配列に入れていきます。
candleStick配列には下記のようなデータが入っています。

[
  [1534087140,708124,709096,708000,708935],
  [1534087200,708934,709770,708649,709026],
  [1534087260,709033,709797,708895,709318],
  [1534087320,709336,709445,708246,708436],
  ...,
  [1534117740,706950,707567,706911,707265]
]

for文で0番目から取得していくのでpriceには下記のようなデータが入ります。

[1534087140,708124,709096,708000,708935]

なのでこの例の場合、price[0]には `1534087140` が入ります。
これは、あるローソク足の日時を表しています。
date配列はローソク足の日時が詰まった配列となります。

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]

同様に、price配列の他の要素もそれぞれ抽出していきます。
priceOpen配列にはローソク足のopen priceが、
priceHigh配列にはローソク足のhigh priceが、
priceLow配列にはローソク足のlow priceが、
priceClose配列にはローソク足のclose priceが詰まっています。
ここで `int(price[1])` のように `int` で囲っているのは、文字列で入っている `price[1]` を整数に変換したいからです。
おそらくこの後この値を使って計算をするので整数にしておきたいのだと思います。

15分経ったので今日はここまで。

↓次


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