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

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

calculateLinesメソッドの続きから。
def calculateLines(self, df_candleStick, term):
  """
  期間高値・安値を計算する.
  candleStickはcryptowatchのローソク足.termは安値,高値を計算する期間.(5ならローソク足5本文の安値,高値.)
  """
  lowLine = []
  highLine = []
  for i in range(len(df_candleStick.index)):
      if i < term:
          lowLine.append(df_candleStick["high"][i])
          highLine.append(df_candleStick["low"][i])
      else:
          low = min(
              [price for price in df_candleStick["low"][i - term:i]])
          high = max(
              [price for price in df_candleStick["high"][i - term:i]])
          lowLine.append(low)
          highLine.append(high)
  return (lowLine, highLine)
      else:
          low = min(
              [price for price in df_candleStick["low"][i - term:i]])
          high = max(
              [price for price in df_candleStick["high"][i - term:i]])
          lowLine.append(low)
          highLine.append(high)

iがterm以上の場合。

[price for price in df_candleStick["low"][i - term:i]]

ローソク足の安値の `i-term` から `i` 未満の配列番号のpriceが入った配列を生成しています。
これを `min()` で囲っているので、この範囲の安値の中で一番小さい値がlowに入ります。
逆にこの範囲の高値の中で一番大きい値がhighに入ります。
low, highそれぞれlowLine, highLineにappendされます。

こう見ると `if i < term:` ブロックの `lowLine.append(df_candleStick["high"][i])` は本来 `df_candleStick["low"]` を入れるべきなのかもしれません。

最後に `return (lowLine, highLine)` で lowLine と highLineをまとめて返しています。

loopメソッドに戻ります。

       entryLowLine, entryHighLine = self.calculateLines(df_candleStick,
                                                         entryTerm)
       closeLowLine, closeHighLine = self.calculateLines(df_candleStick,
                                                         closeTerm)

entryTerm毎の安値リスト・高値リストとcloseTerm毎の安値リスト・高値リストを取得できました。

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

↓次


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