Channel Breakout Bot for bitflyer-FX (by Connie-Wild氏)読解メモ46
の続きです。
題材は https://github.com/Connie-Wild/ChannelBreakoutBot です。
describeメソッドの続きから。
if useBlackList:
bl = read_blacklist()
co = bl.columns.values
is_blacklist = ((bl[co[0]] == m) &
(eq(bl[co[1]], i[0])) &
(eq(bl[co[2]], i[1])) &
(eq(bl[co[3]], j[0])) &
(eq(bl[co[4]], j[1])) &
(eq(bl[co[5]], k[1])) &
(eq(bl[co[6]], k[0])) &
(eq(bl[co[7]], l[0])) &
(eq(bl[co[8]], l[1]))).any()
引き続きbit演算を見ていきます。
anyの正体を探ります。
検証のため下記内容でblacklist.csvを作ります。
candle_term,entry_term,close_term,range_th,range_term,wait_th,wait_term,range_percent,range_percent_term
1,2,3,5000,3,10000,3,1.5,5
検証コードを書きます。
blacklist = pd.read_csv('blacklist.csv', header=0, sep=',')
co = blacklist.columns.values
print(blacklist[co[1]])
print(type(blacklist[co[1]]))
print(type(eq(blacklist[co[1]], 0) & eq(blacklist[co[2]], 1)))
a = (eq(blacklist[co[1]], 0) & eq(blacklist[co[2]], 1)).any()
print(a)
出力は下記です。
0 2
Name: entry_term, dtype: int64
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
False
まずblacklistの1列目の値は2です。
blacklist1列目の値を保持しているオブジェクトの型を判定するとpandasのseriesでした。
さらにeqの結果同士をbit演算した結果の型をtypeで判定しています。
この結果はpandasのseriesでした。
前回予想していたnumpy arrayではなかったです。
eqの引数で渡しているblacklist[co[1]]がpandasのseriesのため判定結果もseriesになっているようです。
そしてpandas.Seriesにもanyメソッドが生えています。
参考: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.any.html
any()をした結果、ここではTrueなeq判定が1つもないのでFalseが返ってきています。
if useBlackList:
bl = read_blacklist()
co = bl.columns.values
is_blacklist = ((bl[co[0]] == m) &
(eq(bl[co[1]], i[0])) &
(eq(bl[co[2]], i[1])) &
(eq(bl[co[3]], j[0])) &
(eq(bl[co[4]], j[1])) &
(eq(bl[co[5]], k[1])) &
(eq(bl[co[6]], k[0])) &
(eq(bl[co[7]], l[0])) &
(eq(bl[co[8]], l[1]))).any()
(2018/11/12修正)ブラックリストパラメータのうち1つでも渡されたパラメータに含まれていればTrueと記載していましたが誤りでした。
ブラックリストパラメータすべてに当てはまった場合はTrueを返す処理です。
https://qiita.com/makora9143/items/bccfaee35f2774f02c74 によるとanyは
「列方向で一つでもTrueがあればTrueを,無ければFalseを返す.」ということなので、そのために使っているようです。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?