CCXT:加密貨幣量化交易神器
Python中文社區 (ID:python-china)
CCXT框架 是一個Python/Javascript/PHP的一個交易API框架,對接超過130多個交易所。可用于世界各地的加密貨幣交易所的連接和交易,以及轉賬支付處理,可用于存儲數據,分析,可視化,指標開發,算法交易,是一個非常容易集成的開箱即用的統一API。
CCXT框架Github地址:
當前功能列表:
- 支持許多交易市場,甚至即將推出的
- 為所有交易提供完整的公共和私人API
- 所有貨幣,山寨幣和標記,價格,訂單,交易,代碼等…
- 提供用于交叉交換或跨貨幣分析和套利的可選標準化數據
- 開箱即用的統一的一體化API,非常易于集成
- 適用于Node7.6+,Python2和3,PHP5.4+,Web瀏覽器
認證交易所
支持的加密貨幣交易所
ccxt庫目前支持以下131個加密貨幣交易所和交易API,可以在github查看。上面的列表經常更新,新的加密市場,山寨幣交換,錯誤修復,API端點定期引入和添加。有關詳細信息,請參閱手冊,如果你沒有在上面的列表中找到加密貨幣交易市場和/或想要添加其他交易所,請通過GitHub或通過電子郵件在此處發布問題來發布或向我們發送鏈接。
該庫受到MIT許可,這意味著任何開發人員都可以完全免費構建商業和開源軟件,但使用它需要你自擔風險且無需擔保。
安裝
安裝ccxt庫的最簡單方法是使用內置包管理器:
- NPM中的ccxt(JavaScript/Node v7.6+)
- PyPI中的ccxt(Python 2和3.5.3+)
- Packagist/Composer中的ccxt(PHP 5.4+)
該庫作為一體化模塊實現提供,具有最小的依賴性和要求:
- js/在JavaScript中
- python/在Python中(從JS生成)
- PHP/ PHP(從JS生成)
也可以從ccxt GitHub存儲庫將其克隆到項目目錄中:
- git clone https://github.com/ccxt/ccxt.git
將此庫安裝到代碼中的另一種方法是將單個文件手動復制到工作目錄中,并使用適合你環境的語言擴展名。
安裝
- pip install ccxt
常用接口
- # 初始化交易所
- binance_exchange = ccxt.binance({
- 'timeout': 15000,
- 'enableRateLimit': True
- })
- # 獲取單個交易對ticker數據
- binance_exchange.fetchTicker(symbol)
- # 獲取多個交易對ticker數據
- tickers_data = binance_exchange.fetchTickers(['BTC/USDT', 'ETH/USDT'])
- # 交易委托賬本數據獲取
- binance_exchange.fetch_order_book(symbol)
- # K線數據數據獲取
- binance_exchange.fetch_ohlcv(symbol, timeframe='1d')
使用
CCXT里面的交易所都集成來自Exchange的基類,然后每個交易所實現了一些統一的api接口,另外也實現自己交易所特有的api方法。統一的api方法分為不需要權限就能訪問的,比如loadmarkets(加載市場的交易對)、 fetchticker(獲取ticker)等,需要權限訪問的方法如fetchbalance(獲取張賬戶資金)、createorder(生成訂單)等。CCXT的方法名稱有兩種實現方式,一種是駝峰法, 另外一種是下劃線命名法,在python中,推薦使用下劃線方法來調用。
公共API包括
- 市場數據
- 交易對
- 交易手續費
- 訂單薄/深度數據
- 交易歷史
- 行情/Tickers
- 用以制圖的 OHLC(V)/K線
- 其他公共接口
私有API包括
- 管理個人賬戶信息
- 查詢賬戶余額
- 通過市價單和限價單進行交易
- 存入和提取法幣和加密貨幣
- 查詢個人訂單
- 獲取交易明細/歷史
- 在賬戶之間轉移資金
- 使用商業服務
此庫為所有交換實現完整的公共和私有REST API。即將推出JavaScript,PHP,Python和其他語言的WebSocket和FIX實現。
ccxt庫支持 camelcase表示法(在JavaScript中是首選)和下劃線表示法(在Python和PHP中首選),因此所有方法都可以用任何語言的符號或編碼方式調用。
- // 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'})