如何学习数字货币CCXT框架?

如何学习数字货币CCXT框架?

什么是CCXT框架

CCXT框架github代码地址
是一个Python/Javascript/PHP的一个交易API框架,对接超过130多个交易所。首先明白CCXT并不是一个量化交易的框架,它是一个集成交易所的API框架,所以它应该是算一个网络的框架,相对量化交易来说,它是一个底层的应用框架。如果你要基于它开发量化交易系统,你还得自己写回测、实盘的交易代码。

CCXT框架结构

如何学习数字货币CCXT框架?_第1张图片

首先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, 我邀请你进入微信群,到时候可以一起交流学习。

如何学习数字货币CCXT框架?_第2张图片

你可能感兴趣的:(量化交易,CCXT,量化交易,数字货币,python)