BTCFXの自動売買BOTで売買の状況をLINEに通知させる方法

外出時や仕事中でもBOTの稼働状況を監視して把握する方法の2つ目です。
前回の記事ではコマンドラインへの出力結果と同じ内容をメールで送信する方法を解説しました。

今回はもう1つの定番のLINE通知の方法について解説します! やる前は難しそうに感じるかもしれませんが、15分もかからないほど簡単なので安心してください。

BOTの状況をLINEに通知する方法

今回の記事では、PythonでLINEに通知する関数を作ります。
そしてprint文と同じように要所要所に1行入れるだけで、そのテキスト内容をLINEに飛ばす方法を解説します。

手順

(1)LINE公式ページで開発者向けのアクセストークンを発行する
(2)Pythonで自由なメッセージをLINEに飛ばす関数を作る
(3)エントリーや決済・損切りなどの箇所に1行追加して通知する

では、やっていきましょう!

1.LINE公式でアクセストークンを取得する

(1)まず最初に以下の「LINE Notify」のページにアクセスします。
https://notify-bot.line.me/ja/

右上の「ログイン」をクリックして、ご利用のLINEアカウントでログインしてください。

登録したメールアドレスを忘れた方は、LINEのスマホ端末側で、「設定 -> アカウント -> メールアドレス」で確認できます。

ログインが完了したら、右上のメニューから「マイページ」を選択してください。

マイページをクリックして画面をスクロールすると、下の方に「アクセストークンの発行(開発者向け)」という箇所があるので、そこで「トークンを発行する」をクリックしてください。

▽ アクセストークンの発行(開発者向け)

すると、以下のようなトークン発行画面になります。

▽ トークン発行画面

設定する箇所は、「トークン名」と「トークルーム」の2つです。

トークン名は何でも構いませんが、この名前で通知が来るので、通知が来たときにわかる名前を付けておきましょう。ここでは「自動売買BOT(チャネルブレイクアウト)」としています。トークルームの方は、「1:1でLINE Notifyから通知を受け取る」を選択します。

できたら「発行する」をクリックします。
すると以下のようにトークンが表示されます。

▽ 発行されたトークン番号

このトークン画面は再表示できないので、コピーをしてメモ帳などに保存しておきましょう。

ただしもし間違えて閉じてしまっても、もう1度、新しいトークンを作ればいいだけなので大した問題ではありません。

2.LINE通知する関数を作る

次はBOTのPythonコードの方です。
以下のようなLINE通知をする関数を作ります。


import requests

# 設定項目
line_token = "************"    # さっき保存したLINEトークン

# LINEに通知する関数
def line_notify( text ):
	url = "https://notify-api.line.me/api/notify"
	data = {"message" : text}
	headers = {"Authorization": "Bearer " + line_token} 
	requests.post(url, data=data, headers=headers)

はい、LINE通知する関数はこれで完成です!

これでLINEに通知を送りたい箇所に、 line_notify(“テキスト”) のかたちでコードを1行追加すれば、LINE通知を実装することができます。

LINE通知の実装例

例えば、前回の第4回「BOT作成編」の章で作成したBOTでは、エントリーするたびに以下のような出力をしていましたよね。


# 売買の決済をする箇所
if data["close_price"] < last_data["close_price"]:
	print("前回の終値を下回ったので" + str(data["close_price"]) + "あたりで成行で決済します")

ここに以下のように行を追加すれば、LINEにも同じ通知を送ることができます。


# 売買の決済をする箇所
if data["close_price"] < last_data["close_price"]:
	print("前回の終値を下回ったので" + str(data["close_price"]) + "あたりで成行で決済します")
	line_notify("前回の終値を下回ったので" + str(data["close_price"]) + "あたりで成行で決済します")

同じことを2回書かないといけませんが、エントリー・決済・損切りなどの重要な箇所だけLINEに通知させたいのであれば、この方法が一番いいと思います。

3.出力を全て1行にまとめたい場合

逆にすべての print文の出力結果をLINEにも通知したい場合は、全部の箇所で同じことを2回書くよりも、1つの関数にまとめてしまった方が管理が楽です。

例えば、前回の記事の内容とあわせて、コマンドラインへの標準出力・ログファイルへの書き出し・LINEへの通知をすべて1つの関数にまとめておけば、コードはもっとすっきりします。


import requests
from logging import getLogger,Formatter,StreamHandler,FileHandler,INFO

# ログの設定
logger = getLogger(__name__)
handlerSh = StreamHandler()
handlerFile = FileHandler("c:/Pydoc/helloBot.log")
handlerSh.setLevel(INFO)
handlerFile.setLevel(INFO)
logger.setLevel(INFO)
logger.addHandler(handlerSh)
logger.addHandler(handlerFile)

# LINEの設定
line_token = "************"

# print文のかわりに使用
def print_log( text ):
	
	# コマンドラインへの出力とファイル保存
	logger.info( text )
	
	# LINEへの通知
	url = "https://notify-api.line.me/api/notify"
	data = {"message" : text}
	headers = {"Authorization": "Bearer " + line_token} 
	requests.post(url, data=data, headers=headers)

これで、全てのprint("")文の箇所を上記の print_log("") に置き換えれば、同じことを2回書かなくても済みます。

例えば、以下の1行だけで、コマンドラインへの出力・ファイルへのログ保存・LINEへの通知がすべて実行できます。


print_log("前回の終値を下回ったので" + str(data["close_price"]) + "あたりで成行で決済します")

ただし全ての出力内容をいちいちLINEに通知させるのは、少し鬱陶しいかもしれませんね。

コメントを残す

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