BitMexのポジションと資産情報をLINEに通知するbotを作った
スポンサーリンク

BitMexでBTC FXをしていて時間の無い時に指値しておいたりストップかけて寝ポジしたりしますが、あのポジションどうなった!?

とか気になりますよね。

もちろんログインすれば確認できますがログインするまで結構面倒ですし、スマホだとすぐセッションが切れてしまって不便です。

そこで、指値が刺さったりしてポジションに変化があった時にLINE Notifyを使ってLINEに通知してくれる監視botを作りました。

GitHubにコードを公開してあります。

クローンするか、zipでダウンロードして使ってください。

BitMexLineNotifyBot

概要

  • BitMexの資産を監視してLINEに通知するBotです。
  • β版の為、不具合がある場合があります。
  • 不具合を発見した場合は連絡を頂けると助かります。
  • また、ベースにしたコードから不要なコードが残っている場合がありますが、動作には影響ありません。
  • これをベースに改変する場合は注意してください。
  • 資産やポジションを監視して通知するだけなので、勝手に注文/注文キャンセルしたり出金する事はありません。

仕様

  • Bot起動時に起動通知と現在の資産情報を通知
  • 数秒毎(デフォルト:6秒)にポジション情報を取得
  • ポジションを持つ、ポジションに変更がある、ポジションを決済するタイミングでLINE通知
  • 決済(=ポジション無し)した場合はイン - アウトの差分を見て損益を通知
  • XBT/USDのみ対応、その他通貨ペアは未対応

※数秒毎に監視する為、その時間内にポジション無し→有り→無しのように瞬間的に状態が変わった場合は検知できません。

通知する項目

  • 合計資産(XBT)
  • 使用済み資産(XBT)
  • 使用可能資産(XBT)
  • ポジションのサイズ(USD)
  • ポジションの値(XBT)
  • 参入価格(USD)
  • 精算価格(USD)
  • 証拠金(XBT)
  • 未実現損益(XBT:ROE%)
  • 実現損益(XBT)
※ポジションサイズの-記号はショート、-が無ければロング

LINEの通知画面

起動時

line_notify_1

ポジションを持った時

line_notify_2

ポジションの方向や量が変化した時

line_notify_3

ポジションを決済した時

line_notify_4

必要な設定事項

  • Cloud9などPython環境の設定
  • Python環境へのコード配置
  • LINE NotifyのAPIキー作成・設定
  • BitMexのAPIキー作成・設定

開発言語・稼働環境

Visual StudioとPythonで開発しています。

  • Python環境がインストールされた自身のPCにコードを配置して稼働(Visual Studioでも動作可能)
  • Cloud9(AWSのサービス)にコードを配置して稼働
  • その他Pythonが動作するクラウドサービス、環境にコードを配置して稼働

AWS Cloud9での設定方法

Pythonが動けば何でも良いのですが、24時間監視する事を考慮すると無償利用枠があり安価で、コードの修正もしやすいCloud9で運用するのがおすすめなので、ここではCloud9での設定方法を書いていきます。

まずはAWSアカウントを作成し、マネジメントコンソールにログインします。

AWSアカウント作成は公式のドキュメントがわかりやすいです。

AWSアカウント作成

Cloud9環境の作成・設定

マネジメントコンソールの検索窓にCloud9と入れて進みます。

search_cloud9
Create environmentをクリックします。

 

任意の名前を入れてNext Stepをクリックします。

Cost-saving settingsはコスト低減の為に自動でシャットダウンするまでの時間です。
24時間監視をしたい場合はNever(シャットダウンしない)を設定してください。
その他は基本的にはデフォルトの設定で問題ありません。
Instance typeはt2.microだと無償利用できるはずです。
設定に問題が無ければNext Stepへ。

最後に設定の確認をしてCreate environmentでCloud9のインスタンスが作成されます。

Cloud9へのコードの配置・Python設定

GitHubからクローン or zipでダウンロードしたプロジェクトから以下のファイルをCloud9にドラッグ&ドロップするか、上のメニューバーから

File -> Upload Local Files...
を使ってアップロードします。
  • ccxtWrapper.py
  • LineNotify.py
  • LineNotifyBot.py
  • orderInfo.py
  • orderManager.py
  • tradeHistory.py 

files

※2019/08/06 追記

取引履歴機能通知の追加に伴い、tradeHistory.pyを追加しました。

 

 

