チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ17
の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。
# 直近約定件数30件の高値と安値
high = max([self.executions[-1 - i]["price"] for i in range(30)])
low = min([self.executions[-1 - i]["price"] for i in range(30)])
`self.executions` を利用しています。
これはexecutionsProcessメソッドでpubnubで取得しているものです。
class BFSubscriberCallback(SubscribeCallback):
def message(self, pubnub, message):
execution = message.message
for i in execution:
executions.append(i)
このコールバックでexecutions配列に約定履歴がappendされています。
self.executions[-1 - i]["price"] for i in range(30)]
上記の処理で、executionsの後ろから順番に30個、price要素を取得しています。
その結果できた配列にmax()を実行しているため、highは直近30件の約定履歴の中で一番の高値が入ります。
lowも同様に安値が入ります。
この `30` というのは決め打ちですが、ここを変えることで成果をチューニングできるかもしれません。
while True:
whileブロック内に書かれた処理を(例外等で処理が終わらなければ)永遠に繰り返します。
# 1分ごとに基準ラインを更新
if datetime.datetime.now().second < 2:
datetime.datetime.now().secondで現在時刻の秒数を取得できるため、0秒か1秒であればifブロック内の処理をします。
厳密には「1分ごと」にはなりませんが、大体大丈夫ということでしょう。
print("Renewing candleSticks")
try:
candleStick = self.getCandlestick(50, "60")
except:
print(
"Unknown error happend when you requested candleStick")
前にも出てきた処理です。
getCandlestickメソッドでローソク足情報を取得します。
if candleTerm == None:
df_candleStick = self.fromListToDF(candleStick)
else:
df_candleStick = self.processCandleStick(candleStick,
candleTerm)
entryLowLine, entryHighLine = self.calculateLines(
df_candleStick, entryTerm)
closeLowLine, closeHighLine = self.calculateLines(
df_candleStick, closeTerm)
これも前に出てきた処理です。
entryTerm毎の安値リスト・高値リストとcloseTerm毎の安値リスト・高値リストを取得します。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?