見出し画像

【自動売買】BitMEX簡単イナゴスキャルピングbot【プログラム】

今回はBitMEXのリアルタイムデータ(Websocket)の仕組みを利用してBTCFXで簡単にイナゴスキャルピングbotを作成するためのプログラムを作成します。
使用する言語はpythonとなり、BitMEX公式が提供しているライブラリを使用します。

4/16(月) 読者の方から頂いた情報を元に注文方法をFillOrKillからImmidiateOrCancellに修正いたしました。

前回の記事「【自動売買】スキャルピングテクニック【プログラム】」では売買処理までは記載していませんが、今回の記事では手順通り進めることで実際に売買を行うことができるbotが作成できます

また今回は簡単に様々なカスタマイズができるようにアカウントのbalance、ポジションの利益表示、ポジションの数量の取得や表示、イナゴの売買判定の調整を用意して導入後に簡単に調整できるように作成し、完成したファイルは初心者でも理解しやすいようにできるだけコードの総量を少なくし、コメントをたくさん入れています。
testnetでの試験運用も可能です。

では実際に作成について記載していきます。

1 . ライブラリのダウンロード

まず、公式のWebsocketとRest-APIのクライアントをダウンロードし、使用できる状態にするため、

pipで2つのライブラリをダウンロードしましょう

BitMEX公式が提供しているRest-APIクライアントのダウンロード

pip install bitmex

BitMEX公式が提供しているWebsocketクライアントのダウンロード

pip install bitmex-ws

この2つをダウンロードしておくことでRest API, Webscketでのリアルタイム通信が簡単に実施できるようになります。

2 . 実装(ライブラリのインポートとAPIキーの設定)

ライブラリのダウンロードが終わったら任意のpythonファイル(.py)を作成し、以下のコードを記載してください。

from bitmex_websocket import BitMEXWebsocket
import bitmex
import logging
import json
from time import sleep
# testnet
T_END_URL = "https://testnet.bitmex.com/api/v1"
T_API_KEY = "<testnetのAPI KEY>"
T_API_SEC = "<testnetのAPI SECRET>"
# product
P_END_URL = "wss://www.bitmex.com/realtime"
P_API_KEY = "<本番用のAPI KEY>"
P_API_SEC = "<本番用のAPI SECRET>"
# DBUG
TEST  = False     # testnetの場合はTrue
ORDER = False    # 注文を行う場合はTrue情報だけ見たい場合はFalse

まずimportで必要なライブラリを参照します。
そのあとにBitMEXが用意している本番とtestnetそれぞれで使用するAPI KEYとSECRETを設定します。
URLについては固定なので変更はしないでください。

また、後述にてコードを作成していきますが、TESTフラグとORDERフラグを用意してTESTフラグがTrueならtestnetを利用、ORDERフラグがTrueならシグナルに合わせて実際に売買を行う
という風にしていきます。

3 . 実装(シグナル判定用の設定値及び注文処理の各種設定)

先ほどのコードの下に以下のコードを追加してください。

# 設定値
ORDER_SIZE      = 100       # 一回の注文の数量(ドル)
ORDER_MAX_SIZE  = 300       # 注文最大数(ドル)
BORDER_VOL      = 500000    # 売買シグナル基準数量
BORDER_PER      = 0.7       # 売買シグナル偏り基準
POLLING_TIME    = 1         # ループ間隔(秒)
PROFIT          = 100       # 利益確定値
LOSS_AMOUNT     = -100      # 損切りの値

こちらも後ほどこの設定を使用して判定を行っていきますが、注意点として

ORDER_SIZE

BitMEXはBTCFXにてsizeをドルで設定するようになっているので、
初期値を100にしていますが、100BTCという意味ではありません。

POLLING_TIME

こちらはwebsocketの情報を監視する間隔を設定しており、
初期値として1秒としていますが、これ以下に設定しないほうが良いです。
(毎回ポジションをチェックするAPIを発行していますが、1秒以下にしてこれを実行すると、API実行可能回数が減っていく可能性があります。)

4 . 実装(メイン処理関数及び各種インスタンス化処理)

起動時に1回だけ呼び出すメイン処理と各種インポートしたライブラリのインスタンス化を行います。
先ほどのコードの下に以下のコードを追加してください。

def run():
    
    # 使用環境の設定
    env_url = T_END_URL if TEST == True else P_END_URL
    env_key = T_API_KEY if TEST == True else P_API_KEY
    env_sec = T_API_SEC if TEST == True else P_API_SEC
    # 初期処理
    logger = setup_logger()
    client = bitmex.bitmex(test=TEST, api_key=env_key, api_secret=env_sec)
    ws = BitMEXWebsocket(endpoint=env_url, symbol="XBTUSD", api_key=env_key, api_secret=env_sec)
    instrument = ws.get_instrument()
    # logger.info("Instrument data: %s" % instrument)

「def run」は作成しているpythonファイルが起動された際に一度だけ呼ばれるメイン処理です。

websocketのループ処理等メインで使用する処理は全てこの関数の中に作成していきます、「def run」でまず一番最初にTESTフラグを見て環境の判定を実施し、url. API KEY, API SECRETの設定を行います。

ここから先は

13,269字

¥ 3,500

プログラムのことに関しては言語問わず対応できます。主にこれからプログラムを覚えていきたい+仮想通貨で自動売買をしたい人向けに記事を書いていきます。