こんばんは。
なおき(@naoki_finance)です。
前回は、第3回 ドルコスト平均法で自動積立!サルでも分かる仮想通貨bot開発!と題して簡単なbotを開発しました。
しかし、あのbotは例外処理が組み込まれていないため、不完全なものとなっています。
そのため今回は、前回のbotに例外処理を組み込むことで稼動率をアップさせていきましょう。
スポンサーリンク
例外(エラー)処理とは?
例外処理とは、その名の通り何らかのエラーが発生したときに動作させる処理のことです。
この処理はとても重要で例外処理を組み込んでいない場合、エラーが発生するとbotが停止してしまいます。
エラーは大まかに以下のように分けることができます。
まず、自分で作ったプログラムがバグになっている場合です。
このケースは、自分の大切な資金を入れる前に入念なテストをしてバグを取り除いておけば防げるエラーです。
もう1つは、ネットワーク起因によりサーバへ注文がうまく通らなかった場合や取引所のサーバ負荷が高く、処理できなかった場合があります。
このケースでは自分で作ったプログラムにバグはなくてもどうしても発生してしまうもの(これを例外と呼びます)ですのでそのさいの処理を自分で設計し、対応していく必要があります。
この例外に対応するための処理を例外処理と呼びます。
例外処理を組み込まなくても正常な状態では問題無く動作するのですが、組み込んでいない場合、エラーとなってbotが停止し、取返しのつかないことになってしまう可能性があります。
例えば、FXのbotを作っていた場合、注文を入れるまでは正常だったのにクローズ注文を発行するタイミングでエラーとなってしまった場合、クローズが入れれず大切な資金が無くなってしまうかもしれません。
そのため、例外処理はとても重要なものです。
例外処理を組み込むのは大変で面倒なのですが、これをするかどうかでbotの質や完成度が変わってきますので必ず組み込むようにしましょう。
例外処理の作り方
前回のプログラムに例外処理を組み込みます。
import ccxt from datetime import datetime from time import sleep import json """ bitbankにccxtのbitbankを使うデータを入れる """ bitbank = ccxt.bitbank({ "apiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }) count = 1 while( True ): try: # 現在の価格取得 data = bitbank.fetch_ticker(symbol="XRP/JPY") # 毎日100円ずつ積み立てていく amount = 100 / data["ask"] # エントリー注文発行 res = bitbank.create_order( symbol="XRP/JPY", type="market", side="buy", amount=str(amount), price=1 ) print(str(datetime.now().strftime("%Y/%m/%d %H:%M:%S") ) ) print( json.dumps(res, indent=True) ) print("--------------------------------------------") count = 1 # countの初期化 # 1日 sleep( 60 * 60 * 24 ) except ccxt.BaseError as e: #例外処理 print("エラー発生", e) if 3 > count: count = count + 1 # countをプラス1(インクリメント) # 1分スリープ sleep( 60 ) else: count = 1 # エラーが規定回数を超えたのでcountを初期化 # 1日 sleep( 60 * 57 * 24 )
今回のテーマである例外処理は、16行目のtryと33行目のexceptです。
動作としましては、まず、17~32行目までを実行し、その間に例外が発生した場合はそこで処理を中断し、34~46行目を実行します。
例外が発生しなかった場合は、except以降の処理は実行されず、32行目までが実行されます。
そして今回は例外処理で1分間の間を空けて3回まで繰り返し処理を実行するようにしています。
37行目のif文は条件によって処理を分岐させる場合に使用します。
countという変数を用意し、それを例外が起きる度にプラスしていきます。(インクリメントといいます)
そしてif文により、countが3回より大きくなった場合はelse文より下(43~46行目)に進みます。
そこでcountを初期化し、次の日までスリープし時間が来たら処理を再度再開するという流れになっています。
スポンサーリンク
最後に
このようにtry/exceptを入れることで例外が発生しても止まることなく、処理を実行し続けることが可能です。
少しだけプログラムが複雑になってきましたが、頑張って理解しましょう。
分かりづらい箇所があれば気兼ねなくお問い合わせください。
次回は、これまでprint文で表示していたものをtwitterにツイートして外出先からでも状況を把握できるようにしたいと思います。
ぜひご覧ください。
ではまた。
前回の記事はこちら↓
-
-
第3回 ドルコスト平均法で自動積立!サルでも分かる仮想通貨botの作り方!
こんにちは。 なおき(@naoki_finance)です。 前回は、Public APIを用いて取引所の現在価格を取得するプログラムを作成しました。 今回は、Private APIを使う練習としてbi ...
次回の記事はこちら↓
-
-
第5回 Twitterとbotを連携して外出先でも手軽に状況をチェックしよう!サルでも分かる仮想通貨botの作り方!
こんばんは。 なおき(@naoki_finance)です。 次回まで作っていたbotでは、外出先でbotが動いているのか止まっているのか把握できません。 そこで今回は稼動状況をTwitterにTwee ...
今回の内容の動画もyoutubeにアップしていますのでご覧ください↓