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

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

isRangeメソッドの続きから。

    def isRange(self, df_candleStick, term, th):
       """
       レンジ相場かどうかをTrue,Falseの配列で返す.termは期間高値・安値の計算期間.
       thはレンジ判定閾値.
       """
       # 値幅での判定.
       if th != None:
           priceRange = self.calculatePriceRange(df_candleStick, term)
           isRange = [th > i for i in priceRange]
       # 終値の標準偏差の差分が正か負かでの判定.
       elif th == None and term != None:
           df_candleStick["std"] = [
               df_candleStick["close"][i - term + 1:i].std() for i in
               range(len(df_candleStick.index))]
           df_candleStick["std_slope"] = [
               df_candleStick["std"][i] - df_candleStick["std"][i - 1] for i in
               range(len(df_candleStick.index))]
           isRange = [i > 0 for i in df_candleStick["std_slope"]]
       else:
           isRange = [False for i in df_candleStick.index]
       return isRange
       elif th == None and term != None:

レンジ判定閾値が指定されておらず、かつ、termが指定されている場合の処理に入ります。

           df_candleStick["std"] = [
               df_candleStick["close"][i - term + 1:i].std() for i in
               range(len(df_candleStick.index))]

for以下は以前と同じでローソク足の要素数分iを加算して繰り返します。
`std()` することで対象期間内の終値の標準偏差を取得しています。
df_candleStick["std"]には、対象期間内の終値の標準偏差が入ります。

           df_candleStick["std_slope"] = [
               df_candleStick["std"][i] - df_candleStick["std"][i - 1] for i in
               range(len(df_candleStick.index))]

for以下は上記と同じです。
slopeは傾きです。
上で作ったstd配列の各要素間の差分を計算して配列に入れています。

           isRange = [i > 0 for i in df_candleStick["std_slope"]]

標準偏差の要素間差分が0より大きければTrueが入ります。

       else:
           isRange = [False for i in df_candleStick.index]

その他のケース(thもtermも指定されていない場合)は、Falseが詰められます。

       return isRange

生成したisRange配列を返します。

loopメソッドに戻ります。

            # 現在レンジ相場かどうか.
           isRange = self.isRange(df_candleStick, rangeTerm, rangeTh)

isRangeメソッドで生成したisRange配列を変数isRangeに格納します。

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

↓次


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