fix api что это

Что такое FIX API и зачем протокол FIX нужен трейдеру?

Что такое протокол FIX API и какое место он занимает в структуре рынка Форекс.

Протокол FIX широко используется институциональными трейдерами, но чем он может быть полезен частным трейдерам?

У меня есть советник для MetaTrader 4, который зарабатывает. Как мне подружить его с FIX API?

Имея доступ по протоколу FIX API, частные трейдеры становятся на один уровень с институциональными трейдерами. Они могут создавать свои торговые системы, которые будут получать данные от одного или нескольких различных брокеров и смогут служить единым торговым интерфейсом для размещения ордеров в нескольких местах. Это определенно увеличит эффективность трейдинга, поскольку, к примеру, не нужно загружать интерфейс каждой платформы отдельно и работать с брокерами индивидуально.

Доступ по FIX API влияет только на алгоритмическую торговлю или на торговлю вручную тоже?

Протокол FIX может быть использован любым трейдером, который хочет создать стороннюю торговую программу. Это необязательно будет программа для алгоритмического трейдинга, хотя это самый распространенный вариант.

Например, трейдер может хотеть создать свою собственную централизованную торговую систему с особенным интерфейсом, который не будет показывать график, а вместо него будет показывать числовые данные цен, распознанные паттерны или тренды вместе с кнопками Buy/Sell. Использование таких программ дает возможность создания уникальных торговых систем, которые редко можно увидеть у индивидуальных трейдеров. Пример: модуль для торговли вручную в FIX Trader.

Другой пример: трейдер хочет создать аналитическую систему, которая будет хранить значения цен, отслеживать события, анализировать движения на рынке и выдавать специфический поток информации, на основании которой торговое решение принимает уже сам трейдер, в отличие от полностью механизированных систем, в которых решения принимает алгоритм программы.

Что нужно знать для торговли через FIX API?

Как получить доступ по FIX API?

Источник

Cпособы передачи финансовых данных: протокол FIX

Фондовый рынок является высокотехнологичной отраслью — помимо физической ИТ-инфраструктуры и технологичных торговых роботов игроки этого рынка занимаются развитием технических стандартов протоколов передачи данных. Сегодняшним материалом мы открываем серию топиков о протоколах передачи финансовой информаци. В первом выпуске представлена информация об одном из старейших протоколов — Financial Information eXchange или сокращенно FIX.

Немного истории

Создание протокола FIX было инициировано рядом финансовых организаций США в 1992 году — брокеры и инвестфонды хотели ускорить процесс осуществления торговых операций на бирже. В то время значительная часть торговых операций совершалась с помощью телефона, а протокол FIX позволил перевести взаимодействия в электронный вид.

В результате родился открытый стандарт передачи информации в электронном виде, который не контролирует ни одна из крупных организаций. Сегодня FIX стал отраслевым стандартом, который используется участниками финансового рынка разных стран для связи своих продуктов.

Как это работает

В настоящий момент протокол определен на двух уровнях — сессии (работа над доставкой данных) и приложения (описание содержимого данных). Существует два варианта синтаксиса протокола — традиционный, вида Tag=Value и в формате XML (FIXML). Рассмотрим каждый из них.

Синтаксис Tag Value

