CCXT:加密貨幣量化交易神器
Python中文社區(qū) (ID:python-china)
CCXT框架 是一個(gè)Python/Javascript/PHP的一個(gè)交易API框架,對(duì)接超過(guò)130多個(gè)交易所。可用于世界各地的加密貨幣交易所的連接和交易,以及轉(zhuǎn)賬支付處理,可用于存儲(chǔ)數(shù)據(jù),分析,可視化,指標(biāo)開(kāi)發(fā),算法交易,是一個(gè)非常容易集成的開(kāi)箱即用的統(tǒng)一API。
CCXT框架Github地址:
當(dāng)前功能列表:
- 支持許多交易市場(chǎng),甚至即將推出的
- 為所有交易提供完整的公共和私人API
- 所有貨幣,山寨幣和標(biāo)記,價(jià)格,訂單,交易,代碼等…
- 提供用于交叉交換或跨貨幣分析和套利的可選標(biāo)準(zhǔn)化數(shù)據(jù)
- 開(kāi)箱即用的統(tǒng)一的一體化API,非常易于集成
- 適用于Node7.6+,Python2和3,PHP5.4+,Web瀏覽器
認(rèn)證交易所
支持的加密貨幣交易所
ccxt庫(kù)目前支持以下131個(gè)加密貨幣交易所和交易API,可以在github查看。上面的列表經(jīng)常更新,新的加密市場(chǎng),山寨幣交換,錯(cuò)誤修復(fù),API端點(diǎn)定期引入和添加。有關(guān)詳細(xì)信息,請(qǐng)參閱手冊(cè),如果你沒(méi)有在上面的列表中找到加密貨幣交易市場(chǎng)和/或想要添加其他交易所,請(qǐng)通過(guò)GitHub或通過(guò)電子郵件在此處發(fā)布問(wèn)題來(lái)發(fā)布或向我們發(fā)送鏈接。
該庫(kù)受到MIT許可,這意味著任何開(kāi)發(fā)人員都可以完全免費(fèi)構(gòu)建商業(yè)和開(kāi)源軟件,但使用它需要你自擔(dān)風(fēng)險(xiǎn)且無(wú)需擔(dān)保。
安裝
安裝ccxt庫(kù)的最簡(jiǎn)單方法是使用內(nèi)置包管理器:
- NPM中的ccxt(JavaScript/Node v7.6+)
- PyPI中的ccxt(Python 2和3.5.3+)
- Packagist/Composer中的ccxt(PHP 5.4+)
該庫(kù)作為一體化模塊實(shí)現(xiàn)提供,具有最小的依賴(lài)性和要求:
- js/在JavaScript中
- python/在Python中(從JS生成)
- PHP/ PHP(從JS生成)
也可以從ccxt GitHub存儲(chǔ)庫(kù)將其克隆到項(xiàng)目目錄中:
- git clone https://github.com/ccxt/ccxt.git
將此庫(kù)安裝到代碼中的另一種方法是將單個(gè)文件手動(dòng)復(fù)制到工作目錄中,并使用適合你環(huán)境的語(yǔ)言擴(kuò)展名。
安裝
- pip install ccxt
常用接口
- # 初始化交易所
- binance_exchange = ccxt.binance({
- 'timeout': 15000,
- 'enableRateLimit': True
- })
- # 獲取單個(gè)交易對(duì)ticker數(shù)據(jù)
- binance_exchange.fetchTicker(symbol)
- # 獲取多個(gè)交易對(duì)ticker數(shù)據(jù)
- tickers_data = binance_exchange.fetchTickers(['BTC/USDT', 'ETH/USDT'])
- # 交易委托賬本數(shù)據(jù)獲取
- binance_exchange.fetch_order_book(symbol)
- # K線(xiàn)數(shù)據(jù)數(shù)據(jù)獲取
- binance_exchange.fetch_ohlcv(symbol, timeframe='1d')
使用
CCXT里面的交易所都集成來(lái)自Exchange的基類(lèi),然后每個(gè)交易所實(shí)現(xiàn)了一些統(tǒng)一的api接口,另外也實(shí)現(xiàn)自己交易所特有的api方法。統(tǒng)一的api方法分為不需要權(quán)限就能訪問(wèn)的,比如loadmarkets(加載市場(chǎng)的交易對(duì))、 fetchticker(獲取ticker)等,需要權(quán)限訪問(wèn)的方法如fetchbalance(獲取張賬戶(hù)資金)、createorder(生成訂單)等。CCXT的方法名稱(chēng)有兩種實(shí)現(xiàn)方式,一種是駝峰法, 另外一種是下劃線(xiàn)命名法,在python中,推薦使用下劃線(xiàn)方法來(lái)調(diào)用。
公共API包括
- 市場(chǎng)數(shù)據(jù)
- 交易對(duì)
- 交易手續(xù)費(fèi)
- 訂單薄/深度數(shù)據(jù)
- 交易歷史
- 行情/Tickers
- 用以制圖的 OHLC(V)/K線(xiàn)
- 其他公共接口
私有API包括
- 管理個(gè)人賬戶(hù)信息
- 查詢(xún)賬戶(hù)余額
- 通過(guò)市價(jià)單和限價(jià)單進(jìn)行交易
- 存入和提取法幣和加密貨幣
- 查詢(xún)個(gè)人訂單
- 獲取交易明細(xì)/歷史
- 在賬戶(hù)之間轉(zhuǎn)移資金
- 使用商業(yè)服務(wù)
此庫(kù)為所有交換實(shí)現(xiàn)完整的公共和私有REST API。即將推出JavaScript,PHP,Python和其他語(yǔ)言的WebSocket和FIX實(shí)現(xiàn)。
ccxt庫(kù)支持 camelcase表示法(在JavaScript中是首選)和下劃線(xiàn)表示法(在Python和PHP中首選),因此所有方法都可以用任何語(yǔ)言的符號(hào)或編碼方式調(diào)用。
- // both of these notations work in JavaScript/Python/PHP
- exchange.methodName () // camelcase pseudocode
- exchange.method_name () // underscore pseudocode
Python
- # coding=utf-8
- import ccxt
- hitbtc = ccxt.hitbtc({'verbose': True})
- bitmex = ccxt.bitmex()
- huobi = ccxt.huobi()
- exmo = ccxt.exmo({
- 'apiKey': 'YOUR_PUBLIC_API_KEY',
- 'secret': 'YOUR_SECRET_PRIVATE_KEY',
- })
- kraken = ccxt.kraken({
- 'apiKey': 'YOUR_PUBLIC_API_KEY',
- 'secret': 'YOUR_SECRET_PRIVATE_KEY',
- })
- exchange_id = 'binance'
- exchange_class = getattr(ccxt, exchange_id)
- exchange = exchange_class({
- 'apiKey': 'YOUR_API_KEY',
- 'secret': 'YOUR_SECRET',
- 'timeout': 30000,
- 'enableRateLimit': True,
- })
- hitbtchitbtc_markets = hitbtc.load_markets()
- print(hitbtc.id, hitbtc_markets)
- print(bitmex.id, bitmex.load_markets())
- print(huobi.id, huobi.load_markets())
- print(hitbtc.fetch_order_book(hitbtc.symbols[0]))
- print(bitmex.fetch_ticker('BTC/USD'))
- print(huobi.fetch_trades('LTC/CNY'))
- print(exmo.fetch_balance())
- # sell one ฿ for market price and receive $ right now
- print(exmo.id, exmo.create_market_sell_order('BTC/USD', 1))
- # limit buy BTC/EUR, you pay €2500 and receive ฿1 when the order is closed
- print(exmo.id, exmo.create_limit_buy_order('BTC/EUR', 1, 2500.00))
- # pass/redefine custom exchange-specific order params: type, amount, price, flags, etc...
- kraken.create_market_buy_order('BTC/USD', 1, {'trading_agreement': 'agree'})