bitmexのbot作りたいからccxtを触り始めた
bitmex用botを作りたくなってccxtを使おうと思ったので、やりながらメモ
python3.6.3 ipythonで見ながら
導入 github.com
- 対応取引所の表示
In [1]: import ccxt In [2]: print(ccxt.exchanges) ['_1broker', '_1btcxe', 'acx', 'allcoin', 'anxpro', 'bibox', 'binance', 'bit2c', 'bitbay', 'bitcoincoid', 'bitfinex', 'bitfinex2', 'bitflyer', 'bithumb', 'bitlish', 'bitmarket', 'bitmex', 'bitso', 'bitstamp', 'bitstamp1', 'bittrex', 'bitz', 'bl3p', 'bleutrade', 'braziliex', 'btcbox', 'btcchina', 'btcexchange', 'btcmarkets', 'btctradeim', 'btctradeua', 'btcturk', 'btcx', 'bxinth', 'ccex', 'cex', 'chbtc', 'chilebit', 'cobinhood', 'coincheck', 'coinegg', 'coinexchange', 'coinfloor', 'coingi', 'coinmarketcap', 'coinmate', 'coinsecure', 'coinspot', 'coolcoin', 'cryptopia', 'dsx', 'exmo', 'flowbtc', 'foxbit', 'fybse', 'fybsg', 'gatecoin', 'gateio', 'gdax', 'gemini', 'getbtc', 'hitbtc', 'hitbtc2', 'huobi', 'huobicny', 'huobipro', 'independentreserve', 'itbit', 'jubi', 'kraken', 'kucoin', 'kuna', 'lakebtc', 'liqui', 'livecoin', 'luno', 'lykke', 'mercado', 'mixcoins', 'nova', 'okcoincny', 'okcoinusd', 'okex', 'paymium', 'poloniex', 'qryptos', 'quadrigacx', 'quoinex', 'southxchange', 'surbitcoin', 'therock', 'tidex', 'urdubit', 'vaultoro', 'vbtc', 'virwox', 'wex', 'xbtce', 'yobit', 'yunbi', 'zaif', 'zb']
- Bitmexアクセス用と買い板・売り板を見る
In [3]: exchange = ccxt.bitmex() In [4]: orderbook = exchange.fetch_order_book('BTC/USD') In [5]: orderbook Out[5]: {'asks': [[8704.5, 535915], [8705, 7928], [8706, 2523], [8706.5, 10000], [8707, 4116], [8708.5, 255], [8709, 9087], [8709.5, 52747], 略
- テスト用にする?(よくわかってない)
In [6]: print(exchange.urls['api'], exchange.urls['test']) https://www.bitmex.com https://testnet.bitmex.com In [7]: exchange.urls['api'] = exchange.urls['test']
urlを見る限りはtestのほうを入れればテスト用のとこにAPIを投げれる…?のかな…?
- apiKeyとsecretの設定方法
In [11]: exchange.apiKey = APIKEY In [12]: exchange.secret = SECRET In [18]: exchange.urls['api'] = 'https://www.bitmex.com' In [19]: exchange.fetch_balance() Out[19]: {'BTC': {'free': 見せられないよ!
btc入金済みならfree以降に額が表示される。 exchange.urls['api']をtestのほうで上書きすると、balanceでダメなURLじゃん!といわれるので元に戻した。
- 1分足のデータを得る
In [20]: exchange.fetch_ohlcv(symbol = 'BTC/USD', timeframe = '1h', since = 1462425900000, limit = 10) Out[20]: [[1462428000000, 447.2, 447.19, 446.67, 447, 8265], [1462431600000, 447, 446.82, 445.94, 446.82, 8069], [1462435200000, 446.82, 447.59, 446.81, 447.22, 7786], [1462438800000, 447.22, 447.41, 447.25, 447.31, 148], [1462442400000, 447.31, 447.25, 446.42, 447.25, 10010], [1462446000000, 447.25, 446.21, 445.43, 445.43, 13230], [1462449600000, 445.43, 446.53, 445.62, 445.62, 135224], [1462453200000, 445.62, 447.26, 445.84, 447.06, 30537], [1462456800000, 447.06, 448.13, 446.91, 448.13, 25492], [1462460400000, 448.13, 447.99, 447.88, 447.9, 4110]]
デフォルトは、 timeframe = '1m', since = None, limit = 100。 現在時刻から100件1分足でとってくる。 左からタイムスタンプ,Open, High, Close, Low, Volume (多分)。 タイムスタンプはミリ秒が最小単位の時間。 1hでとったので3600秒(3600000ミリ秒)進んでいることがわかる。
- 指値買い注文を入れる
In [36]: exchange.create_order(symbol='BTC/USD', type='limit', side='buy', amount=1, price=8770) Out[36]: {'id':
お値段は適当です。
SSとってる間に約定されてしまった。 amountのところは×0.0001btcされます。最小ポジションで100円(1btc=100万)になるのかな。
注文キャンセルの時にIDとか必要になるので、ちゃんと戻り値を変数に入れましょう(戒め
- ポジション一覧を見る
In [60]: exchange.private_get_position() Out[60]: [{'account': 'avgCostPrice': 8769.5, 'avgEntryPrice': 8769.5, 'bankruptPrice': 34.5, 'breakEvenPrice': 8768.5, 略
- ポジションを閉じる
まだ勉強中
In [65]: exchange.private_post_order_closeposition() --------------------------------------------------------------------------- HTTPError Traceback (most recent call last) E:\ProgramFiles\anaconda\lib\site-packages\ccxt\base\exchange.py in fetch(self, url, method, headers, body) 349 self.logger.debug("%s %s, Response: %s %s %s", method, url, response.status_code, response.headers, self.last_http_response) --> 350 response.raise_for_status() 351 E:\ProgramFiles\anaconda\lib\site-packages\requests\models.py in raise_for_status(self) 934 if http_error_msg: --> 935 raise HTTPError(http_error_msg, response=self) 936 HTTPError: 400 Client Error: Bad Request for url: https://www.bitmex.com/api/v1/order/closePosition During handling of the above exception, another exception occurred:
多分こいつを使うが、パラメータの指定方法がわからん。
PriceとIDは指定しないといけないと思うのだが。
また追記します。たぶん