チャネルブレイクアウト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分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?