#23 Bitbank Private APIを使う
こんばんは、トビーです。
前記事に続き、仮想通貨関係です。
今回は、「自身の注文履歴、資産残高の確認や、新規注文をするため」のPrivate APIを使ってみたという記事です。
0. 前提
Private APIは個人の情報を取得しにいくため、認証が必要となります。認証には、2つのキーが必要となります。キーの取得の仕方、プログラム上での記述方法は下記の記事にまとめてありましたので、参照してください。
■dot blog : bitbank(ビットバンク)の公式APIの始め方(Python用コード)
https://dot-blog.jp/news/bitbank-api-beginners-haw-to/
キーは個人情報になるので、githubとかに記載しないよう気をつけてください。
#python_bitbankccのパッケージをインポート
import python_bitbankcc
from datetime import datetime
import key # キーは外出し。絶対に漏らさないこと。
#Keyのセット
API_KEY = key.set_API_Key()
SECRET_KEY = key.set_Secret_Key()
#Private API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, SECRET_KEY)
私は上記のように、2つのキーはメインプログラムに書かず、外出しにしました。set_API_Key(),set_Secret_key()は自作してください。
このプログラムは、Private APIを使うためのおまじないなので、以後、省略します。
1. アセット情報を出力
[お断り] Private APIは出力結果に個人情報が含まれるので、プログラムのみの掲載とします。
自身が保有している通貨に関する情報を出力するプログラムです。
#アセット情報の取得
assets = prv.get_asset()
asset_ex = assets['assets'][1] # 1 : btc
print('通貨: ' + asset_ex['asset'])
print('利用可能な数量: ' + asset_ex['free_amount'])
print('保有量: ' + asset_ex['onhand_amount'])
print('ロックされている数量: ' + asset_ex['locked_amount'])
print('手数料: ' + asset_ex['withdrawal_fee'])
asset_ex = assets['assets'][1] でBTCに関する情報を取得しています。2次元配列の2次元目の数値を変えることにより、通貨は変更できます。
[0] : `jpy` [1] :`btc` [2] : `xrp` [3] : `ltc`
[4] : `eth` [5] : `mona` [6] : `bcc`
2. 過去の注文情報を表示する
注文IDを指定して、その注文に関する情報を出力するプログラムです。注文IDは、実際にbitbankにアクセスして確認してください。IDが振られていれば何でもよいです。
#注文情報の取得
order = prv.get_order('通貨ペア', '注文ID')
print('注文ID: ' + str(order['order_id']))
print('通貨ペア: ' + order['pair'])
print('売買: ' + order['side'])
print('注文タイプ: ' + order['type']) # 指値 or 成行
print('注文数量: ' + order['start_amount'])
print('未約定数量: ' + order['remaining_amount'])
print('約定数量: ' + order['executed_amount'])
#成行注文でpriceを表示しようとしたら、プログラムが落ちたので暫定対策。
if order['type'] == 'limit' :
print('注文価格: ' + order['price'])
if order['type'] == 'market' :
print('平均約定価格: ' + order['average_price'])
print('注文日時: ' + str(datetime.fromtimestamp(order['ordered_at']/1000.0)))
print('ステータス: ' + order['status'])
複数個の注文情報を表示することも可能です。
#複数の注文情報の取得
o_ids = ['注文ID1', '注文ID2', '注文ID3']
orders = prv.get_orders_info('通貨ペア', o_ids)
for order in orders['orders'] :
print('注文ID: ' + str(order['order_id']))
print('通貨ペア: ' + order['pair'])
print('売買: ' + order['side'])
print('注文タイプ: ' + order['type']) # 指値 or 成行
print('注文数量: ' + order['start_amount'])
print('未約定数量: ' + order['remaining_amount'])
print('約定数量: ' + order['executed_amount'])
if order['type'] == 'limit' :
print('注文価格: ' + order['price'])
if order['type'] == 'market' :
print('平均約定価格: ' + order['average_price'])
print('注文日時: ' + str(datetime.fromtimestamp(order['ordered_at']/1000.0)))
print('ステータス: ' + order['status'])
print('---------------------------------')
3. 現在、発注している注文情報を表示する
現在、発注している注文情報を出力するプログラムです。
#アクティブ注文情報の取得
orders = prv.get_active_orders('通貨ペア')
for order in orders['orders'] :
print('注文ID: ' + str(order['order_id']))
print('通貨ペア: ' + order['pair'])
print('売買: ' + order['side'])
print('注文タイプ: ' + order['type']) # 指値 or 成行
print('注文数量: ' + order['start_amount'])
print('未約定数量: ' + order['remaining_amount'])
print('約定数量: ' + order['executed_amount'])
if order['type'] == 'limit' :
print('注文価格: ' + order['price'])
if order['type'] == 'market' :
print('平均約定価格: ' + order['average_price'])
print('注文日時: ' + str(datetime.fromtimestamp(order['ordered_at']/1000.0)))
print('ステータス: ' + order['status'])
print('---------------------------------')
4. 約定履歴を表示する
自身の取引履歴を出力するプログラムです。
#約定履歴の取得
trades = prv.get_trade_history('通貨ペア', '10')
for trade in trades['trades'] :
print('取引ID: ' + str(trade['trade_id']))
print('通貨ペア: ' + trade['pair'])
print('注文ID: ' + str(trade['order_id']))
print('売買: ' + trade['side'])
print('注文タイプ: ' + trade['type']) # 指値 or 成行
print('注文量: ' + trade['amount'])
print('価格: ' + trade['price'])
print('Maker/Taker: ' + trade['maker_taker'])
print('ベース手数料: ' + trade['fee_amount_base'])
print('クォート手数料: ' + trade['fee_amount_quote'])
print('約定日時: ' + str(datetime.fromtimestamp(trade['executed_at']/1000.0)))
print('---------------------------------')
trades = prv.get_trade_history('通貨ペア', '10')の第2引数は、表示する約定情報の個数です。この場合、10個の約定情報が表示されます。
ここまでは、何度実行しても自身の資産運用には影響ありません。
5. 新規注文をする
新規に発注するプログラムになります。実際に注文が入るため、試す時は支障がない額で実行することをオススメします。
#注文内容をセット
o_pair = '通貨ペア'
o_price = '売買価格'
o_amount = '注文量'
o_side = 'buy' or 'sell' # buy(買い) or sell(売り)
o_type = 'limit' or 'marker' # limit(指値) or market(成行)
#新規注文
order = prv.order(o_pair, o_price, o_amount, o_side, o_type)
#注文情報の表示
print('注文ID: ' + str(order['order_id']))
print('通貨ペア: ' + order['pair'])
print('売買: ' + order['side'])
print('注文タイプ: ' + order['type'])
print('注文数量: ' + order['start_amount'])
print('未約定数量: ' + order['remaining_amount'])
print('約定数量: ' + order['executed_amount'])
if order['type'] == 'limit' :
print('注文価格: ' + order['price'])
if order['type'] == 'market' :
print('平均約定価格: ' + order['average_price'])
print('注文日時: ' + str(datetime.fromtimestamp(order['ordered_at']/1000.0)))
print('ステータス: ' + order['status'])
最終行のステータスは下記のいずれかが出ます。
`UNFILLED` : 注文中
`PARTIALLY_FILLED` : 注文中(一部約定)
`FULLY_FILLED` :約定済み
`CANCELED_UNFILLED` : 取消済
`CANCELED_PARTIALLY_FILLED` : 取消済(一部約定)
このプログラムを実行した後、bitbankを見に行ったところ、発注されていることを確認できました。
6. 注文をキャンセルする
注文IDを指定して、その注文をキャンセルするプログラムです。
#キャンセルする注文内容をセット
o_pair = '通貨ペア'
o_id = '注文ID'
#注文をキャンセル
order = prv.cancel_order(o_pair, o_id)
#キャンセルした注文情報の表示
print('取引ID: ' + str(order['order_id']))
print('通貨ペア: ' + order['pair'])
print('売買: ' + order['side'])
print('注文タイプ: ' + order['type'])
print('注文数量: ' + order['start_amount'])
print('未約定数量: ' + order['remaining_amount'])
print('約定数量: ' + order['executed_amount'])
if order['type'] == 'limit' :
print('注文価格: ' + order['price'])
if order['type'] == 'market' :
print('平均約定価格: ' + order['average_price'])
print('注文日時: ' + str(datetime.fromtimestamp(order['ordered_at']/1000.0)))
print('ステータス: ' + order['status'])
このプログラムを実行した後、bitbankを見に行ったところ、該当の注文がキャンセルされていることが確認できました。
Public APIやPrivate APIを使って、様々な情報を取得したり、発注することができました。Private APIは今回紹介したAPIの他に、出金に関するAPIがありますが、使いそうにないので、今回は省略しました。
次は、
・移動平均線(SMA) や 相対力指数(RSI) の計算
・可視化
にチャレンジしていきたいなと思います。
記事へのスキ・コメント・noteのフォローをお待ちしております。 また、Twitter( https://twitter.com/tobi_odekake )もやっておりますので、こちらもフォロー歓迎します! 今後の励みにしていきます。