Symbol Lookup — конкретные контракты, которыми можно торговать

Symbol Lookup — получим конкретные контракты для торговли.

В одном из предыдущих занятий мы рассматривали такое понятие, как «Базовые контракты» . Базовые контракты содержат массу полезной и практической информации о фьючерсах и опционах и спредах, доступных у брокера. Но нет самого главного!

Это не те объекты, которыми собственно можно торговать. Торговля осуществляется не базовыми контрактами, а конкретными фьючерсами, ПРИВЯЗАННЫМИ К времени экспирации.

В данном уроке научимся их получать. В следующих материалах они будут использоваться постоянно. Поэтому внимательно изучите данный материал.

Создаем новое приложение в Visual Studio — windows forms. Не забываем подключить нужные dll (смотрите первые статьи).

Создаем форму, как показано на рисунке:

Symbol Lookup. форма приложения

Ниже полный текст программы с подробным комментариями:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows;

namespace Symbol_Lookup
{
 public partial class Form1 : Form
 {
 static OEC.API.OECClient oecClient;
 static OEC.API.SimpleSymbolLookupCriteria ourSymbolLookupRequest = null;
 static OEC.API.SymbolLookupCriteria aBunchOfOurSymbol = null;


 public Form1()
 {
 InitializeComponent();
 oecClient = new OEC.API.OECClient();
 oecClient.UUID = "9e61a8bc-0a31-4542-ad85-33ebab0e4e86";
 login.Text = "TradeInWest.ru";
 password.Text = "TradeInWest.ru";
 oecClient.OnLoginComplete += new OEC.API.OnLoginCompleteEvent(onLoginComplete);
 oecClient.OnLoginFailed += new OEC.API.OnLoginFailedEvent(onLoginFailed);
 oecClient.OnDisconnected += new OEC.API.OnDisconnectedEvent(onDisconnected);
 //добавляем обработчик события - получение доступных контрактов для торговли по запросу.
 oecClient.OnSymbolLookupReceived += new OEC.API.OnSymbolLookupEvent(OnSymbolLookupReceived);

 }
 //подключаемся к серверу брокера
 private void bConnect_Click(object sender, EventArgs e)
 {
 oecClient.Connect("api.openecry.com", 9200, login.Text, password.Text, true);
 }

 //обработчик клика на кнопку "рассоединение"
 private void bDisconnect_Click(object sender, EventArgs e)
 {
 //отсоединяемся.
 oecClient.Disconnect();
 lStatus.Text = "";
 }

 //обработка удачного подключения
 private void onLoginComplete()
 {
 //Сообщаем об успешном соединении 
 lStatus.Text = "Соединение установлено. Счет:" + oecClient.Accounts.First.Name;
 //пока есть соединение кнопка Connect - не активна.
 bConnect.Enabled = false;
 //а вот кнопку DisConnect делаем активной
 bDisconnect.Enabled = true;
 //И заполняем списки контрактов
 }

 //обработка неудачного соединенияя
 private void onLoginFailed(OEC.Data.FailReason reason)
 {
 lStatus.Text = "Соединение не удалось: " + reason.ToString();
 //колдуем над доступностью кнопок
 bConnect.Enabled = true;
 bDisconnect.Enabled = false;
 }

