【自動売買Bot作成6】ターミナル出力をログファイルに記録するための準備をする

Botを定期実行した場合に、いちいちターミナルの出力結果を毎回見るわけにもいかないので、後で見やすいようにログファイルに記録しておきます。
ログの出力にはPythonだとloggingを使った方がよいみたいですが、いくつか設定とかをしなきゃいけないようで、それを説明するのも非常に手間なので、printを使うことにします。
別に素人が個人でやるんだからいいでしょ。

書いてたら長くなったので、今回は準備までにしました。

取引所はbitFlyerで、通貨はイーサリアムとします。
背景や前提については、以下のカテゴリーページをご覧ください。

目次

注意事項

  • 本サイトで掲載されている評価や感想等は、あくまでサイト運営者の主観であり、広告主に保証されたものではありません。
  • 暗号資産(仮想通貨)取引は、元本を保証するものでなく、価格変動により損失が生じるリスクがあります。
    お取引される際には、取引内容をよく理解し、ご自身の判断で行ってください。

Pythonのサンプルコード

いつものようにファイルを作成して、コードを入力します。
ファイル名は「put_log.py」としました。

from datetime import datetime
import requests

# 基本変数設定
main_url = 'https://api.bitflyer.com'
product_code = 'ETH_JPY'
param_only_product_code = {
    'product_code': product_code
}

# 終了メッセージ出力用関数
def end_msg():
    print('------------------------------')
    print('End Time: ' + str(datetime.now())[:-7])
    print('------------------------------')
    print()
    print()

# 通常メッセージ出力用関数
def put_msg(msg):
    print(str(datetime.now())[:-7], msg)

# requests.get用関数
def requests_get(sub_url, params):
    return requests.get(
        main_url + sub_url,
        params = params
    ).json()


# 開始メッセージ出力
print('------------------------------')
print('Start Time: ' + str(datetime.now())[:-7])
print('------------------------------')

# 板の状態確認
path_getstate = '/v1/getboardstate'
result_getstate = requests_get(path_getstate, param_only_product_code)

# 板の状態が正常でなければ終了
if result_getstate['health'] != 'NORMAL' and result_getstate['state'] != 'RUNNING':
    put_msg('板の状態が正常ではないためプログラムを終了します。')
    end_msg()
    exit()
put_msg('板の状態は正常です。')

# 終了メッセージ出力
end_msg()

Pythonの実行結果

------------------------------
Start Time: 2022-03-20 15:51:01
------------------------------
2022-03-20 15:51:01 板の状態は正常です。
------------------------------
End Time: 2022-03-20 15:51:01
------------------------------

Pythonサンプルコードの説明

必要そうなところだけ説明します。

終了メッセージ出力用関数

# 終了メッセージ出力用関数
def end_msg():
    print('------------------------------')
    print('End Time: ' + str(datetime.now())[:-7])
    print('------------------------------')
    print()
    print()

この「def」から始まるものは関数と呼ばれるものになります。
同じ処理を何度も書くのを避ける場合などに使います。

datetime.now()」の後ろにある、「[:-7]」はスライスと呼ばれるもので、以下のような感じで文字をカットできます。
今回は秒より細かい時間は必要ないのでカットしています。

>>> str(datetime.now())
'2022-03-21 11:00:03.098143'

>>> str(datetime.now())[:-7] 
'2022-03-21 11:03:48'

通常メッセージ出力用関数

# 通常メッセージ出力用関数
def put_msg(msg):
    print(str(datetime.now())[:-7], msg)

関数は引数を取ることもできます。
この関数だと「msg」が引数および変数になり、関数を呼び出す時にこの値を入れると、出力するメッセージを変えることができます。

requests.get用関数

# requests.get用関数
def requests_get(sub_url, params):
    return requests.get(
        main_url + sub_url,
        params = params
    ).json()

requestsもこんな感じで関数にしてみました。
サブURLとパラメータはAPIごとに変わるので引数にしています。
API実行結果は関数呼び出し元に返しています。

requests_getの関数呼び出し

# 板の状態確認
path_getstate = '/v1/getboardstate'
result_getstate = requests_get(path_getstate, param_only_product_code)

今回は取引所や通貨のやり取りが問題なくできるかを確認するAPIを実行しています。

公式APIドキュメントの「板の状態」箇所

先ほどの関数「requests_get」を上記のような感じで実行します。
result_getstate」には実行結果が入ります。

板の状態が正常かどうかを確認する

# 板の状態が正常でなければ終了
if result_getstate['health'] != 'NORMAL' and result_getstate['state'] != 'RUNNING':
    put_msg('板の状態が正常ではないためプログラムを終了します。')
    end_msg()
    exit()
put_msg('板の状態は正常です。')

result_getstate」には以下のような値が入ります。

{‘health’: ‘NORMAL’, ‘state’: ‘RUNNING’}

この「health」が「NORMALではなく、さらに「state」が「RUNNINGではない場合は、ちゃんと取引できないかもしれないため、ここでプログラムを終了させています。

板の状態が正常であれば、このコードの後にいろいろな処理を書くのですが、今回はあくまでログファイルを出力するためのサンプルコードなので、ここで終わりにしています。

他は省略

まぁここまで試してきた方は、もうわかるかと思います。
不明点あればご質問いただければ回答します。

最後に

長くなったので今回はここまでにします。
次回は今回作成したPythonコードをPowerShellから実行して、出力結果をファイルに保存します。

本シリーズの一覧ページは以下にまとめています。

それでは。

  • URLをコピーしました!

コメント

コメントする

目次