盈透证券TWS API研究系列4 – 关于IB盈透合约的一二三

合约(Contract)

承袭上一篇文章《提交你的第一个订单》我们通过合约,可以查到很多交易产品的信息,可查询的内容包含但不限于大盘指数,股价,期权,期货,贵金属,债券,外汇等。

由于金融产品的相关标识有很多重复的情况,所以要查找一个具体的标的,往往需要添加许多字段信息的描述。

在上一篇文章中,我们通过EClient类的reqMatchingSymbols方法,从市场中或者说从TWS中查找了名为“IB”的合约信息,但如果我们需要查找更深一点,我们就需要准备更多的工作了。

标识一个合约对象的类,在IB盈透中,是Contract类。那我们先来看一下填写一个Contract类需要哪些东西。

Contract contract = new Contract();
contract.Symbol = "EUR";
contract.SecType = "CASH";
contract.Currency = "GBP";
contract.Exchange = "IDEALPRO";

这是一个FX外汇合约,也就是外汇合约信息。Symbol字段,表示的是合约代码,如果在大A股,就是如果查找浦发银行的合约信息,那么这个字段就是“600000”。

SecType表示的是资产类型,“CASH”表示现金或者说货币,那么股票,期货,期权,贵金属,债券等,这个字段都是不同的。

Currency表示的是货币单位,对于我们大A股的货币单位就是RMB了,而对于在美国交易的合约,其货币单位就是USD,而GBP就是英国磅的意思。

Exchange是交易所代码,IB里面还有根据具体情况而定义的PrimaryExch,也就是交易品的主要交易所代码。

那么关于这个类的具体定义,以及哪些字段可以用,我们可以直接参考官方的文档:http://interactivebrokers.github.io/tws-api/classIBApi_1_1Contract.html

需要注意的是,如果合约信息填写错误或者调用的请求函数错误,可能会无法取得想要的合约数据,会通过error函数返回错误的数据,所以如果发现了合约获取失败,就要注意是字段填写错误,还是请求函数错误了。

美国盈透证券优惠信息(新、老盈透用户均适用):

盈透证券优惠开户链接:https://www.e-investingguide.com/interactivebrokers

无论你是已经在盈透证券入金交易的老客户或者是正准备在盈透证券开户的新客户,如果你需要免除盈透证券每月10美元账户维护费以及降低盈透证券账户交易佣金水平(具体能优惠和降低多少,取决于你的交易量,已经入金交易的盈透用户也能挂靠降低佣金),都可以联系我,在IB盈透证券出入金及TWS软件使用、API接口使用、开立机构类账户(离岸对冲基金、家族办公室、自营交易集团)等方面遇到问题的也可以联系我询问。 可以发Email邮件联系我,我的邮箱地址是 giftlord@gmail.com

我的微信号:47268101 或者打开微信,直接扫描下方二维码添加我为好友即可咨询:

可用合约列表

虽然说这个列表在IB的文档里有详细说明,但为了方便大家以后查找,当然也方便我自己将来检索使用,所以我在这里把这些都罗列出来。

FX Pairs 外汇
Contract contract = new Contract();
contract.Symbol = “EUR”;
contract.SecType = “CASH”;
contract.Currency = “GBP”;
contract.Exchange = “IDEALPRO”;

Stocks 股票
Contract contract = new 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”;

由于可能存在相同交易代码,为了更快的获取到对应股票合约信息,除了股票代码,货币符号,交易所,你还需要指定主要的交易所标记,以便唯一地确定对应的合约,具体实现如下:

Contract contract = new 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.PrimaryExch = "ISLAND";

需要注意下,primaryExch 字段指定主要交易所,避免由于交易所符号不清晰,导致歧义。其次,对于美国来说,IB使用ISLAND来代指纳斯达克,所以如果是要查询纳斯达克的某个合约,PrimaryExch就要写成ISLAND。

需要注意,这个只是IB自己的定义,而不是代表着所有的其他类似系统也是这样定义的。

另外,作为主要交易所和交易所字段的替代方法,可以通过指定字段“Exchange:Primary Exchange”,例如:“SMART:NASDAQ”,使用“:”或“/”符号区分字段。

Indexes 指数
Contract contract = new Contract();
contract.Symbol = “DAX”;
contract.SecType = “IND”;
contract.Currency = “EUR”;
contract.Exchange = “DTB”;

CFDs 差价合约
Contract contract = new Contract();
contract.Symbol = “IBDE30”;
contract.SecType = “CFD”;
contract.Currency = “EUR”;
contract.Exchange = “SMART”;

Futures 期货
标准期货合约通常使用到期日和symbol字段作为基础标记进行定义。

