Получаем quotes через API

В данной статье разберем как получить quotes через API.

В терминале есть окно Quotes в котором отображаются котировки по выбранным инструментам. Вот например:

quotes через API

Сегодня мы сможем получить котировки от брокера посредством его API.

Создаем консольное приложение, подключаем библиотеки API, как было показано в предыдущих статьях.

Подключаем (и создаем) обработчики стандартных событий — успешное соединение, неудачное соединение, отключение от сервера.  Кроме этого подключаем новый обработчик — обработчик получения новой цены:

static void Main(string[] args)
 {
//........
 //обработчик получения тика
 oecapi.OnPriceTick += new OEC.API.OnPriceChangedEvent(oecapi_OnPriceTick);
//обработчик поиска необходимых фьючерсов
 oecapi.OnSymbolLookupReceived += new OEC.API.OnSymbolLookupEvent(oecapi_OnSymbolLookupReceived);
//........
 }

OnPriceChangedEvent

Occurs when contract price changed — событие наступает тогда, когда происходит  изменение цены.
Причем хочу уточнить, что под ЦЕНОЙ понимается не только сама цена последней сделки, но объемы, бид и аск цены и бид и аск объемы.
Также следует обратить внимание, что речь идет не о сделках, а котировках — выставленных бидах и асках и цене последней сделки.  То есть данный обработчик вызывается, например в том случае, когда кто-то выставил свою лимитную заявку в лучший бид и тем самым изменил совокупный объем на биде. При этом никаких сделок может не происходить, никаких изменений цены также может не происходить.
Теперь собственно сам обработчик события получения quotes через API:
static void oecapi_OnPriceTick(OEC.API.Contract contract, OEC.API.Price price)
 {
 Console.WriteLine("{0} {1} LP:{2} Bid:{3} Ask:{4} Vol:{5}, VolL:{6}",
 contract.Symbol, price.LastDateTime,
 contract.PriceToString(price.LastPrice),contract.PriceToString(price.BidPrice), contract.PriceToString(price.AskPrice),
 price.TotalVol,price.LastVol);
 }

Он простейший. В него передается контракт, по которому произошло изменение и цена. Далее просто выводим ЧАСТЬ информации:

quotes через API

А вот как это выглядит в динамике:

В данном примере мы получали quotes через API только для одного фьючерса — ESU6

Для этого мы объявляли соответствующую переменную:

static OEC.API.SimpleSymbolLookupCriteria esu6SymbolLookupRequest = null;

Потом в обработчике успешного соединения сделали поиск нужного фьючерса:

esu6SymbolLookupRequest = oecapi.SymbolLookup("ESU6");

А потом уже подписались на котировки данного фьючерса:

static void oecapi_OnSymbolLookupReceived(OEC.API.SymbolLookupCriteria symbolLookup, OEC.API.ContractList contracts)
 {
 if (esu6SymbolLookupRequest != null && symbolLookup.ID == esu6SymbolLookupRequest.ID)
 {
 Console.WriteLine("Symbol lookup request for ESU6 found {0} contracts", contracts.Count);
 foreach (var contract in contracts)
 {
 oecapi.Subscribe(contract); // Subscribe for quotes
 }
 }
 }

Полный текст программы.
Помните, выше я писал, что Price и изменение прайса — это не только сама цена, но гораздо больше.
Вот что в класс Price:

Real-time price data for a contract

Price Class

NameDescription
AskPrice
Best ask price
AskVol
Best ask volume
BidPrice
Best bid price
BidVol
Best bid volume
Change
last price — prev.settlement
ChangePercent
price change in percents
CumLastVol
Cumulative volume of last same price trades
Fields
Valid fields
Hidden
Flag: Don’t update UI
HighPrice
Daily high price
LastDateTime
Last trade timestamp
LastPrice
Last traded price
LastVol
Volume of last trade
LowPrice
Daily lov price
OpenInterest
Open interest
OpenPrice
Daily open price
PnLOnly
Flag: Don’t show price, only for position caluclations.
PrevPriceObsolete.

Previous price (obsolete)
Settlement
Settlement of previous dat
SettlementDateTime
Settlement of previous dat
TotalVol
Total daily volume

Соответственно в обработчике получения котировок вы можете получить все эти данные например так:

Price.LastVol — объем последней сделки.

Надеюсь данный материал показался вам интересным и полезным.

Закажите демоверсию торгового терминала Global Zen Trader
Как открыть реальный счет
Мы в соцсетях:
Наша группа в фейсбук Следите за нами в Твиттере Наша группа в Вконтакте