Python3設定

右上の歯車を押してプロジェクトの設定を行います。

Python SupportのPython Version:をPython3に変更します。
ちなみにここでもEC2 InstanceのStop my enviroment:の項目でCloud9の自動シャットダウン設定を変更できます。
python3_settings

 

次に画面下のコンソールでPython3の設定をします。

デフォルトではPython2の設定になっている為、まずはエイリアスをpython3に上書きし、pythonに関連付けるバージョンの選択肢が表示されるので2を選択します。
(+が現在の設定)
alias python="python3"
sudo update-alternatives --config python
# 選択肢が表示されたら2を入力してenter.

pipのアップグレードを行います。

sudo pip install --upgrade pip
一応Pythonとpipのバージョンを確認しておきましょう。
python -V
pip -V
Pythonが3.x.x、pipが19.x.x以上になっていればOKです。
ccxt(BitMexなどの取引所と通信する為のライブラリ)をインストールします。
sudo python3 -m pip install ccxt

上記のコマンドを順番に打ち込んで行くと以下のような画面になると思います。

エラーが発生しなければOKです。

これでPython環境とコードの準備ができました。
後はBitMexとLINE NotifyそれぞれのAPIキーをコピペすれば動かせます。

LINE NotifyのAPIキー作成と設定

LINE Notifyについては過去の記事にもあります。

まずはLINE Notifyに自分のLINEアカウントでログインし、APIキーを作成します。

右上の自分の名前 -> マイページ -> アクセストークンの発行(開発者向け) -> トークンを発行する
で任意のトークン名を入力し、通知を送信するトークルームを選択してください。
1:1でも作成済のグループでも通知する事ができます。
ここで設定した名前が通知の際に[BitMexBot]のように通知されます。
発行したAPIキーをコピーし、LineNotify.pyのlineNotifyTokenの""中に貼り付けてください。
※APIキーはここを離れると見れなくなります。必ずこの時点でコピペしましょう。紛失した場合は再発行してください。
lineNotifyToken = "LINE NotifyのAPIキーを入れてください"

 

BitMexのAPIキー発行・設定

BitMexにログインし、API -> APIキーの管理 -> APIキーを作成 画面で任意の名前をつけてAPIキーを作成を押してください。
CIDRは特に不要、キーのアクセス許可は注文/注文キャンセルどちらでも構いません。出金にはチェックを入れない方が無難です。
2FAの設定をしている方は2要素トークン欄への入力を忘れないでください。

 

bitmex_apikey

作成したAPIキーのをccxtWrapper.pyにコピペします。
IDをapikey、秘密鍵をsecretにそれぞれ貼り付けてください。
テストネット/メインネットを切り替えられるようにしていますので、普通に取引する方メインネットの方(elseの方)に間違えずに貼り付けてください。
def __init__(self, exchangeNetwork: str):
        if exchangeNetwork == "test":
            self.__bitmex = ccxt.bitmex({
                "apiKey": "BitMexテストネットのAPIキーを入れてください",
                "secret": "BitMexテストネットのシークレットキーを入れてください",
            })
            self.__bitmex.urls["api"] = self.__bitmex.urls["test"]
            print("connection:test net")
        else:
            self.__bitmex = ccxt.bitmex({
                "apiKey": "BitMexメインネットのAPIキーを入れてください",
                "secret": "BitMexメインネットのシークレットキーを入れてください",
            })
            print("connection:main net")

監視bot起動

BitMexとLINE NotifyのAPIキーをコードにコピペしたらbotを起動します。
LineNotifyBot.pyでテストネット/メインネットを切り替えるコードで以下のようにメインネットが選択されている事を確認してください。
# メインプログラム
# 初期化
# bitmex = ccxtWrapper.ccxtWrapper(ccxtWrapper.ccxtWrapper.EXCHANGE_TYPE_TESTNET) #テストネット
bitmex = ccxtWrapper.ccxtWrapper(ccxtWrapper.ccxtWrapper.EXCHANGE_TYPE_MAINNET)
LineNotifyBot.py を開き、その状態でCloud9画面上部真ん中のRunボタンを押すとbotが起動します。

run

自分のLINEにbot起動通知が来ているか確認してください。

line_notify_1

 

通知が来ていれば無事設定と起動完了です!

お疲れ様でした!

スポンサーリンク

Twitterでフォローしよう

おすすめの記事