Contract contract = new Contract();
contract.Symbol = "ES";
contract.SecType = "FUT";
contract.Exchange = "GLOBEX";
contract.Currency = "USD";
contract.LastTradeDateOrContractMonth = "201803";

此外,IB使用“LocalSymbol” 标记为期货专用。当使用“local symbol”标记期货合约时,“合约到期日”字段不再需要。

例如:

Contract contract = new Contract();
contract.SecType = "FUT";
contract.Exchange = "GLOBEX";
contract.Currency = "USD";
contract.LocalSymbol = "ESU6";

某些时候,你可能期望获得多于单一期货合约的多个拥有共同基础标记及合约到期日(注:例如某一天到期的多个棉花期货合约)。为了处理歧义性,可以设置合约乘数“Multiplier”,例如:

Contract contract = new Contract();
contract.Symbol = "DAX";
contract.SecType = "FUT";
contract.Exchange = "DTB";
contract.Currency = "EUR";
contract.LastTradeDateOrContractMonth = "201609";
contract.Multiplier = "5";

也可以通过设置连续合约获取某合约的历史数据,时间轴,或者合约详细信息。连续期货合约不能用于实时数据,或着提交订单。

Contract contract = new Contract();
contract.Symbol = "ES";
contract.SecType = "CONTFUT";
contract.Exchange = "GLOBEX";

资产类型“FUT+CONTFUT”可以被用于查询合约详细信息及合约历史信息,除此之外不能被其他合约类型使用。

Contract contract = new Contract();
contract.Symbol = "ES";
contract.SecType = "FUT+CONTFUT";
contract.Exchange = "GLOBEX";

Options 期权合约
如同期货,期权合约也需要到期日,以及一个期权合约乘数。

Contract contract = new Contract();
contract.Symbol = "GOOG";
contract.SecType = "OPT";
contract.Exchange = "BOX";
contract.Currency = "USD";
contract.LastTradeDateOrContractMonth = "20170120";
contract.Strike = 615;
contract.Right = "C";
contract.Multiplier = "100";

查找几乎拥有相同属性的期权合约(如基础标识,竞价,最近交易时间,乘数等),通过增加更多的信息,可以帮助用户更容易的找到对应的期权合约。

Contract contract = new 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";

使用OCC属性标记,可以在API中用来定义一个期权合约。

Contract contract = new Contract();
//Watch out for the spaces within the local symbol!
contract.LocalSymbol = "C DBK  DEC 20  1600";
contract.SecType = "OPT";
contract.Exchange = "DTB";
contract.Currency = "EUR";

Futures Options 期货期权
Contract contract = new Contract();
contract.Symbol = “ES”;
contract.SecType = “FOP”;
contract.Exchange = “GLOBEX”;
contract.Currency = “USD”;
contract.LastTradeDateOrContractMonth = “20180316”;
contract.Strike = 2800;
contract.Right = “C”;
contract.Multiplier = “50”;

Bonds 债券

债券可以在“symbol”为“CUSIP”或“ISIN”,具体的标识,可以通过reqMatchingSymbols或者在TWS中查看。

Contract contract = new Contract();
// enter CUSIP as symbol
contract.Symbol = "912828C57";
contract.SecType = "BOND";
contract.Exchange = "SMART";
contract.Currency = "USD";

债券也可以像其他资产类型一样,通过conId和exchange进行定义。

Contract contract = new Contract();
contract.ConId = 285191782;
contract.Exchange = "SMART";

Mutual Funds 共同基金
API也提供了对共同基金的支持。

注意!模拟交易账户不能交易共同基金。

Contract contract = new Contract();
contract.Symbol = "VINIX";
contract.SecType = "FUND";
contract.Exchange = "FUNDSERV";
contract.Currency = "USD";

Commodities 商品期货
Contract contract = new Contract();
contract.Symbol = “XAUUSD”;
contract.SecType = “CMDTY”;
contract.Exchange = “SMART”;
contract.Currency = “USD”;

Dutch Warrants and Structured Products 荷兰认股权证
这种类型的资产,在IB种有很多,所以容易导致歧义,因此IB要求用户必须填写conId和localSymbol。

Contract contract = new Contract();
contract.LocalSymbol = "B881G";
contract.SecType = "IOPT";
contract.Exchange = "SBF";
contract.Currency = "EUR";

今天就先到这里,在下一篇文章种,我们来研究下怎么提交这些不同的合约数据。
————————————————
版权声明:本文为CSDN博主「打码的阿通」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/poisonchry/article/details/98964143

Be the first to comment on "盈透证券TWS API研究系列4 – 关于IB盈透合约的一二三"

Leave a comment