Python/Arduino学習記録,備忘録

コツコツ学んだ学習記録と備忘録。現在Python,Arduino勉強中。

【bitbank自動売買#3】python_bitbankccの使い方学習(プライベートAPI)

ここでは,【bitbank自動売買#2】に引き続きプライベートAPIについて学習する。


プライベートAPIを使用する際には「APIキー」「シークレット」が必要。
これらの情報は決して他人に公開してはダメ。

#AIPキー
API_KEY = 'BITBANK_API_KEY'
#シークレット
API_SECRET = 'BITBANK_API_SECRET'

これらの情報は,bitbankのAPIから確認可能。

さて,ここから実際にプログラムを動かしてみる。

1. アセット情報の取得

#python_bitbankccのパッケージをインポート
import python_bitbankcc

#APIキー,シークレットの設定
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'

#privte API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)

#アセット一覧の取得
value = prv.get_asset()

#アセット情報の一例
asset_ex = value['assets'][5]
print('通貨名:' + asset_ex['asset'])
print('保有量:' + asset_ex['onhand_amount'])
print('ロックされている量:' + asset_ex['locked_amount'])
print('利用可能な量:' + asset_ex['free_amount'])
print('引き出し手数料:' + asset_ex['withdrawal_fee'])
《出力結果》
通貨名:mona
保有量:3.55940000
ロックされている量:0.00000000
利用可能な量:3.55940000
引き出し手数料:0.00100000

get.assetを用いることで,アセット*1情報が取得可能となる。
今回は「MONA」の情報を出力している。
変数valueには「JPY」「BTC」「LTC」「XRP」「ETH」「MONA」「BCC」の順で格納されているので,「JPY」の情報を取得したい場合は以下の様にすればよい。

#BTC ⇒ JPY 
asset_ex = value['assets'][5] ⇒ asset_ex = value['assets'][0]

2. 注文IDを指定して注文情報を取得

#python_bitbankccとdatetimeのパッケージをインポート
import python_bitbankcc
import datetime

#APIキー,シークレットの設定
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'

#privte API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)

#注文情報の取得
value = prv.get_order( 'bcc_jpy', '14288606' )#'ペア', '注文ID'

#注文情報の一例
print('取引ID:' + str(value['order_id']))
print('通貨ペア:' + value['pair'])
print('売買情報:' + value['side'])
print('注文タイプ:' + value['type'])
print('注文時の数量:' + value['start_amount'])
print('未約定の数量:' + value['remaining_amount'])
print('約定済の数量:' + value['executed_amount'])
print('注文価格:' + value['price'])
print('平均約定価格:' + value['average_price'])
print('注文状態:' + value['status'])
print('注文日時:' + str(datetime.datetime.fromtimestamp(value['ordered_at']/1000)))
print('約定日時:' + str(datetime.datetime.fromtimestamp(value['executed_at']/1000)))
《出力結果》
取引ID:14288606
通貨ペア:bcc_jpy
売買情報:sell
注文タイプ:limit
注文時の数量:0.07260000
未約定の数量:0.00000000
約定済の数量:0.07260000
注文価格:165000.0000
平均約定価格:165000.0000
注文状態:FULLY_FILLED
注文日時:2018-05-13 21:48:23.977000
約定日時:2018-05-14 06:12:58.246000

get_orderを用いることで,指定したIDの注文情報が取得可能となる。
また,prv.get_orders_infoを用いることで,複数の注文IDを指定することが可能となる。

使い方
単数:prv.get_order( 'ペア', '注文ID' )
複数:prv.get_orders_info(  'ペア', ['注文ID', '注文ID', .....] )

「注文状態」には,「UNFILLED(注文中)」「PARTIALLY_FILLED(注文中(一部約定))」「FULLY_FILLED(約定済み)」「CANCELED_UNFILLED(取消済)」「CANCELED_PARTIALLY_FILLED(取消済(一部約定))」の5種類存在する。

3. アクティブな注文情報を取得

#python_bitbankccとdatetimeのパッケージをインポート
import python_bitbankcc
import datetime

#APIキー,シークレットの設定
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'

#privte API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)

#アクティブな注文一覧の取得
value = prv.get_active_orders( 'bcc_jpy' )

