BitMexでBTC FXをしていて時間の無い時に指値しておいたりストップかけて寝ポジしたりしますが、あのポジションどうなった!?
とか気になりますよね。
もちろんログインすれば確認できますがログインするまで結構面倒ですし、スマホだとすぐセッションが切れてしまって不便です。
そこで、指値が刺さったりしてポジションに変化があった時にLINE Notifyを使ってLINEに通知してくれる監視botを作りました。
GitHubにコードを公開してあります。
クローンするか、zipでダウンロードして使ってください。
目次
概要
- BitMexの資産を監視してLINEに通知するBotです。
- β版の為、不具合がある場合があります。
- 不具合を発見した場合は連絡を頂けると助かります。
- また、ベースにしたコードから不要なコードが残っている場合がありますが、動作には影響ありません。
- これをベースに改変する場合は注意してください。
- 資産やポジションを監視して通知するだけなので、勝手に注文/注文キャンセルしたり出金する事はありません。
仕様
- Bot起動時に起動通知と現在の資産情報を通知
- 数秒毎(デフォルト:6秒)にポジション情報を取得
- ポジションを持つ、ポジションに変更がある、ポジションを決済するタイミングでLINE通知
- 決済(=ポジション無し)した場合はイン - アウトの差分を見て損益を通知
- XBT/USDのみ対応、その他通貨ペアは未対応
※数秒毎に監視する為、その時間内にポジション無し→有り→無しのように瞬間的に状態が変わった場合は検知できません。
通知する項目
- 合計資産(XBT)
- 使用済み資産(XBT)
- 使用可能資産(XBT)
- ポジションのサイズ(USD)
- ポジションの値(XBT)
- 参入価格(USD)
- 精算価格(USD)
- 証拠金(XBT)
- 未実現損益(XBT:ROE%)
- 実現損益(XBT)
LINEの通知画面
ポジションを持った時
必要な設定事項
- 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アカウント作成は公式のドキュメントがわかりやすいです。
Cloud9環境の作成・設定
最後に設定の確認をしてCreate environmentでCloud9のインスタンスが作成されます。
- ccxtWrapper.py
- LineNotify.py
- LineNotifyBot.py
- orderInfo.py
- orderManager.py
- tradeHistory.py ※
※2019/08/06 追記
取引履歴機能通知の追加に伴い、tradeHistory.pyを追加しました。
次に画面下のコンソールでPython3の設定をします。
alias python="python3" sudo update-alternatives --config python # 選択肢が表示されたら2を入力してenter.
pipのアップグレードを行います。
sudo pip install --upgrade pip
python -V pip -V
LINE NotifyのAPIキー作成と設定
LINE Notifyについては過去の記事にもあります。
まずはLINE Notifyに自分のLINEアカウントでログインし、APIキーを作成します。
[BitMexBot]
のように通知されます。lineNotifyToken = "LINE NotifyのAPIキーを入れてください"
BitMexのAPIキー発行・設定
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 = ccxtWrapper.ccxtWrapper(ccxtWrapper.ccxtWrapper.EXCHANGE_TYPE_TESTNET) #テストネット bitmex = ccxtWrapper.ccxtWrapper(ccxtWrapper.ccxtWrapper.EXCHANGE_TYPE_MAINNET)
通知が来ていれば無事設定と起動完了です!
お疲れ様でした!