Если вы открыли у нас счет для работы с платформой S5 Trader, то кроме отличного торгового терминала вы получаете возможность создавать собственных торговых роботов. Давайте сегодня создадим первое приложение «Hello API».
При этом вы будете использовать API брокера, подключаться к серверам брокера и исполнение ордеров через вашу программу будет полностью идентично исполнению ордеров через штатный торговый терминал S5 Trader.
В наших примерах будем использовать язык C# (C sharp).
Для начала скачайте API и установите его. Также закажите аккаунт разработчика.
Запускаем Microsoft Visual Studio. Создаем КОНСОЛЬНОЕ приложение.
Обязательно добавьте ссылки на три библиотеки: API.DLL, CommLib.DLL и ProtoSharp.Core.dll:
Данные файлы появляются после установки API и хранятся обычно по адресу: «C:\Program Files\OEC\OEC API COM 3.5»
Но для своего решения вы можете разместить библиотеки непосредственно в каталог проекта.
Дальше создаем код приложения. Комментарии находятся непосредственно в коде.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Hello_oec
{
class Program
{
static OEC.API.OECClient oecapi; //объявляем объект класса OECClient — собственно с этим объектом и происходит дальше работа после соединения с сервервами брокера.
static void Main(string[] args)
{
Console.WriteLine(«Hello, OEC!»); //традиционное приветствие первой программы
oecapi = new OEC.API.OECClient(); // создаем экземпляр
// Уникальный идентификатор приложения. Сейчас используется универсальный идентификатор, но в будущем при разработке собственного приложения
//необходимо будет получить свой уникальный идентификатор для своей программы.
//использование данного UUID позволяет, в частности, подключаться к одному счету из стандартного торгового терминала S5 Trader
//и из вашей программы. Это удобно, так как позволяет следить за рынком и счетом через S5 Trader и при этом ваше приложение будет
//решать возложенные на него задачи.
oecapi.UUID = «9e61a8bc-0a31-4542-ad85-33ebab0e4e86»;
//подключаемся к серверам с использованием своего логина и пароля.
//Первый параметр — адрес для разработки. Адрес для реальных счетов: prod.openecry.com
// 9200 — порт. Он должен быть открыт
//Третий и четвертый параметры — логин и пароль. Вам надо получить его по адресу: https://tradeinwest.ru/account-api-developer/
oecapi.Connect(«api.openecry.com», 9200, «TradeInWest.ru», «TradeInWest.ru», true);
Console.WriteLine(«Connecting»);
//Подключаем обработчики событий
//Обработчик успешного соедининения
oecapi.OnLoginComplete += new OEC.API.OnLoginCompleteEvent(oecapi_OnLoginComplete);
//обработчик неудачного соединения
oecapi.OnLoginFailed += new OEC.API.OnLoginFailedEvent(oecapi_OnLoginFailed);
//Обработчик рассоединения
oecapi.OnDisconnected += new OEC.API.OnDisconnectedEvent(oecapi_OnDisconnected);
Console.WriteLine(«Press Ctrl-C to exit»);
//Так как большинство методов API — асинхронные, то для того, чтобы увидеть результаты работы запустим форму — для того чтобы приложение не закрылось.
System.Windows.Forms.Application.Run();
}
//обработчик удачного соединения. Вызывается в случае, если соединение с сервером прошло удачно.
static void oecapi_OnLoginComplete()
{
//Сообщаем об успешном соединении
Console.WriteLine(«OnLoginComplete: CompleteConnected={0}»,oecapi.CompleteConnected);
//Сообщаем общую информацию.
//В частности :
//1)количество счетов
//2)Количество ордеров (любых типов, в любом состоянии)
//3)количество контрактов, доступных для торговли
//4)количество наличных на счете
Console.WriteLine(«\tAccounts:{0}, orders:{1},base contracts:{2}, сумма на счете:{3}», oecapi.Accounts.Count,
oecapi.Orders.Count, oecapi.BaseContracts.Count,oecapi.Accounts.First.Balances.First.Cash);
//СОздали две функции, которые сообщат две дополнительную информацию о счете и о базовом контракте e-mini s&p 500 — тикер ES.
DisplayAccount(oecapi.Accounts.First);
DisplayContract(oecapi.BaseContracts[«ES»]);
}
//обработчик события неудачного соединения.
//в reason возвращается причина неудачи.
static void oecapi_OnLoginFailed(OEC.Data.FailReason reason)
{
Console.WriteLine(«OnLoginFailed:{0}», reason);
}
//обработчик события рассоединения
static void oecapi_OnDisconnected(bool unexpected)
{
Console.WriteLine(«OnDisconnected:{0}», unexpected ? «unexpected» : «expected»);
}
//через API можно получить доступ КО всей информации о своем счете.
//в процедуру передается первый из доступных счетов. Как правило он у клиента один.
//oecapi.Accounts — коллекция счетов.
//oecapi.Accounts.First — первый из коллекции
private static void DisplayAccount(OEC.API.Account account)
{
Console.WriteLine(«Account: {0}»,account);
//получаем баланс нашего счета
OEC.API.Balance totalBalance = account.TotalBalance;
Console.WriteLine(«\tNetLiq: {0}»,totalBalance.NetLiq); //ликвидационная стоимость счета
Console.WriteLine(«\tCash: {0}», totalBalance.Cash); //наличные на счете
Console.WriteLine(«\tOpen P/L: {0}», totalBalance.OpenPnL); // открытая прибыль или убыток
Console.WriteLine(«\tInitial Margin: {0}», totalBalance.InitialMargin); //задействованная маржа по открытой позиции
Console.WriteLine(«Average Positions: {0}», account.AvgPositions.Count); //количество открытых позиций
}
//Данная процедура выводит информацию о базовом контракте
//baseContract — базовый контракт
//oecapi.BaseContracts[«ES»] — нашли в коллекции базовых контрактов контракт с тикером ES — e-mini s&p 500
//и передали в эту процедуру
private static void DisplayContract(OEC.API.BaseContract baseContract)
{
//выводим его полное имя
Console.WriteLine(«BaseContractt: {0} — {1}»,baseContract.Symbol,baseContract.Name);
//выводим валюту, в которой номинирован контракт
Console.WriteLine(«\tCurrency: {0}»,baseContract.Currency.Name);
//биржа, на которой торгуется данный контракт
Console.WriteLine(«\tExchange: {0}», baseContract.Exchange.Name);
//вид контракта. В нашем случае — фьючерс
Console.WriteLine(«\tKind: {0}», baseContract.ContractKind);
//тип контракта — электронный
Console.WriteLine(«\tType: {0}», baseContract.Type);
//к какой группе относится — индексы
Console.WriteLine(«\tGroup: {0}», baseContract.ContractGroup.Name);
//время начала и окончания торговли
Console.WriteLine(«\tNormal trading session: {0}-{1}, day close: {2}», baseContract.StartTime, baseContract.StopTime, baseContract.DayClose);
//формат цены
Console.WriteLine(«\tPrice Format: {0}», OEC.API.Strings.GetPriceMask(baseContract.PriceFormat, 0));
}
}
}
Теперь запустим нашу программу на исполнение и если всё сделали правильно, то получим такой результат:
Если по каким-то причинам соединиться не получилось, то сработает обработчик oecapi_OnLoginFailed и будет сообщена причина неудачи. Например неправильный логин или пароль, как на даннном скрине:
Обработчик oecapi_OnLoginFailed в итоге выдал нам причину: InvalidUserOrPassword. Кроме того сработал и третий наш обработчик — обработчик рассоединения oecapi_OnDisconnected.
Надеюсь вам данный материал был полезен.
Открыть реальный счет
Мы в соцсетях: