数字货币量化系统之 CCXT 框架使用委托下单 (下)

我们这里使用CCXT提供的私有API来委托下单,撤销订单,查询交易记录等操作。

一、交易所API申请

我们这里以 Binance.com 交易所为例,申请开放的API来下单、撤单等操作,不过需要科学上网。申请账号之后,我们给账户里边转入 12 USDT 进行测试。

二、实际操作

import ccxt

4. 交易

4.1 身份验证


# 初始化交易所
binance_exchange = ccxt.binance({
    'apiKey': 'NNG6XatvBmznJIeNMXXXXXXXXXXXXXXXXeLuniAGCl8ZDKSb', 
    'secret': '8gU3JCAF4oKcxXXXXXXXXXXXXXXXX53TU04XA',
    'timeout': 15000,
    'enableRateLimit': True,
    'proxies': {'https': "http://127.0.0.1:1087", 'http': "http://127.0.0.1:1087"}
})

#说明: apiKey:交易所key,secret:交易所密钥

4.2 查询账余额

binance_exchange.fetch_balance ()
{'info': {'makerCommission': 10,
  'takerCommission': 10,
  'buyerCommission': 0,
  'sellerCommission': 0,
  'canTrade': True,
  'canWithdraw': True,
  'canDeposit': True,
  'updateTime': 1575903607695,
  'accountType': 'SPOT',
  'balances': [{'asset': 'BTC', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'ETH', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'BNB', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'QTUM', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'EOS', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'SNT', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'BNT', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'GAS', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'BCC', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'USDT', 'free': '12.64066000', 'locked': '0.00000000'},
   ...
   {'asset': 'BCH', 'free': '0.00000000', 'locked': '0.00000000'},
   {'asset': 'TROY', 'free': '0.00000000', 'locked': '0.00000000'}]},
 'BTC': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'LTC': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'ETH': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'NEO': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'BNB': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'QTUM': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'EOS': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'SNT': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'BNT': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'GAS': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'BCC': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'USDT': {'free': 12.64066, 'used': 0.0, 'total': 12.64066},
 'HSR': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'OAX': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'DNT': {'free': 0.0, 'used': 0.0, 'total': 0.0},
  ...
 'DCR': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'USDC': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'MITH': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'BCH': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'ARPA': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'CTXC': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'TROY': {'free': 0.0, 'used': 0.0, 'total': 0.0},
 'free': {'BTC': 0.0,
  'LTC': 0.0,
  'ETH': 0.0,
  'NEO': 0.0,
  'BNB': 0.0,
  'QTUM': 0.0,
  'EOS': 0.0,
  'SNT': 0.0,
  'BNT': 0.0,
  'GAS': 0.0,
  'BCC': 0.0,
  'USDT': 12.64066,
  'HSR': 0.0,
  'OAX': 0.0,
   ...
  'CTXC': 0.0,
  'TROY': 0.0}}
print('BTC一共:', binance_exchange.fetch_balance ()['BTC']['total'])
print('BTC可用:', binance_exchange.fetch_balance ()['BTC']['free'])
print('BTC冻结:', binance_exchange.fetch_balance ()['BTC']['used'])

print()
print('USDT一共:', binance_exchange.fetch_balance ()['USDT']['total'])
print('USDT可用:', binance_exchange.fetch_balance ()['USDT']['free'])
print('USDT冻结:', binance_exchange.fetch_balance ()['USDT']['used'])
BTC一共: 0.0
BTC可用: 0.0
BTC冻结: 0.0

USDT一共: 12.64066
USDT可用: 12.64066
USDT冻结: 0.0

我给Binance 充了12.64刀做测试

4.3 订单

  • 下单
# 以很低的价格买入波场,当然这个只会挂单,永远也不会成交(限价单)
if binance_exchange.has['createLimitOrder']:
    binance_exchange.create_order(symbol='TRX/USDT', side='buy', type='limit', price=0.0100, amount=1000)
print('USDT一共:', binance_exchange.fetch_balance ()['USDT']['total'])
print('USDT可用:', binance_exchange.fetch_balance ()['USDT']['free'])
print('USDT冻结:', binance_exchange.fetch_balance ()['USDT']['used'])
USDT一共: 12.64066
USDT可用: 2.64066
USDT冻结: 10.0

我们也可以在Binance APP 上看到刚才下的委托单:

file

  • 查询未成交订单
open_orders = binance_exchange.fetch_open_orders('TRX/USDT')
open_orders
[{'info': {'symbol': 'TRXUSDT',
   'orderId': 159165583,
   'orderListId': -1,
   'clientOrderId': '7iGqXRlvmxo7iSueGN9kkU',
   'price': '0.01000000',
   'origQty': '1000.00000000',
   'executedQty': '0.00000000',
   'cummulativeQuoteQty': '0.00000000',
   'status': 'NEW',
   'timeInForce': 'GTC',
   'type': 'LIMIT',
   'side': 'BUY',
   'stopPrice': '0.00000000',
   'icebergQty': '0.00000000',
   'time': 1575904473056,
   'updateTime': 1575904473056,
   'isWorking': True,
   'origQuoteOrderQty': '0.00000000'},
  'id': '159165583',
  'timestamp': 1575904473056,
  'datetime': '2019-12-09T15:14:33.056Z',
  'lastTradeTimestamp': None,
  'symbol': 'TRX/USDT',
  'type': 'limit',
  'side': 'buy',
  'price': 0.01,
  'amount': 1000.0,
  'cost': 0.0,
  'average': None,
  'filled': 0.0,
  'remaining': 1000.0,
  'status': 'open',
  'fee': None,
  'trades': None}]
  • 取消订单
open_orders[0]['info']['orderId']
159165583
# 取消订单
if binance_exchange.has['cancelOrder']:
    for order in open_orders:
        order_id = order['info']['orderId']
        binance_exchange.cancel_order(order_id, 'TRX/USDT')
# 再次查询是否还有委托的订单
if binance_exchange.has['fetchOpenOrders']:
    print(binance_exchange.fetch_open_orders('TRX/USDT'))
[]
  • 查询交易完成的订单
if binance_exchange.has['fetchClosedOrders']:
    closed_orders = binance_exchange.fetch_closed_orders('TRX/USDT')
for close_order in closed_orders:
    print(close_order)

为者常成,行者常至