非常重要的问题:使用CCXT框架来操控交易所,默认情况都是执行币币交易spot,那么如何操控期货呢?这里在官方文档没有介绍,网上也么有相关的文章介绍,今天在这里总结一下!
最核心的一点就是symbol的格式取决于是那种类型【spot(币币)、margin(币币杠杆)、futures(交割合约、swap(永续合约))】对于期货,必须按照期货的参数来传值!
import ccxt from app.exchanges.config.exchange_api_config import ExchangeAPIConfig exchange = ccxt.okex3({ "apiKey": ExchangeAPIConfig.okex_api_v3["api_key"], "secret": ExchangeAPIConfig.okex_api_v3["seceret_key"], "password": ExchangeAPIConfig.okex_api_v3["passphrase"], 'timeout': 30000, 'enableRateLimit': True, }) ''' 以OKEX为例,CCXT如何来获取期货futures的K先数据和下单! 第一步:请运行方法exchange.load_markets()获取交易市场的数据架构! 第二步:这些交易数据就包含okex交易所的所有交易对,其中包括【spot(币币)、margin(币币杠杆)、futures(交割合约、swap(永续合约))】 第三步:查看spot的【symbol属性】和futures的【symbol属性】的格式! 官方文档仅介绍了spot币币交易的symbol格式为BTC/USDT, 却并没有说明期货futures的格式为【okex为例】:BTC-USD-191115【19年周合约】 BTC-USD-191227【19年季度】 ''' exchange.load_markets() # 获取spot币币交易的市场数据结构 print(exchange.market("BTC/USDT")) # 获取周合约的交易的市场数据结构 print(exchange.market("BTC-USD-191115")) # 查询futures期货的K线数据 data = exchange.fetch_ticker("ETH-USD-191115") # 【ccxt统一api调用】期货的交易,参数完全需要根据交易所api类传【注意;期货的参数amount数量必须大于1的整数】 order = exchange.create_order("ETH-USD-191227", "1", "sell", 1, 181.1, params={"client_oid": "oktfuture0", "order_type": "0"}) # 【cctx隐式api调用】【注意;期货的参数size数量必须大于1的整数】 order = exchange.futures_post_order({ "client_oid": "oktfuture0", "instrument_id": "ETH-USD-191227", "type": "1", "size": "1", "price": "181.1", "order_type": "0" }) print(order)
spot币币交易参考市场数据结构:https://ccxt.readthedocs.io/en/latest/manual.html#market-structure
#spot币币的市场结构数据 "BTC/USDT":{ 'percentage': True, 'taker': 0.0015, 'maker': 0.001, 'precision': { 'amount': 8, 'price': 1 }, 'limits': { 'amount': { 'min': 0.001, 'max': None }, 'price': { 'min': 0.1, 'max': None }, 'cost': { 'min': 0.0001, 'max': None } }, 'id': 'BTC-USDT', 'symbol': 'BTC/USDT', 'base': 'BTC', 'quote': 'USDT', 'baseId': 'BTC', 'quoteId': 'USDT', 'info': { 'base_currency': 'BTC', 'instrument_id': 'BTC-USDT', 'min_size': '0.001', 'quote_currency': 'USDT', 'size_increment': '0.00000001', 'tick_size': '0.1' }, 'type': 'spot', 'spot': True, 'futures': False, 'swap': False, 'active': True }
期货futures市场数据结构:# futures期货的市场数据结构 'BTC-USD-191115':{ 'percentage': True, 'taker': 0.0005, 'maker': 0.0002, 'precision': { 'amount': None, 'price': 2 }, 'limits': { 'amount': { 'min': None, 'max': None }, 'price': { 'min': 0.01, 'max': None }, 'cost': { 'min': None, 'max': None } }, 'id': 'BTC-USD-191115', 'symbol': 'BTC-USD-191115', 'base': 'BTC', 'quote': 'USD', 'baseId': 'BTC', 'quoteId': 'USD', 'info': { 'instrument_id': 'BTC-USD-191115', 'underlying_index': 'BTC', 'quote_currency': 'USD', 'tick_size': '0.01', 'contract_val': '100', 'listing': '2019-11-01', 'delivery': '2019-11-15', 'trade_increment': '1', 'alias': 'this_week', 'underlying': 'BTC-USD', 'base_currency': 'BTC', 'settlement_currency': 'BTC', 'is_inverse': 'true', 'contract_val_currency': 'USD' }, 'type': 'futures', 'spot': False, 'futures': True, 'swap': False, 'active': True }
okex原生api的symbol: 虽然CCXT中针对每个交易所的api都封装了隐式调用的方法,然而官方也说明,所有的交易所都封装了统一的api,而隐式调用仅是作为一个后备【有些小型交易所没有提供完善的api,可以使用隐式调用来操作】请参考我的文章:https://blog.csdn.net/weixin_43343144/article/details/102989697
作者:比特币爱好者007