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分経ったので今日はここまで。

↓次


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