#注文一覧の一例
order_ex = value['orders'][0]
print('取引ID:' + str(order_ex['order_id']))
print('通貨ペア:' + order_ex['pair'])
print('売買情報:' + order_ex['side'])
print('注文タイプ:' + order_ex['type'])
print('注文時の数量:' + order_ex['start_amount'])
print('未約定の数量:' + order_ex['remaining_amount'])
print('約定済の数量:' + order_ex['executed_amount'])
print('注文価格:' + order_ex['price'])
print('平均約定価格:' + order_ex['average_price'])
print('注文状態:' + order_ex['status'])
print('注文日時:' + str(datetime.datetime.fromtimestamp(order_ex['ordered_at']/1000)))
《出力結果》
取引ID:14771060
通貨ペア:bcc_jpy
売買情報:sell
注文タイプ:limit
注文時の数量:0.07270000
未約定の数量:0.07270000
約定済の数量:0.00000000
注文価格:200000.0000
平均約定価格:0.0000
注文状態:UNFILLED
注文日時:2018-05-16 23:04:37.516000

get_active_ordersを用いることで,アクティブな注文情報が取得可能となる。

4. 新規注文を行う

本当に注文が通るので,注意して自己責任でプログラムを実行してください。

#python_bitbankccとdatetimeのパッケージをインポート
import python_bitbankcc
import datetime

#APIキー,シークレットの設定
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'

#privte API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)

#新規注文を行う:'ペア', '価格', '注文枚数', '売or買', '指値or成行'
value = prv.order( 'bcc_jpy', '200000', '0.07', 'sell', 'limit' )

#新規注文内容
print('取引ID:' + str(value['order_id']))
print('通貨ペア:' + value['pair'])
print('売買情報:' + value['side'])
print('注文タイプ:' + value['type'])
print('注文時の数量:' + value['start_amount'])
print('未約定の数量:' + value['remaining_amount'])
print('約定済の数量:' + value['executed_amount'])
print('注文価格:' + value['price'])
print('平均約定価格:' + value['average_price'])
print('注文状態:' + value['status'])
print('注文日時:' + str(datetime.datetime.fromtimestamp(value['ordered_at']/1000)))

#注文のキャンセル(ここでは,上記の注文を即時にキャンセルしている)
prv.cancel_order( value['pair'], str(value['order_id']) ) #'ペア', '注文ID'
《出力結果》
取引ID:14779241
通貨ペア:bcc_jpy
売買情報:sell
注文タイプ:limit
注文時の数量:0.07000000
未約定の数量:0.07000000
約定済の数量:0.00000000
注文価格:200000.0000
平均約定価格:0.0000
注文状態:UNFILLED
注文日時:2018-05-17 00:29:48.840000

orderにより,新規注文が可能となる。
一方で,cancel_orderにより,注文をキャンセル可能となる(複数キャンセルも可能)。

使い方
単数:cancel_order( 'ペア', '注文ID' )
複数:cancel_order( 'ペア', ['注文ID', '注文ID', .....] )

ただし,以下の様に「取引」を選択したAPIキーを発行・使用する必要があることに注意。
f:id:opuktr:20180517002535p:plain
「取引」を選択していないAPIキーを用いると,「エラーコード: 20001 内容: API認証に失敗しました」となる。

5. 約定履歴を取得する

#python_bitbankccのパッケージをインポート
import python_bitbankcc

#APIキー,シークレットの設定
API_KEY = 'BITBANK_API_KEY'
API_SECRET = 'BITBANK_API_SECRET'

#privte API classのオブジェクトを取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)

#約定履歴を取得する: 'ペア', '取得する約定数'
value = prv.get_trade_history( 'bcc_jpy', '10' )

この時「エラーコード: 20001 内容: API認証に失敗しました」を吐いてしまうので原因分析中。
(自動売買プログラムに使う時まで眠らす可能性も)
何か心当たりある方教えて頂けるとありがたいです。
もしかしたら,まだ制限されている可能性あり(以下参照)。
bitbank.cc

では,次回はいよいよ自動売買プログラムにとりかかります。

*1:資産:JPY,BTC,XRP,ETHなど