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

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

readDataFromFileメソッドの続きから。

  # csvファイル(ヘッダなし)からohlcデータを作成.
  def readDataFromFile(self, filename):
      for i in range(1, 10, 1):
          with open(filename, 'r', encoding="utf-8") as f:
              reader = csv.reader(f)
              header = next(reader)
              for row in reader:
                  candleStick = [row for row in reader if row[4] != "0"]
      dtDate = [datetime.datetime.strptime(data[0], '%Y-%m-%d %H:%M:%S') for
                data in candleStick]
      dtTimeStamp = [dt.timestamp() for dt in dtDate]
      for i in range(len(candleStick)):
          candleStick[i][0] = dtTimeStamp[i]
      candleStick = [[float(i) for i in data] for data in candleStick]
      return candleStick
              header = next(reader)

nextでreaderイテレータを一つ進めて進めた分をheaderに入れます。
但し、コメントからするとcsvファイルはヘッダなしのものを想定しているので、
1行目がskipされそうです。
ヘッダなしのcsvを使う場合はコメントアウトしたほうがよさそうです。
また、`for i in range(1, 10, 1):` のiが使われていないのでこのfor文も必要ないかもしれません。
iに1~9まで入れてloopしているため、9回loopしていますが、iが反映されず同じ処理が走るので時間がかかるだけで処理結果は問題ないはずです。

              for row in reader:
                  candleStick = [row for row in reader if row[4] != "0"]

csvデータを1行ずつ見てローソク足に入れていきますが、
for文でloopするたびにcandleStickに新しい値を入れていくことになりそうなので何かおかしそう。
むしろこの `for row in reader` は必要ないのかもしれない。

candleStick = [row for row in reader if row[4] != "0"]

これだけで取れそうな気もする。
検証してみます。

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

↓次


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