深度学习量化交易---0.3.加密货币交易所API

普通人想进行量化交易,存在许多障碍,最大的问题就是目前股票交易,不对个人开放自动交易API接口,无法进行自动化交易。虽然期货可以获得自动化交易接口,但是期货一方面大家不太熟悉,另外就是交易频率较低,自动化交易优势不明显。
相信近一段时间因为比特币价格雪崩,大家都关注到了加密货币。实际上加密货币交易所一般都提供自动化交易接口,而且目前加密货币交易所高达90%的交易,都是由自动交易系统完成的,这是我们练习量化交易算法的最佳场景了。
但是加密货币交易所大大小小有几百个,每个交易所都有自己的自动交易API,如果每个都去接,工作量非常大。幸亏有人帮我们写好了这部分功能,提供一套统一的API接口,让我们只对这套API进行开发,就可以接几乎所有的交易所,非常方便。这套API提供Javascript、PHP和Python接口,大家可以选择适合自己的语言。由于我们要采用深度学习方法,因此采用Python接口。实际上,各种语言接口形式大同小异,搞懂了一种语言的接口,完全可以秒懂其他语言接口。
项目的地址:https://github.com/ccxt/ccxt。 在Python虚拟环境下,运行:

pip install ccxt

接下来我们需要进行初始化,我们在这里列出这个API支持的交易所:

import ccxt
import time

class BtcEcc(object):
    @staticmethod
    def get_exchanges():
        return ccxt.exchanges

接下来我们需要接入某个交易所,我们以huobipro为例,如下所示:

    @staticmethod
    def get_exchange(exchange_id, apiKey, secret):
        exchange_class = getattr(ccxt, exchange_id)
        exchange = exchange_class({
            'apiKey': apiKey,
            'secret': secret,
            'timeout': 30000,
            'enableRateLimit': True,
        })
        return exchange
......
exchange = BtcEcc.get_exchange('huobipro', 'your-appkey', 'your-secret')

在接入交易所之后,我们需要获取到可以交易的币对,例如我们想交易比特币和USDT,那个在huobipro这个交易所中,我们就需要关注USDT/BTC这个币对,获取可以交易币对方法如下所示:

markets = exchange.load_markets()

在股票交易中,我们经常需要关注买5和卖5,在加密币交易所中,可以通过如下代码实现:

order_books = BtcEcc.get_order_books(exchange, symbol, limit)

其结果如下所示:
深度学习量化交易---0.3.加密货币交易所API_第1张图片
如上图所示,bids代表买入请求,价格按由高到低排列,每个数组元素为2维,第1维是价格,第2维是交易量;asks代表卖出请求,价格由低到高排列,每个数组元素为2维,第1维是价格,第2维是交易量。
有时我们只想看到买入请求的最高价和卖出请求的最低价,可以通过如下代码实现:

    order_books = BtcEcc.get_order_books(exchange, symbol, limit)
    bid_price, bid_amount = BtcEcc.get_best_bid(order_books)
    ask_price, ask_amount = BtcEcc.get_best_ask(order_books)
    print('bids:{0} --- {1}!'.format(bid_price, bid_amount))
    print('asks:{0} --- {1}!'.format(ask_price, ask_amount))
    print('delta:{0}!'.format(bid_price-ask_price))

我们在进行正式交易前,需要读取市场价格,代码如下所示:

    bte = 'BTC/USDT'
    etb = 'USDT/BTC'
    symbol = bte
    exchange = BtcEcc.get_exchange('huobipro', 'your-appkey', 'your-secret')
    if exchange.has['fetchTicker']:
        print(exchange.fetch_ticker(symbol))

其结果如下所示:
在这里插入图片描述
由上图可以看出,结果中包含开盘价、收盘价、最高价、最低价、最高买入价、最高买入量、最低卖出价、最低卖出量等信息,与股票交易所类似。
在此基础上,假设我们要卖出比特币,买入USDT,代码如下所示:

sell_btc_order = exchange.create_limit_sell_order(symbol, 0.001, ask_price)

我们以最低卖出价卖出0.001比特币(火币网规定的最小交易单位),兑换成USDT。如果我们要卖出USDT而买入比特币,代码如下所示:

buy_btc_order = exchange.create_limit_buy_order(symbol, 0.001, bid_price)

代表我们买入0.001比特币。
需要注意的是,火币网对每笔交易都要收取手续费,因此我们在做交易的时候,需要将手续费作为成本考虑进去。
成本计算是以买入币为单位进行计算的,例如我使用USDT购买比特币,则费用单位是比特币,但是如果我使用比特币购买USDT,则费用单位是USDT,我们可以在交易执行之前预估费用金额,这样就可以确定我们是否应该执行这个交易,如下所示:

    bte = 'BTC/USDT'
    symbol = bte
    exchange = BtcEcc.get_exchange('huobipro', 'your-appkey', 'your-secret')
    buy_maker_fee = exchange.calculate_fee(symbol, 'limit', 'buy', 
    			0.001, 3988.8, takerOrMaker='maker')
    buy_taker_fee = exchange.calculate_fee(symbol, 'limit', 'buy', 
    			0.001, 3988.8, takerOrMaker='taker')
    sell_maker_fee = exchange.calculate_fee(symbol, 'limit', 'sell', 
    			0.001, 3988.8, takerOrMaker='maker')
    sell_taker_fee = exchange.calculate_fee(symbol, 'limit', 'sell', 
    			0.001, 3988.8, takerOrMaker='taker')
    print('buy_maker_fee={0} [{4}], buy_taker_fee={1} [{5}], 
    		sell_maker_fee={2} [{6}], 
    		sell_taker_fee={3} [{7}]!'.format(buy_maker_fee['cost'],
    		 buy_taker_fee['cost'], sell_maker_fee['cost'], 
    		 sell_taker_fee['cost'], buy_maker_fee['currency'], 
    		 buy_taker_fee['currency'], sell_maker_fee['currency'], 
    		 sell_taker_fee['currency']))

运行结果如下所示:
在这里插入图片描述
我们看到当我们买比特币时,无论是我们挂出的订单被满足(maker),还是我们满足别我的卖出订单(taker),费率均为千分之二,同时计价单位为比特币。当我们卖出比特币买入USDT时,无论是我们挂出的订单被满足(maker),还是我们满足别我的卖出订单(taker),费率均为千分之二,但是计价单位是USDT。
到目前为止,我们已经了解了以火币网为代表的加密货币交易所的API,利用这些API,我们就可以在这些交易所开展自动化交易了,我们的量化交易算法也可以在实盘上实时得到验证了。
在下一篇博文中,我们将向大家介绍如何收集数字货币交易所的交易数据,训练我们在前两节中讲的长短时记忆网络(LSTM),以BTC/USDT为例,预测比特币对USDT的最高价和最低价,当比特币对USDT涨价且价差大于交易费用时,我们卖出比特币,当比特币对USDT降价,且价差大于交易费用时,我们买入比特币。这样我们就可以有一个基于深度学习技术的数字货币量化交易系统了。

你可能感兴趣的:(人工智能,深度学习,python,量化交易)