CCXT框架github代码地址
是一个Python/Javascript/PHP的一个交易API框架,对接超过130多个交易所。首先明白CCXT并不是一个量化交易的框架,它是一个集成交易所的API框架,所以它应该是算一个网络的框架,相对量化交易来说,它是一个底层的应用框架。如果你要基于它开发量化交易系统,你还得自己写回测、实盘的交易代码。
首先CCXT里面的交易所都集成来自Exchange的基类,然后每个交易所实现了一些统一的api接口,另外也实现自己交易所特有的api方法。 统一的api方法分为不需要权限就能访问的,比如***load_markets(加载市场的交易对)***、 ***fetch_ticker(获取ticker)***等,需要权限访问的方法如***fetch_balance(获取张账户资金)***、***create_order(生成订单)***等。CCXT的方法名称有两种实现方式,一种是驼峰法, 另外一种是下划线命名法,在python中,推荐使用下划线方法来调用。
如果你要调用某个交易所的api, 你要创建相应的交易所类的实例
binance = ccxt.binance()
binance.load_markets()
symbols = binance.symbols
print(binance.symbols) # 打印市场交易对
btc_ticker = binance.fetch_ticker('BTC/USDT) # 获取在binance交易所 BTC/USDT的ticker数据
kline_data = binance.fetch_ohlcv('BTC/USDT', timeframe='15m') # 获取BTC/USDT交易对的十分钟的k线数据
观察上面,一个获取数据的方法都是以fetch方法开头, 然后根据参数要求,传递参数即可。
每个交易所的对象都有一个默认的属性,比如请求的api主机名称,还有apiKey,secret等, 比如火币交易所的默认属性
class huobipro (Exchange):
def describe(self):
return self.deep_extend(super(huobipro, self).describe(), {
'id': 'huobipro',
'name': 'Huobi Pro',
'countries': ['CN'],
'rateLimit': 2000,
'userAgent': self.userAgents['chrome39'],
'version': 'v1',
'accounts': None,
'accountsById': None,
'hostname': 'api.huobi.pro',
'has': {
'CORS': False,
'fetchTickers': True,
'fetchDepositAddress': True,
'fetchOHLCV': True,
'fetchOrder': True,
'fetchOrders': True,
'fetchOpenOrders': True,
'fetchClosedOrders': True,
'fetchTradingLimits': True,
'fetchMyTrades': True,
'withdraw': True,
'fetchCurrencies': True,
'fetchDeposits': True,
'fetchWithdrawals': True,
},
'timeframes': {
'1m': '1min',
'5m': '5min',
'15m': '15min',
'30m': '30min',
'1h': '60min',
'1d': '1day',
'1w': '1week',
'1M': '1mon',
'1y': '1year',
},
'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/27766569-15aa7b9a-5edd-11e7-9e7f-44791f4ee49c.jpg',
'api': {
'market': 'https://api.huobi.pro',
'public': 'https://api.huobi.pro',
'private': 'https://api.huobi.pro',
'zendesk': 'https://huobiglobal.zendesk.com/hc/en-us/articles',
},
'www': 'https://www.huobi.pro',
'referral': 'https://www.huobi.br.com/en-us/topic/invited/?invite_code=rwrd3',
'doc': 'https://github.com/huobiapi/API_Docs/wiki/REST_api_reference',
'fees': 'https://www.huobi.pro/about/fee/',
},
'api': {
'zendesk': {
'get': [
'360000400491-Trade-Limits',
],
},
'market': {
'get': [
'history/kline', # 获取K线数据
'detail/merged', # 获取聚合行情(Ticker)
'depth', # 获取 Market Depth 数据
'trade', # 获取 Trade Detail 数据
'history/trade', # 批量获取最近的交易记录
'detail', # 获取 Market Detail 24小时成交量数据
'tickers',
],
},
'public': {
'get': [
'common/symbols', # 查询系统支持的所有交易对
'common/currencys', # 查询系统支持的所有币种
'common/timestamp', # 查询系统当前时间
'common/exchange', # order limits
'settings/currencys', # ?language=en-US
],
},
'private': {
'get': [
'account/accounts', # 查询当前用户的所有账户(即account-id)
'account/accounts/{id}/balance', # 查询指定账户的余额
'order/orders/{id}', # 查询某个订单详情
'order/orders/{id}/matchresults', # 查询某个订单的成交明细
'order/orders', # 查询当前委托、历史委托
'order/matchresults', # 查询当前成交、历史成交
'dw/withdraw-virtual/addresses', # 查询虚拟币提现地址
'dw/deposit-virtual/addresses',
'dw/deposit-virtual/sharedAddressWithTag', # https://github.com/ccxt/ccxt/issues/4851
'query/deposit-withdraw',
'margin/loan-orders', # 借贷订单
'margin/accounts/balance', # 借贷账户详情
'points/actions',
'points/orders',
'subuser/aggregate-balance',
],
'post': [
'order/orders/place', # 创建并执行一个新订单(一步下单, 推荐使用)
'order/orders', # 创建一个新的订单请求 (仅创建订单,不执行下单)
'order/orders/{id}/place', # 执行一个订单 (仅执行已创建的订单)
'order/orders/{id}/submitcancel', # 申请撤销一个订单请求
'order/orders/batchcancel', # 批量撤销订单
'dw/balance/transfer', # 资产划转
'dw/withdraw/api/create', # 申请提现虚拟币
'dw/withdraw-virtual/create', # 申请提现虚拟币
'dw/withdraw-virtual/{id}/place', # 确认申请虚拟币提现
'dw/withdraw-virtual/{id}/cancel', # 申请取消提现虚拟币
'dw/transfer-in/margin', # 现货账户划入至借贷账户
'dw/transfer-out/margin', # 借贷账户划出至现货账户
'margin/orders', # 申请借贷
'margin/orders/{id}/repay', # 归还借贷
'subuser/transfer',
],
},
},
'fees': {
'trading': {
'tierBased': False,
'percentage': True,
'maker': 0.002,
'taker': 0.002,
},
},
'exceptions': {
'gateway-internal-error': ExchangeNotAvailable, # {"status":"error","err-code":"gateway-internal-error","err-msg":"Failed to load data. Try again later.","data":null}
'account-frozen-balance-insufficient-error': InsufficientFunds, # {"status":"error","err-code":"account-frozen-balance-insufficient-error","err-msg":"trade account balance is not enough, left: `0.0027`","data":null}
'invalid-amount': InvalidOrder, # eg "Paramemter `amount` is invalid."
'order-limitorder-amount-min-error': InvalidOrder, # limit order amount error, min: `0.001`
'order-marketorder-amount-min-error': InvalidOrder, # market order amount error, min: `0.01`
'order-limitorder-price-min-error': InvalidOrder, # limit order price error
'order-limitorder-price-max-error': InvalidOrder, # limit order price error
'order-orderstate-error': OrderNotFound, # canceling an already canceled order
'order-queryorder-invalid': OrderNotFound, # querying a non-existent order
'order-update-error': ExchangeNotAvailable, # undocumented error
'api-signature-check-failed': AuthenticationError,
'api-signature-not-valid': AuthenticationError, # {"status":"error","err-code":"api-signature-not-valid","err-msg":"Signature not valid: Incorrect Access key [Access key错误]","data":null}
},
'options': {
'createMarketBuyOrderRequiresPrice': True,
'fetchMarketsMethod': 'publicGetCommonSymbols',
'fetchBalanceMethod': 'privateGetAccountAccountsIdBalance',
'createOrderMethod': 'privatePostOrderOrdersPlace',
'language': 'en-US',
},
'commonCurrencies': {
'HOT': 'Hydro Protocol', # conflict with HOT(Holo) https://github.com/ccxt/ccxt/issues/4929
},
})
如果你要修改他的默认属性,可以直接在初始化交易所对象的时候,给他传递一个字典参数,直接把原来的默认属性覆盖。比如火币的api默认请求地址是api.huobi.pro, 这个主机在国内是没法访问的,要想在国内直接访问,你可以把他修改为 api.huobi.br.com, 那么该设置应该是这样, 把他的ULR属性修改为如下:
huobipro = ccxt.huobipro({'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/27766569-15aa7b9a-5edd-11e7-9e7f-44791f4ee49c.jpg',
'api': {
'market': 'https://api.huobi.br.com',
'public': 'https://api.huobi.br.com',
'private': 'https://api.huobi.br.com',
'zendesk': 'https://huobiglobal.zendesk.com/hc/en-us/articles',
},
'www': 'https://www.huobi.pro',
'referral': 'https://www.huobi.br.com/en-us/topic/invited/?invite_code=rwrd3',
'doc': 'https://github.com/huobiapi/API_Docs/wiki/REST_api_reference',
'fees': 'https://www.huobi.pro/about/fee/',
}})
在比如Okex交易所的可以这样设置
okex = ccxt.okex({'urls': {
'logo': 'https://user-images.githubusercontent.com/1294454/32552768-0d6dd3c6-c4a6-11e7-90f8-c043b64756a7.jpg',
'api': {
'web': 'https://www.okex.me/v2',
'public': 'https://www.okex.me/api',
'private': 'https://www.okex.me/api',
},
'www': 'https://www.okex.com',
'doc': [
'https://github.com/okcoin-okex/API-docs-OKEx.com',
'https://www.okex.com/docs/en/',
],
'fees': 'https://www.okex.com/pages/products/fees.html',
'referral': 'https://www.okex.com',
}})
okex.load_markets()
这样你就可以直接在国内访问了。
如果你想访问交易所账户类的权限接口, 这时候,需要你去交易所生成对应的apiKey和secret, 有的还可能需要密码。 然后在对应的交易所下把apiKey和secret传递进去。
## 方法一: 设置apiKey和secret
binance = ccxt.binance({
'apiKey': 'XXXX',
'secret': 'XXXXX'
})
## 方法二:设置apiKey和secret
binance.secret = 'xxxx'
binance.apiKey = 'xxxxxx'
如果你还没有注册相应的交易所,那么你可以使用我以下交易所的推荐码去注册下,这样你可以拿到手续费的优惠
微信:bitquant51
火币交易所推荐码:asd43
币安推荐码: 22795115
币安推荐链接:https://www.binance.co/?ref=22795115
Gateio交易所荐码:1100714
Bitmex交易所推荐码:SzZBil 或者 https://www.bitmex.com/register/SzZBil
github代码地址: https://github.com/ramoslin02/51bitqunt
如果你还是看不太懂以上的文章,你可以去B站https://www.bilibili.com/video/av57636895/
上观看我录制的CCXT的视频,以及相关的数字货币量化交易视频。
如果你目前正在学习python数字货币量化交易,你可以添加我的微信:bitquant51, 我邀请你进入微信群,到时候可以一起交流学习。