Skip to content

Latest commit

 

History

History
434 lines (347 loc) · 11.1 KB

File metadata and controls

434 lines (347 loc) · 11.1 KB

【TWS API 使用教程 3】---如何使用 TWS API 从盈透证券中设置 contract 及获取 contract 的信息?

原文:https://yunjinqi.blog.csdn.net/article/details/122133442

在原先的文章7、TWS API 和 IB 中的金融工具介绍详细翻译了 TWS API 中如何设置一个 contract,用于获取数据、下单等操作,以及如何查找 contract。本文尝试在应用层面上,来看看如何设置和查找 contract。

在上一篇文章中,【TWS API 使用教程 2】—如何使用 TWS API 在 ubuntu 和 windows 上分别设置 contract、获取 contract 详细信息、设置 order、下单、获取持仓信息、获取账户信息,对常用的一些操作进行了整合,如果上篇文章的代码没有问题,接下来就重点介绍如何设置 contract,如何查找 contract 了。

contract

contract 具有重要的意义,代表着一个交易品种,可以通过 contract 这个标识符,每次与 TWS 进行交互的时候,比如获取数据、下单的时候,TWS 需要知道你希望获取的是哪个交易品种的数据,是在哪个交易品种上进行交易。所以,contract 具有基础性的重要的作用,很多操作都离不开 contract.

contract 包含哪些字段

一个 contract 需要很多的字段去指定,用于和其他的 contract 进行区分。

比较常见的四个字段
symbol:交易品种的代码
secType:交易品种的类型,常见的一些交易品种类型如下
  • STK — 股票或者 ETF
  • BOND — 债券
  • IND — 指数
  • FUND — 公募基金
  • OPT — 期权
  • FUT — 期货
  • WAR — 权证
  • FOP — 期货期权
  • CASH — 外汇对
  • CMDTY — 商品
  • NEWS — 新闻
  • BAG — 组合
  • CONTFUT —连续期货
exchange:交易所

一般情况下,可以使用 SMART 来委托 IB 决定使用那个交易所。 支持的交易所很多,可以通过下面的链接获取具体支持哪个交易所

currency:交易品种的标价货币,常见的一些货币表示如下
  • USD (美元)
  • EUR (欧元)
  • JPY (日元)
  • CNY (人民币)
  • GBP (英镑)
  • INR (印度卢比)
  • CAD (加拿大元)
  • AUD(澳大利亚元)
  • CHF (Swiss Franc)
其他一些可使用的字段

在某些情况下,可以添加这些字段,用于避免筛选出来很多的满足条件的 contract.

conId:IB 指定的品种名字,通常是一个数字,比如可以用于指定债券 primaryExchange:指定是哪个交易所的交易品种,避免模糊。通常是想要节省手续费,使用了 SMART 之后使用。 localSymbol:IB 本地的名称,使用这个的话,可以唯一指定交易品种,就不需要交割月份等信息了 tradingClass:IB 指定的分类( IB-specific designation for a contract) secIdType:特定证券类型(Type of specific security identification) secId:特定证券的认定的值(Specific security identification value) lastTradeDateOrContractMonth:对于期货或者期权等有到期日的交易品种,这个是最后的交割月份 multiplier:合约乘数,即一张合约对应多少 strike:期权的行权价 right:权利,看涨期权或者看跌期权 includeExpired:是否包含已经到期的 deltaNeutral Contract:delta 中性的 contract comboLegs:组合 comboLeg Description:对组合的描述

在原先的介绍 contract 的文章中,已经有了很多的如何设置 contract 的例子,下面供参考

  • EUR/GBP 的外汇对
contract = Contract()
contract.symbol = "EUR"
contract.secType = "CASH"
contract.currency = "GBP"
contract.exchange = "IDEALPRO" 
  • ETH 的数字货币
contract = Contract();
contract.symbol = "ETH";
contract.secType = "CRYPTO";
contract.currency = "USD";
contract.exchange = "PAXOS"; 
  • IB 的股票
contract = Contract()
contract.symbol = "IBKR"
contract.secType = "STK"
contract.currency = "USD"
#In the API side, NASDAQ is always defined as ISLAND in the exchange field
contract.exchange = "ISLAND" 
  • 需要 SMART 但是又要指定交易所的股票
