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

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

calculatePriceRangeメソッドの続きから。

    def calculatePriceRange(self, df_candleStick, term):
      """
      termの期間の値幅を計算.
      """
      low = [min([df_candleStick["close"][i - term + 1:i].min(),
                  df_candleStick["open"][i - term + 1:i].min()]) for i
             in range(len(df_candleStick.index))]
      high = [max([df_candleStick["close"][i - term + 1:i].max(),
                   df_candleStick["open"][i - term + 1:i].max()]) for i
              in range(len(df_candleStick.index))]
      low = pd.Series(low)
      high = pd.Series(high)
      priceRange = [high.iloc[i] - low.iloc[i] for i in
                    range(len(df_candleStick.index))]
      low = pd.Series(low)
      high = pd.Series(high)

term期間内の最低値配列と最高値配列をそれぞれpandasのSeriesに変換します。
参考: https://note.mu/wanna_be_free/n/n96a6f77e6cac

      priceRange = [high.iloc[i] - low.iloc[i] for i in
                    range(len(df_candleStick.index))]

high, lowはSeriesなので `iloc` は配列の[i]と同等ととらえてよいです。

>>> import pandas as pd
>>> a = [1,2,3,4,5,6,7,8,9,0]
>>> b = pd.Series(a)
>>> b.iloc[0]
1
>>> b[0]
1
>>> a[0]
1

むしろSeriesにしなくとも成り立つかもしれません。
for以下は以前と同じでローソク足の要素数分iを加算して繰り返します。
ローソク足の要素数分、term期間内の高値安値差分がpriceRange配列に入ります。

isRangeメソッドに戻ります。

           isRange = [th > i for i in priceRange]

priceRangeを取得できたので上記処理を行います。
term期間内の高値安値差分をforで一つずつ取り出してthと比較し、thより小さいかどうかをisRange配列に入れます。
isRangeは例えば下記のようになります。

>>> priceRange = [1,2,3,4,5,6,7,8,9,0]
>>> th = 4
>>> isRange = [th > i for i in priceRange]
>>> print(isRange)
[True, True, True, False, False, False, False, False, False, True]

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

↓次


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