こんにちは、Heywaです。
今回はFTXのAPIをCCXTから実行して、
板情報の取得と、指値での注文を実施する方法についてご紹介します。
そのままBotに利用することはできないと思いますが、参考になればと思います。
CCXTを使ってAPIの認証をするところなどは以前記事にしていますので、そちらを参考にしてください。
CCXTでFTX取引所の情報を取得(Python)
こんにちは、Heywaです。BitMEXで取引ができなくなってどうしようかと思っていたところ、FTXが話題に上がっていたので、CCXTでAPIから情報が取得できればと思って試してみました。まだ入金していないので一部は出力が確...
PythonとCCXTのバージョン
今回確認した環境を記載します。
python --version Python 3.7.3 pip freeze ccxt==1.30.20
板に並んだ情報を取得する
板情報の取得は簡単です。
以下のようにすれば結果を取得できます。
# 板情報の入手 value = ftx().fetchOrderBook("BTC-0326") pprint(value)
ここでは、来年3月末までの期限付き先物「BTC-0326」の板を取得しています。
https://ftx.com/trade/BTC-0326
ペアの確認方法については前回の記事を御覧ください。
「BTC-0326」のところを「BTC-PERP」に変えていただければ、
結果は以下のようになります。
{'asks': [[13777.0, 22.2832], [13779.5, 0.8297], [13782.0, 0.125], [13782.5, 0.479], [13784.5, 0.1337], [13790.5, 22.123], [13798.5, 0.305], [13803.5, 1.6626], [13804.0, 0.769], [13805.5, 1.9552], [13809.5, 22.268], [13813.5, 0.6417], [13821.5, 2.0176], [13823.5, 1.2719], [13825.0, 2.2536], [13829.5, 18.013], [13832.0, 0.0899], [13834.0, 0.3545], [13835.0, 0.66], [13845.5, 0.59]], 'bids': [[13768.5, 16.054], [13767.5, 0.7753], [13764.0, 0.2527], [13761.5, 21.974], [13753.5, 0.2289], [13744.0, 0.57], [13741.5, 30.824], [13735.5, 1.6622], [13735.0, 0.3235], [13733.0, 0.68], [13728.5, 0.3766], [13725.0, 0.0899], [13722.0, 0.5996], [13717.0, 17.658], [13711.0, 2.3264], [13710.5, 1.5], [13703.0, 0.4899], [13702.0, 0.3], [13701.0, 0.5159], [13699.5, 0.7]], 'datetime': None, 'nonce': None, 'timestamp': None}
ここでは、来年3月末までの期限付き先物「BTC-0326」の板を取得しています。
https://ftx.com/trade/BTC-0326
ペアの確認方法については前述した前回の記事を御覧ください。
「BTC-0326」のところを「BTC-PERP」に変えていただければ、
無期限先物の板情報を取得できます。
Bid=「売る」。Ask=「買う」ときの価格になるので、
それぞれ先頭の値が今の買値、売値となります。
以下のようにすると取得できます。
# 板情報の入手 value = ftx().fetchOrderBook("BTC-0326") pprint(value) ##1つ目の情報だけひろう print("Bid=「売る」。Ask=「買う」ときの価格") pprint("ask") pprint(value['asks'][0][1]) value['asks'][0][0] pprint("bids") pprint(value['bids'][0][1]) value['bids'][0][0]
約定しそうな値で指値注文をしてみる
雑な言い方ですが、一番約定しそうな値と数量がわかったので、
それに対して指値注文を出してみます。
#Buy Order(指値注文) print("#指値買い注文") buy = ftx().create_order('BTC-0326', type='limit', side='buy', amount=, 0.01, price=13777) pprint(buy)
amount=数量、price=価格になります。先頭の’BTC-0326’はペアになります。
これで指値で注文をだすことができます。
注文後、成立したかの確認とキャンセルの処理
注文を出せたら、出した注文が通ったかどうかを確認する必要があります。
他の方法もあるかもしれませんが、
fetch_open_ordersで注文が参照できるので、
私はその個数で通ったと判断しています。
以下のような処理をsleep入れて何度か繰り返し、
残っているようであればキャンセルしてまた指値を入れる、みたいな感じです。
# 注文状態を確認する # オープンオーダーを取得 orders = ccxtAPIobj().fetch_open_orders() print(str(len(orders)) + "個の未約定の注文があります") # 注文がなければすべての注文が通ったとみなす if len(orders) ==0 or orders == []: print("未約定の注文なし。終了")
注文をキャンセルする場合、fetch_open_ordersで注文を取得したあと、cancel_orderでキャンセルさせます。ここではすべてキャンセルさせます。
#ループさせてすべての注文をキャンセル orders = ftx().fetch_open_orders() print(str(len(orders)) + "個の未約定の注文があります") for order in orders: ftx().cancel_order(id = order["id"]) print(str(order["id"]) + "をキャンセルしました")
以上です。今回は直近でお見せできるevidenceがあまりなかったので、
わかりにくい説明で申し訳ないですが、参考になれば幸いです。
Python使えると面白いので、プログラムやったことない人も興味持っていただけると嬉しいです。
普段の仕事でも役に立つのです……。
コメント