contract = Contract()
contract.symbol = "MSFT"
contract.secType = "STK"
contract.currency = "USD"
contract.exchange = "SMART"
#Specify the Primary Exchange attribute to avoid contract ambiguity 
#(there is an ambiguity because there is also a MSFT contract with primary exchange = "AEB")
contract.primaryExchange = "ISLAND" 
  • DAX 的指数
contract = Contract()
contract.symbol = "DAX"
contract.secType = "IND"
contract.currency = "EUR"
contract.exchange = "DTB" 
  • 一个名叫 IBDE30 的 CFD
contract = Contract()
contract.symbol = "IBDE30"
contract.secType = "CFD"
contract.currency = "EUR"
contract.exchange = "SMART" 
  • 一个 19 年 03 月到期的期货合约
contract = Contract()
contract.symbol = "ES"
contract.secType = "FUT"
contract.exchange = "GLOBEX"
contract.currency = "USD"
contract.lastTradeDateOrContractMonth = "201903" 
  • 用 localSymbol 指定的期货合约
contract = Contract()
contract.secType = "FUT"
contract.exchange = "GLOBEX"
contract.currency = "USD"
contract.localSymbol = "ESU6" 
  • 指定了到期日和合约乘数的期货合约
contract = Contract()
contract.symbol = "DAX"
contract.secType = "FUT"
contract.exchange = "DTB"
contract.currency = "EUR"
contract.lastTradeDateOrContractMonth = "201903"
contract.multiplier = "5" 
  • 期货连续合约只能用于历史数据
contract = Contract()
contract.symbol = "ES"
contract.secType = "CONTFUT"
contract.exchange = "GLOBEX" 
  • 同时请求期货合约和连续合约的具体合约,只能用于获取合约信息
contract = Contract()
contract.symbol = "ES"
contract.secType = "FUT+CONTFUT"
contract.exchange = "GLOBEX" 
  • 指定到期日、行权价、期权类型、乘数的期权合约
contract = Contract()
contract.symbol = "GOOG"
contract.secType = "OPT"
contract.exchange = "BOX"
contract.currency = "USD"
contract.lastTradeDateOrContractMonth = "20190315"
contract.strike = 1180
contract.right = "C"
contract.multiplier = "100" 
  • 如果指定了到期日、行权价、期权类型、乘数之后的期权合约还有多个,可以用 tradingClass 进行区分
contract = Contract()
contract.symbol = "SANT"
contract.secType = "OPT"
contract.exchange = "MEFFRV"
contract.currency = "EUR"
contract.lastTradeDateOrContractMonth = "20190621"
contract.strike = 7.5
contract.right = "C"
contract.multiplier = "100"
contract.tradingClass = "SANEU" 
  • 期权合约可以通过 localSymbol 进行指定
contract = Contract()
#Watch out for the spaces within the local symbol!
contract.localSymbol = "C BMW  JUL 20  4800"
contract.secType = "OPT"
contract.exchange = "DTB"
contract.currency = "EUR" 
  • 使用 symbol = CUSIP 指定债券合约
contract = Contract()
# enter CUSIP as symbol
contract.symbol= "912828C57"
contract.secType = "BOND"
contract.exchange = "SMART"
contract.currency = "USD" 
  • 使用 conId 指定债券合约
contract = Contract()
contract.conId = 15960357
contract.exchange = "SMART" 
  • 共同基金
contract = Contract()
contract.symbol = "VINIX"
contract.secType = "FUND"
contract.exchange = "FUNDSERV"
contract.currency = "USD" 
  • 商品
contract = Contract()
contract.symbol = "XAUUSD"
contract.secType = "CMDTY"
contract.exchange = "SMART"
contract.currency = "USD" 
  • 和期权类似的权证
contract = Contract()
contract.symbol = "GOOG"
contract.secType = "WAR"
contract.exchange = "FWB"
contract.currency = "EUR"
contract.lastTradeDateOrContractMonth = "20201117"
contract.strike = 1500.0
contract.right = "C"
contract.multiplier = "0.01" 
  • 荷兰权证和结构化产品(Dutch Warrants and Structured Products),需要使用 localSymbol 或者 conId 指定
