Problems with lookup of security
Atom
31.10.2017
Johan Kirsten


I have a windows service that hosts a web api interface. The service connects to an interactive broker TWS. A call to the web api must lookup the security and return the Id. The code to do this is:
var criteria = new SecurityLookupMessage()
{
Class = "",
ExpiryDate = DateTimeOffset.Parse(expiryDate),
OptionType = optionType == null ? default(OptionTypes?) : (OptionTypes)Enum.Parse(typeof(OptionTypes), optionType),
Strike = strike,
UnderlyingSecurityCode = underlyingSecurityCode,
SecurityType = securityType == null ? default(SecurityTypes?) : (SecurityTypes)Enum.Parse(typeof(SecurityTypes), securityType),
};

var security = _connector.Securities.FirstOrDefault(s =>
(s.UnderlyingSecurityId.StartsWith(criteria.UnderlyingSecurityCode)) &&
(s.Board?.Code == boardCode) &&
(s.Class == @class) &&
(s.Type == criteria.SecurityType) &&
(s.ExpiryDate == criteria.ExpiryDate) &&
(s.OptionType == criteria.OptionType) &&
(s.Strike == criteria.Strike));

if (security == null)
{
var onNewSecurity = new Action<Security>(s =>
{
if ((!s.UnderlyingSecurityId.StartsWith(criteria.UnderlyingSecurityCode)) ||
(s.Type != criteria.SecurityType) ||
(s.Board?.Code != boardCode) ||
(s.Class != @class) ||
(s.ExpiryDate != criteria.ExpiryDate) ||
(s.OptionType != criteria.OptionType) ||
(s.Strike != criteria.Strike) )
return;

waitHandle.Set();
});

_connector.NewSecurity += onNewSecurity;

_connector.LookupSecurities(criteria);

waitHandle.WaitOne(30000);

_connector.NewSecurity -= onNewSecurity;

security = _connector.Securities.FirstOrDefault(s =>
(s.UnderlyingSecurityId.StartsWith(criteria.UnderlyingSecurityCode)) &&
(s.Board?.Code == boardCode) &&
(s.Class == @class) &&
(s.Type == criteria.SecurityType) &&
(s.ExpiryDate == criteria.ExpiryDate) &&
(s.OptionType == criteria.OptionType) &&
(s.Strike == criteria.Strike));
}

If I search for "SPZ7@GLOBEX" and then "SPXW 171215C02580000@SMART" it works fine. But if I first search for "SPXW 171215C02580000@SMART", then it cannot find "SPZ7@GLOBEX". It is like the option prohibits the searching of the future. Also, sometimes if I search for the option first, then it only finds "SPXW 171215C02580000@ALL" and "SPXW 171215C02580000@CBOE", but then if I search again no search returns "SPXW 171215C02580000@SMART". It is like the incomplete loaded results prohibit the later loading of extra results.



Спасибо:


Support

Фотография
Дата: 31.10.2017
Ответить


Hello,

IB do not provide search by futures or options codes. Only by underlying symbol. So for futures the lookup code should be

Код
connector.LookupSecurities(new Security
{
    Code = "SPX",
    Type = SecurityTypes.Future
});


For options chain

Код
connector.LookupSecurities(new Security
{
    Code = "SPX",
    Board = new ExchangeBoard { Code = "GLOBEX" },
    Type = SecurityTypes.Option,
    Currency = CurrencyTypes.USD,
});
Спасибо:

Johan Kirsten

Фотография
Дата: 31.10.2017
Ответить


Hi

Thank you for the feedback. I can do what you suggest, but the reason for me loading it in the way I did, is I do not want to load 300+ options. It takes time and memory. I want to load a specific set of options/futures into memory. Can I specify strike, expiry and optiontype in the examples you specified?
Спасибо:

Mikhail Sukhov

Фотография
Дата: 31.10.2017
Ответить


Johan Kirsten
Hi

Thank you for the feedback. I can do what you suggest, but the reason for me loading it in the way I did, is I do not want to load 300+ options. It takes time and memory. I want to load a specific set of options/futures into memory. Can I specify strike, expiry and optiontype in the examples you specified?


Yes, you can put more filtering details. Here is sample how to filter by expiration date and option type. Strike also can be specified:

Код
connector.LookupSecurities(new Security
{
    Code = "SPX",
    Board = new ExchangeBoard { Code = "GLOBEX" },
    Type = SecurityTypes.Option,
    Currency = CurrencyTypes.USD,
    ExpiryDate = new DateTime(2017, 12, 14).ApplyTimeZone(TimeZoneInfo.Utc),
    OptionType = OptionTypes.Call,
});
Спасибо:

Johan Kirsten

Фотография
Дата: 01.11.2017
Ответить


Hi

Thank you, this worked for me

Regards
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy