【非常难得】CCXT如何获取期货合约的K线数据并合约交易下单总结

Emily ·
更新时间:2024-11-13
· 672 次阅读

非常重要的问题:使用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



期货 数据

需要 登录 后方可回复, 如果你还没有账号请 注册新账号