contract = Contract()
contract.localSymbol = "B881G"
contract.secType = "IOPT"
contract.exchange = "SBF"
contract.currency = "EUR" 
  • 股票价差组合
contract = Contract()
contract.symbol = "IBKR,MCD"
contract.secType = "BAG"
contract.currency = "USD"
contract.exchange = "SMART"

leg1 = ComboLeg()
leg1.conId = 43645865#IBKR STK
leg1.ratio = 1
leg1.action = "BUY"
leg1.exchange = "SMART"

leg2 = ComboLeg()
leg2.conId = 9408#MCD STK
leg2.ratio = 1
leg2.action = "SELL"
leg2.exchange = "SMART"

contract.comboLegs = []
contract.comboLegs.append(leg1)
contract.comboLegs.append(leg2) 
  • 期权价差组合
contract = Contract()
contract.symbol = "DBK"
contract.secType = "BAG"
contract.currency = "EUR"
contract.exchange = "DTB"

leg1 = ComboLeg()
leg1.conId = 317960956 #DBK JUN 21 2019 C
leg1.ratio = 1
leg1.action = "BUY"
leg1.exchange = "DTB"

leg2 = ComboLeg()
leg2.conId = 334216780  #DBK MAR 15 2019 C
leg2.ratio = 1
leg2.action = "SELL"
leg2.exchange = "DTB"

contract.comboLegs = []
contract.comboLegs.append(leg1)
contract.comboLegs.append(leg2) 
  • 指定交易所的期货价差组合(Guaranteed Futures Spread)
contract = Contract()
contract.symbol = "VIX"
contract.secType = "BAG"
contract.currency = "USD"
contract.exchange = "CFE"

leg1 = ComboLeg()
leg1.conId = 326501438 # VIX FUT 201903
leg1.ratio = 1
leg1.action = "BUY"
leg1.exchange = "CFE"

leg2 = ComboLeg()
leg2.conId = 323072528 # VIX FUT 2019049
leg2.ratio = 1
leg2.action = "SELL"
leg2.exchange = "CFE"

contract.comboLegs = []
contract.comboLegs.append(leg1)
contract.comboLegs.append(leg2) 
  • Smart-Routed 期货价差(Smart-Routed Futures Spread)
contract = Contract()
contract.symbol = "WTI" # WTI,COIL spread. Symbol can be defined as first leg symbol ("WTI") or currency ("USD")
contract.secType = "BAG"
contract.currency = "USD"
contract.exchange = "SMART"

leg1 = ComboLeg()
leg1.conId = 55928698 # WTI future June 2017
leg1.ratio = 1
leg1.action = "BUY"
leg1.exchange = "IPE"

leg2 = ComboLeg()
leg2.conId = 55850663 # COIL future June 2017
leg2.ratio = 1
leg2.action = "SELL"
leg2.exchange = "IPE"

contract.comboLegs = []
contract.comboLegs.append(leg1)
contract.comboLegs.append(leg2) 
  • 跨商品的期货价差(Inter-Commodity Futures)
contract = Contract()
contract.symbol = "CL.BZ" #symbol is 'local symbol' of intercommodity spread. 
contract.secType = "BAG"
contract.currency = "USD"
contract.exchange = "NYMEX"

leg1 = ComboLeg()
leg1.conId = 47207310 #CL Dec'16 @NYMEX
leg1.ratio = 1
leg1.action = "BUY"
leg1.exchange = "NYMEX"

leg2 = ComboLeg()
leg2.conId = 47195961 #BZ Dec'16 @NYMEX
leg2.ratio = 1
leg2.action = "SELL"
leg2.exchange = "NYMEX"

contract.comboLegs = []
contract.comboLegs.append(leg1)
contract.comboLegs.append(leg2) 
请求获取 contract 的详细信息

在 client 连接到 TWS 之后,可以使用 reqContractDetails 函数获取 contract 的详细信息,contract 的信息会返回到 contractDetails,可以通过 details 获取详细的信息并打印出来。

contract = Contract()
contract.symbol = "EUR"
contract.secType = "CASH"
contract.currency = "USD"
contract.exchange = "IDEALPRO"
client.reqContractDetails(1, contract)