Блог им. traderblogger

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 (на валютную пару евродоллар) с датами их экспирации.  Вот уже с этими контрактами в списке можно совершать конкретные сделки!

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

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

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

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

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

 //формируем фильтр критериев для поиска доступных контрактов
 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);
 }
 
 }
 }

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

  • Ключевые слова:
  • cme,
  • api
61 | ★2

Читайте на SMART-LAB:
5 идей в российских акциях. Индекс МосБиржи снова на грани 2700
Индекс МосБиржи опять торгуется на грани значимого уровня 2700 п. Сейчас не исключен очередной отскок от указанного уровня. Кроме того, рынок...
Фото
USD/JPY: пара возобновила рост на фоне японской неопределенности
Японская йена с началом нового года продолжила свое снижение после долгого периода консолидации, достигнув новых локальных экстремумов. Одним из...
Фото
ПАО «АПРИ» планирует размещение облигаций серии БО-002Р-13
ПАО «АПРИ» планирует размещение облигаций серии БО-002Р-13 💼 Предварительные параметры выпуска: 🔵 Предварительная дата сбора...
Фото
Хэдхантер. Ситуация на рынке труда в декабре идет ко дну - хуже не было никогда
Вышла статистика рынка труда за декабрь 2025 года, которую Хедхантер публикует ежемесячно, что же там интересного: Динамика...

теги блога Рустам TradeInWest.ru

....все тэги



UPDONW
Новый дизайн