Сообщения протокола FIX обычно содержат заголовок и, собственно, тело сообщения. Каждое сообщение представляет собой поток полей =, отделенных друг от друга специальными символами — в спецификации FIX для разделения данных использован ASCII-символ SOH (#001, 0x01).

Тело сообщения обычно состоит из заголовка, тела сообщения и завершающего элемента (трейлера). Первым полем сообщения всегда является обозначение начала строки (BeginString, тег #8), затем указывается длина тела сообщения (BodyLength тег #9) и тип сообщения (MsgType, тег #35). Последним символом трейлера всегда является контрольная сумма (тег #10).

Часто сообщения содержат, как зашифрованную часть, так и символы, переданные в текстовом виде — данная схема обычно используется для валидации и верификации данных. Например, передача зашифрованного значения SenderCompID, указывающего на отправителя, является устаревшим способом валидации.

Для обеспечения большей гибкости FIX протокол содержит так называемые пользовательские поля — User Defined Fields. Они используются при передачи данных между сотрудничающими финансовыми организациями. Номера тегов с 5000 до 9999 были зарезервированы под пользовательские поля — зарезервировать их можно было на официальном сайте стандарта. В дальнейшем эти номера были израсходованы, поэтому был выделен новый интервал — с 20000 до 39999.

Сообщения в формате Tag Value выглядят следующим образом (символ ^ — это разделитель SOH):

8=FIX.4.2^9=251^35=D^49=AFUNDMGR^56=ABROKER^34=2^52=20030615-01:14:49^11=12345^ 1=111111^63=0^64=20030621^21=3^110=1000^111=50000^ 55=IBM^48=459200101^22=1^54=1^60=2003061501:14:49 38=5000^40=1^44=15.75^15=USD^59=0^10=127

Синтаксис FIXML

Работы по созданию синтаксиса в формате XML начались в 1998 году, а первая версия FIXML появилась в январе 1999 года.

Новая заявка на совершение операции в формате FIXML описывается следующим образом:

Здесь ClOrdID — id-ордера, side=”2” означает заявку на продажу, далее указывается время транзакции, тип заявки (2 соответствует Limit-ордеру) и его цена pX. Поле Acct означет номер счета пользователя.

Далее в сообщении указывается информация о ценной бумаге и число ценных бумаг, которые нужно купить или продать. В итоге простое сообщение будет выглядеть примерно так:

В начале пути XML-версии FIX использовался только механизм определения синтаксиса DTD. В дальнейшем организация W3C разработала новый механизм — XML Schema, что заставило разработчиков FIX адаптировать стандарт для использования этого варианта синтаксиса.

Этот шаг позволил добиться улучшения XML-версии протокола FIX, в частности, пользователи получили возможность добавления в сообщения атрибутов и контекстных сокращений.

Читайте также:  субхондральный склероз замыкательных пластинок шейного отдела позвоночника что это

Базовая организация схемы XML предполагает наличие типов данных, используемых в полях, которые содержатся в отдельном файле. Поля FIX определяются в специальном shared-файле, а компоненты и элементы синтаксиса FIXML в специальных файлах компонентов. Сообщения FIXML определяются с помощью специальных файлов, указывающих категорию.

Пример сообщения об отправке заявки на FIXML (Schema):

Сообщения FIX

Каждое сообщение, отправленное в формате протокола FIX, состоит из обязательных, необязательных и условно обязательных (в зависимости от значения других частей сообщения) полей.

FIX на российских биржах

C помощью протокола FIX любой желающий может напрямую подключиться к «Московской бирже». Кроме того, биржа работает над унификацией доступа по FIX для всех доступных рынков (акции, срочный, валютный).

ITinvest также предоставляет своим клиентам доступ к рынкам «Московской биржи» с помощью прямого подключения по протоколу FIX. Кроме того, для высокочастотных торговцев и алготрейдеров созданы специальные ИТ-услуги от колокации серверов в дата-центре M1 до предоставления доступа к виртуальным машинам для размещения торгового робота.

Другие протоколы

Для получения рыночной информации (Market Data) используется протокол FAST (Fix Adapted for STreaming) — стандарт, разработанный создателями протокола FIX, который позволяет добиться значительных возможностей компрессии данных для передачи больших объемов рыночной информации с минимальными временными задержками. Помимо Московской биржи, используется на NYSE, Nasdaq-OMX и многих других мировых площадках.

Также для прямого подключения используются так называемые нативные протоколы, которые возникли еще до объединения бирж ММВБ и РТС в «Московскую биржу».

Так на рынках относившихся к бирже РТС (FORTS – фьючерсы и опционы, Standard), для прямого совершения операций и получения данных в режиме подключения используется протокол Plaza II. Для выполнения торговых операций и получения биржевых данных на площадках, ранее относившихся к бирже ММВБ (валютный и фондовый рынки) используется двунаправленный шлюз MICEXBridge (TEAP).

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

Источник

электронная торговля на бирже

Алгоритмический HFT трейдинг- это автоматическая торговая система, работающая по алгоритму latency арбитража, с использованием специализированного программного обеспечения, использующего для передачи данных fix протокол. Для получения прибыли необходима скорость получения и передачи котировок на уровне миллисекунд и частота сделок, которая неподвластна обычному трейдеру.

Преимущества использования технологии подключения FIX протокола

Технологии FIX Protocol позволяет трейдеру получить прямой доступ к поставщику ликвидности или бирже без использования терминала.
FIX протокол является одним из самых быстрых методов передачи финансовой информации и его использование для целей low-latency трейдинга и арбитража на Форекс имеет несомненное преимущество перед всеми другими методами. Наиболее распространенным и удобным является движок Quick FIX используемый программистами для упрощения разработки программ.
Разработчики нашей компании выпустили уникальное программное обеспечения Westernpips FIX API Trader 3.9 для торговли через FIX протокол.

Наиболее распространенным и удобным является механизм Quick FIX, используемый программистами для упрощения разработки программ.

Какие брокеры поддерживают доступ по протоколу FIX для HFT Trading?

Сегодня многие крупные брокеры и поставщики ликвидности предлагают доступ к торговле и рыночным данным через Fix протокол. Компания Westernpips Group налаживает связь со многими из брокеров и наш список постоянно расширяется по мере заявок клиентов и появления новых брокеров.

Westernpips FIX Trader 3.9 это уникальное программное обеспечения для HFT трейдинга через FIX протокол. В него заложена стратегия latency арбитража и при правильном выборе дата центра программа способна обрабатывать данные со скоростью меньше миллисекунды. В качестве быстрого и медленного брокера можно использовать любую комбинацию из предложенных в программе брокеров.

Брокеры доступные на сегодня для торговли по FIX протоколу в программе Westernpips FIX Trader 3.9.

Стоимость использования подключения по FIX протоколу

Внимание! Например, котировки / торговля с LMAX Exchange по протоколу FIX обходятся в 300 долларов в месяц. Некоторые брокеры могут взимать до 1500 долларов в месяц и более.

Стоимость также зависит от вашего объема торговли и начального депозита. Минимальный депозит для открытия счета с возможностью торговли по протоколу FIX составляет от 10000 долларов США.

Другие электронные торговые протоколы

Для целей HFT трейдинга используются так же другие более скоростные протоколы передачи данных и котировок. Эти виды электронного трейдинга доступны более крупным институциональным трейдерам и фирмам с капиталом от 10 000 USD, так как использование этой технологии требует затрат на оборудование и подключение cross-connect соединения с поставщиком котировок.

Технологии API трейдинга позволяет трейдеру получить прямой доступ к поставщику ликвидности или бирже без использования терминала

Возможности Приватного HFT трейдинга от Westernpips

Компания Westernpips является лидером на рынке технологий арбитража для low-latency трейдеров. С 2007 года мы работаем, улучшаем и ищем новые пути для алгоритмического трейдинга и получения прибыли не только участниками нашей компании, но и нашими клиентами, партнёрами и инвесторами. Вместе с вами мы прошли уже долгий путь и сегодня нашими продуктами и услугами пользуются во всем мире и нам доверяют многие крупные институциональные трейдеры, потому что мы работаем для успеха наших клиентов и новых достижений в сфере высокочастотного алготрейдинга и арбитража на Forex, CFD`s, рынке фьючерсов и крипто валют.

Читайте также:  что делать если бешеная сестра

Если вы трейдер или инвестор и вас заинтересовали технологии HFT трейдинга, свяжитесь с нами для получения консультации.

Источник

Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#

Вступление

Никогда не увлекался скоростным трейдингом. Всегда хватало терминала. Изучать этот протокол меня побудил набор вакансий. Надо отметить, что я неспешно перебираю хорошие вакансии на рынке. Частному трейдеру очень сложно развиваться в одиночку — психологически, эмоционально, физически. Создавать и развиваться постоянно хочется, поэтому принял решение вливаться в коллектив. За несколько месяцев, мне удалось провести несколько собеседований. На втором этапе я проваливался именно из за не знаний протокола. Предметную область я примерно представлял. Ну что там сложного? Соединился с биржей по сокетам и начинай обмен сообщениями. Надо отметить, что в этой области есть уже готовые разработки в виде quickfix или готового API от StockSharp (правда платные). Но я принял решение разбираться с нуля, чтобы вникнуть в детали.

Технические аспекты протокола

Организационные вопросы

К бою. Немного теоретической практики

Если говорить образно. То, чтобы отправить сообщение на сервер, нам просто нужно сформировать нужную строку со всеми данными и отправить ее на биржу. Ну например:

8=FIX.4.4 ; 9=78 ; 35=A ; 49=FG ; 56=tgFhcfx901U05 ; 34=1 ; 52=20160212-11:42:51.812 ; 98=0 ; 108=30 00 ; 141=Y ; 10=047 ;

Если быть внимательным, то мы увидим, что кол-во символов в строке у нас 100, а в заголовке сообщения мы передаем, что 78 (9 = 78). По правилам протокола FIX, длину сообщения нужно считать без учета концовки и первых двух полей заголовка. А именно:

С длиной сообщения разобрались. Теперь про разделитель. Пока в моем скрине это «;». В документациях западных написано что это символ SOH. Чтобы однозначно ответить на этот вопрос, я запустил прилагаемого клиента биржи и сниффером стал перехватывать сообщения между клиентом и биржей. Кстати, программа ведет логи, и их общение выглядит так (зеленое — передача запроса на биржу, красное — ответ от биржи):

Зачеркнул свой идентификатор, прошу понять правильно. Ну а перехват сообщения выглядит так:
Зеленым я отметил именно разделители. Как вы уже видите, это просто в шестнадцатеричном виде код 01. То есть, в нашу строку в виде разделителей, нужно вставлять код 01. Также я отметил для себя последовательность полей в сообщении. Почему то в другом порядке у меня вызывало ошибки (возможно тут я не прав)
Ну и контрольная сумма. Контрольная сумма считается над всем сообщением, за исключением концовки. То есть в расчет берется только заголовок и само сообщение. Для этого, мы переводим каждый символ в его Ascii код и вычисляем их сумму. Полученную сумму делим по модулю 256. Это и будет контрольной суммой сообщения. При этом, значение должно быть трехзначным. Если мы получаем 2 знака, то подставляем 0 слева (например, если контрольная сумма = 68, то должны передать значении 068).

К бою. Начало программирования

Как видим, первый метод строит нужную строку из полей. Обратите внимание, там присутствует наш разделитель в виде спец символа \u0001. Второй метод вычисляет размер заголовка (чтобы потом высчитывать размер сообщения). Надо обратить внимание, что при передачи времени, миллисекунды должны указываться в трехзначном формате (даже если миллисекунды = 52, то передаем 052). Следующие классы строятся по аналогии.
Класс создания сообщения на подключение (инициализация сессии)

Класс создания концовки сообщения

Попробую привести код консольной программы для теста в виде цитаты. Картинки вставляются плохого качества. Подробно комментирую.

//Получаем ip сервера
IPAddress ipAddr = IPAddress.Parse(server);
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
//Создаем заголовк
HeaderMessage msHeader = new HeaderMessage
<
BeginString = «FIX.4.4»,
MsgType = «A», //Тип сообщения на установку сессии
SenderCompID = «»,
TargetCompID = «FG»,
MsgSeqNum = 1
>;
//Создаем сообщение на подключение onLogon
LogonMessage msLogon = new LogonMessage
<
EncryptMethod = 0,
HeartBtInt = 3000,
ResetSeqNumFlag = true
>;

//Вычисляем длину сообщения
msHeader.BodyLength = msHeader.GetHeaderSize() + msLogon.GetMessageSize();
//Создаем концовку сообщения
TrailerMessage msTrailer = new TrailerMessage(msHeader.ToString() + msLogon.ToString());

//Формируем полное готовое сообщение
string fullMessage = msHeader.ToString() + msLogon.ToString() + msTrailer.ToString();
Console.WriteLine(«Сообщение для отправки <0>»,fullMessage);

//Создаем сокет для подключения
sSender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
//Подключаемся
sSender.Connect(ipEndPoint);
Console.WriteLine(«Сокет соединился с <0>», sSender.RemoteEndPoint.ToString());

byte[] msg = Encoding.UTF8.GetBytes(fullMessage);
//Отправляем сообщение
int bytesSent = sSender.Send(msg);
Console.WriteLine(«Отправил <0>байт», bytesSent.ToString());

//Получаем ответ от сервера
byte[] bytes = new byte[1024];
int bytesRec = 0;
bytesRec = sSender.Receive(bytes);
Console.WriteLine(«Ответ от сервера: <0>», Encoding.UTF8.GetString(bytes, 0, bytesRec));

Все таки приложу и в виде картинок. Так наглядней. Кликабельно.


В результате мы запросили у сервера подключение с нашим логином. И получили от него ответ.

По мере развития, буду продолжать с теоретической частью. Если модераторы перенесут в раздел «Алго», я не против.

Источник

Торговля с помощью протокола FIX. Часть первая: настройка тестового окружения

В этом цикле статей создадим окружение для работы с тестовой биржей и обмена сообщениями с ней, разберёмся с основными биржевыми терминами и закрепим знания на практике.

UPD: Основная цель этого цикла статей — комплексно рассмотреть устройство биржи и базовые понятия (сделки, фьючерсы и т.д) в рамках работы с протоколом FIX. Здесь не будет привязки к какой-то конкретной бирже, будем использовать готовый пример сервера (симулятор биржи) и в дальнейшем реализуем клиента, которого можно будет доработать для взаимодействия с интересной вам реальной биржей.

Читайте также:  при какой температуре кислород превращается в жидкость

Для настройки всего необходимого понадобятся лишь базовые знания в программировании и умение пользоваться Git-ом.

Для тестирования сообщений нам понадобится:

Если вы уже знакомы с протоколом обмена сообщениями FIX, можете сразу переходить к настройке сервера и клиента. Далее будет использоваться формат сообщений с помощью тегов и значений и стандартная спецификация протокола FIX 4.2.

Протокол FIX является стандартом обмена финансовыми сообщениями, его поддерживает большинство крупных бирж. У него есть несколько версий, которые появлялись по мере внедрения улучшений и поддержки новых классов торговых инструментов. Наиболее популярной версией является FIX 4.2. С помощью FIX-протокола можно размещать заявки на покупку/продажу финансовых инструментов, получать котировки валют или ценных бумаг и многое другое.

Существует два формата FIX-сообщений: стандартный (вида tag=value) и XML.

FIX-сообщения представляют собой последовательность полей, указанных в спецификации, и их значений, разделенных с помощью ASCII-символа SOH (0x01). Например, вот так выглядит сообщение, соответствующее заявке типа Market на покупку 10000 акций компании Microsoft (вместо символа SOH используется пробел для наглядности):

8=FIX.4.2 9=103 35=D 34=3 49=BANZAI 52=20121105-23:24:42 56=EXEC 11=1352157882577 21=1 38=10000 40=1 54=1 55=MSFT 59=0 10=062.

Обязательные части любого FIX-сообщения: заголовок (Message Header), тело (Message Body) и завершающий элемент (Message Trailer).

Заголовок сообщения

Первое поле заголовка – это всегда тег BeginString, в котором указывается версия FIX-протокола (8=FIX.4.2). Затем длина и тип сообщения в тегах BodyLength и MsgType. Например, сообщение для размещения торговой заявки имеет тип D (35=D), а сообщение на получение рыночных данных об инструменте — тип V (35=V).

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

Если в последовательно отправленных сообщениях MsgSeqNum будет отличаться не на 1, то сервер вернет ошибку и не обработает сообщение.

Тело и завершающий элемент сообщения

В теле сообщения задаются поля, связанные с конкретным типом сообщения: вид инструмента, комиссия для торговой заявки, идентификатор брокера и т.д. Порядок полей не важен, а обязательность полей зависит от спецификации биржи.

При работе с конкретной биржей важно изучить ее спецификацию FIX-протокола. В ней могут быть указаны дополнительные виды сообщений, изменена обязательность или добавлены новые теги.

Последний тег сообщения – контрольная сумма ( CheckSum), которая рассчитывается при отправке сообщения на стороне клиента. Затем на сервере она рассчитывается еще раз и сверяется с полученной. Если контрольные суммы не совпадают, сервер возвращает сообщение об ошибке и не обрабатывает сообщение.

Подключение к серверу

Клиент и сервер для работы с FIX называются initiator и executor/acceptor соответственно. Чтобы запустить тестовый сервер, нужно склонировать репозиторий QuiсkFIX/J и открыть модуль quickfixj-examples: в пакете quickfix.examples.executor находятся необходимые для запуска файлы.

Структура проекта и файл запуска:

Настройки сервера находятся в файле resources/quickfix/examples/executor/executor.cfg, интересующие нас параметры:

Заменим в этом файле идентификатор клиента на MINIFIX_CLIENT (можно указать любое другое значение).

Запустим приложение MiniFIX и попробуем подключиться к серверу. Для этого откроем вкладку Session и настроим параметры подключения:

Соответственно заполняем ID отправителя – MINIFIX_CLIENT и получателя – EXEC. Также выбираем версию протокола (FIX 4.2) и все доступные опции.

После заполнения настроек нажимаем кнопку Connect и вводим хост и порт сервера. В файле настроек сервера для версии 4.2 был указан порт 9878, следовательно, подключаться будем к localhost:9878:

Если сервер запущен не на вашей локальной машине, то вместо localhost нужно указать IP-адрес сервера.

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

Если убрать опцию “скрыть тестовые запросы”, то в приложении будут отображаться тестовые запросы, которыми обмениваются сервер и клиент:

Обмен сообщениями

В приложении MiniFIX во вкладке Transactions перечислены типы сообщений, которые можно отправить на сервер (если хотите добавить свой тип сообщения, нажмите на кнопку New):

(вверху — типы сообщений, внизу — теги выбранного сообщения).

Наш тестовый сервер принимает только сообщения на размещение торговых заявок – New Order Single (35=D).

Полей, указанных в MiniFIX по умолчанию, уже достаточно, чтобы отправить заявку, но мы можем добавлять и изменять поля сообщения с помощью кнопок New, Edit, Delete. Например, тег 38=1000 отвечает за объем сделки. Изменим его на 200:

В правом верхнем углу нажимаем на кнопку Send, отправляем наше сообщение на сервер и получаем сообщения о том, что наша заявка принята и исполнена:

Теперь вы можете тестировать отправку различных типов сообщений, используя MiniFIX. Конечно, для работы напрямую с реальной биржей лучше написать собственную реализацию клиента (например, на Java или Go) или воспользоваться торговым терминалом. Но для того, чтобы разобраться в спецификации сообщений и понять, как их правильно составлять, такого рабочего окружения вполне достаточно. В следующей части расскажу, какими финансовыми инструментами торгуют на бирже и как правильно указать параметры для этих инструментов при размещении торговой заявки. Для тех, кому интересны технические подробности и написание собственного клиента, – продолжение.

Источник

Сказочный портал