Bitflyerのメンテナンス時間中はBOTの稼働を停止させたい場合

Bitflyerでは毎日午前4時00分~午前4時10分にかけて定期メンテナンスが実施されます。このメンテナンスの時間中は新規の注文ができないだけでなく、事前に受け付けられた注文も約定しないまま消滅します。

参考リンク:Bitflyer公式「メンテナンスについて教えてください」

問題

1時間足を基準にトレードするBOTの場合、午前4時ちょうどにエントリーや決済のシグナルが出ることもあります。

このときBOTの新規注文が拒否されれば通常の例外処理で対応できますが、ギリギリで注文が通ってしまった場合、サーバー側ではそのまま約定することなく消滅するため、BOT側は永遠に約定を待つことになり、トラブルの原因になります。

そのため、この記事ではメンテナンス時間中にBOTを停止する方法を解説します。

解決策

以下のようなコードをメインのwhile文の中の先頭の部分に追加しましょう。


wait = 60
maintenance_start = "03:59:30"
maintenance_end   = "04:10:30"


while True:
	
	# メンテナンス時間は稼働しない
	st = datetime.strptime(maintenance_start,"%H:%M:%S").strftime("%H:%M:%S")
	et = datetime.strptime(maintenance_end, "%H:%M:%S").strftime("%H:%M:%S")
	nt = datetime.now().strftime("%H:%M:%S")
		
	if nt>st and nt<et:
		print("メンテナンス時間中のため待機しています")
		time.sleep(wait)
		continue

現在の時刻が、メンテナンスの開始時刻(maintenance_start)と終了時刻(maintenance_end)の間に入っていれば、if文の中身が実行されます。continueは、それ以降の記述を実行せずに while文の先頭に戻る、という指示です。

このコード例では周期を60秒(wait=60)にしていますが、ここは各BOTに合わせて調整してください。

「Bitflyerのメンテナンス時間中はBOTの稼働を停止させたい場合」への1件のフィードバック

  1. 2か所datetime.が抜けています

    誤datetime.strptime()⇒正datetime.datetime.strptime()
    誤datetime.now()⇒正datetime.datetime.now()

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です