 //обработка отключения от сервера
 private void onDisconnected(bool unexpected)
 {
 //колдуем над доступностью кнопок
 bConnect.Enabled = true;
 bDisconnect.Enabled = false;
 }
 //обработчик получения по запросу списка доступных для торговли контрактов.
 private void OnSymbolLookupReceived(OEC.API.SymbolLookupCriteria symbolLookup, OEC.API.ContractList contracts)
 {
 string strContract="";
 listContracts.Items.Clear();

 if (aBunchOfOurSymbol != null && symbolLookup.ID == aBunchOfOurSymbol.ID)

 {
 //перебираем контракты из коллекции контрактов , которую получили в результате выборки
 foreach (var contract in contracts)

 {
 //отбираем только фьючерсы
 if (contract.BaseContract.ContractKind == OEC.Data.ContractKind.Future)
 {
 //формируем строку и добавляем ее в listbox для отображения
 strContract = "Contract: " + contract.Symbol + "; Expiration Date: " + contract.ExpirationTime;
 listContracts.Items.Add(strContract);
 }
 
 }
 }

 } 
 //обработчик клика на кнопку "Показать контракты"
 private void bSymbolLookup_Click(object sender, EventArgs e)
 {
 //если символ не указан, то поиск не производим
 if (tSymbol.Text == "")
 {
 MessageBox.Show("Укажите символ контракта для поиска");
 return;
 }

 //формируем фильтр критериев для поиска доступных контрактов
 aBunchOfOurSymbol = new OEC.API.SymbolLookupCriteria()
 {
 SearchText = tSymbol.Text,
 ContractType = OEC.Data.ContractType.Electronic,
 Mode = OEC.Data.SymbolLookupMode.AnyInclusion,
 DesiredResultCount = 20
 };
 //получаем доступные контракты
 oecClient.SymbolLookup(aBunchOfOurSymbol);
 }
 }
}

Здесь можете скачать готовый проект.

Ниже представлю скриншоты работы программы, а потом разберем ключевые моменты, на которые надо обратить внимание.

Запустили программу, подключились к серверу, указали интересующий нас тикер «6e» и нажали кнопку «Показать контракты». Получаем следующее:

Symbol Lookup - 6e - евродоллар

Как вы видите отображаются в списке КОНКРЕТНЫЕ контракты фьючерса 6E (на валютную пару евродоллар) с датами их экспирации.  Вот уже с этими контрактами в списке можно совершать конкретные сделки!

Другой пример (для фьючерса E-Mini S&P 500):

Symbol Lookup - es - e-mini s&p 500

В качестве тикера можно указывать не только сивол базового контракта, но и полную спецификацию, включающую кроме тикера базового контракта, но и месяц и год экспирации контракта.  Например, можно получить декабрьский контракт по E-Mini S&P 500: esz6.

Symbol Lookup - esz6

Ключевые участки кода:

 //формируем фильтр критериев для поиска доступных контрактов
 aBunchOfOurSymbol = new OEC.API.SymbolLookupCriteria()
 {
 SearchText = tSymbol.Text,
 ContractType = OEC.Data.ContractType.Electronic,
 Mode = OEC.Data.SymbolLookupMode.AnyInclusion,
 DesiredResultCount = 20
 };
 //получаем доступные контракты
 oecClient.SymbolLookup(aBunchOfOurSymbol);
 }

Переменная aBunchOfOurSymbol — содержит в себе критерии отбора и поиска доступных фьючерсов. В частности происходит поиск с параметром SearchText, тип контрактов — электронные, ограничение по количеству — 20 контрактов.

После задания критерия поиска производим собственно поиск:

//получаем доступные контракты
 oecClient.SymbolLookup(aBunchOfOurSymbol);

А далее в обработчике получения найденных контрактов выводим полученную коллекцию:

//обработчик получения по запросу списка доступных для торговли контрактов.
 private void OnSymbolLookupReceived(OEC.API.SymbolLookupCriteria symbolLookup, OEC.API.ContractList contracts)
 {
 string strContract="";
 listContracts.Items.Clear();

 if (aBunchOfOurSymbol != null && symbolLookup.ID == aBunchOfOurSymbol.ID)

 {
 //перебираем контракты из коллекции контрактов , которую получили в результате выборки
 foreach (var contract in contracts)

 {
 //отбираем только фьючерсы
 if (contract.BaseContract.ContractKind == OEC.Data.ContractKind.Future)
 {
 //формируем строку и добавляем ее в listbox для отображения
 strContract = "Contract: " + contract.Symbol + "; Expiration Date: " + contract.ExpirationTime;
 listContracts.Items.Add(strContract);
 }
 
 }
 }

Надеемся данный материал бы полезен вам. Обязательно постарайтесь с ним разобраться, так как в последующем активно будем возвращаться к получению конкретных фьючерсов.

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