В данной статье разберем как получить quotes через API.
В терминале есть окно Quotes в котором отображаются котировки по выбранным инструментам. Вот например:
Сегодня мы сможем получить котировки от брокера посредством его API.
Создаем консольное приложение, подключаем библиотеки API, как было показано в предыдущих статьях.
Подключаем (и создаем) обработчики стандартных событий — успешное соединение, неудачное соединение, отключение от сервера. Кроме этого подключаем новый обработчик — обработчик получения новой цены:
static void Main(string[] args) { //........ //обработчик получения тика oecapi.OnPriceTick += new OEC.API.OnPriceChangedEvent(oecapi_OnPriceTick); //обработчик поиска необходимых фьючерсов oecapi.OnSymbolLookupReceived += new OEC.API.OnSymbolLookupEvent(oecapi_OnSymbolLookupReceived); //........ }
OnPriceChangedEvent
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 только для одного фьючерса — 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
Name | Description | |
---|---|---|
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.
|
|
PrevPrice | Obsolete.
Previous price (obsolete)
|
|
Settlement |
Settlement of previous dat
|
|
SettlementDateTime |
Settlement of previous dat
|
|
TotalVol |
Total daily volume
|
Соответственно в обработчике получения котировок вы можете получить все эти данные например так:
Price.LastVol — объем последней сделки.
Надеюсь данный материал показался вам интересным и полезным.
Как открыть реальный счет
Мы в соцсетях: