Добрый день! Мы не случайно решили рассказать о двух продуктах нашей компании, входящих в состав базового софта от S#. Наш выбор был сделан на основе мнений наших пользователей, которым интересно узнать немного подробнее о назначении программ, работе и применении их в торговле. Надо отметить, что S#.Shell и S#.API – комплексное решение для создания торговых роботов на языке C#. Однако, использования этих программ не ограничивается созданием торговых роботов. Итак, для начала разберем, что такое S#.API. Термин API, согласно Википедии, означает: Программный Интерфейс Приложения (API с английского application programming interface) - описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой. Обычно входит в описание какого-либо интернет-протокола, программного каркаса (фреймворка) или стандарта вызовов функций операционной системы. Часто реализуется отдельной программной библиотекой или сервисом операционной системы. Используется программистами при написании всевозможных приложений. S#.API – абсолютно бесплатная библиотека, которая позволяет начинающим и опытным трейдерам, обладающим даже начальными знаниями программирования использовать ее для создания своих собственных торговых систем в области алготрейдинга. Библиотека основана на языке C#, с возможностью использования ее в среде программирования Visual Studio. Библиотека рассчитана на то, что пользователь может создать свои уникальные торговые системы: от позиционных стратегий с длительным таймфреймом до высокочастотных стратегий (HFT), которые используют прямой доступ (DMA) к биржевым торгам. Уникальность данного продукта в том, что на его основе построена работа всех базовых продуктов компании StockSharp, таких как: S#.Designer, S#.Data, а так же адаптер S#.MatLab. trade-terminal-system.png Так например использования элементов библиотеки находит широкое применение применение для создания уникальных кубиков в программе Designer, фактически пользователь берет готовый компонент представленный программным кодом, комбинирует его с другими компонентами или модифицирует его и применяет его в конструкторе торговых роботов Designer, помещая в собственные кубики. source-code-designer.jpg Механизм S#.API основан на использовании сообщений. Данный механизм состоит из трех элементов: - сообщение Message, - адаптер сообщений MessageAdapter - транспортный канал IMessageChannel. Сообщение выполняет роль агента, передающего информацию. Сообщения могут быть исходящими и входящими. - Исходящие сообщения - сообщения, которые посылаются во внешнюю систему. Обычно это команды, которые генерирует программа, например, сообщение ConnectMessage - команда, запрашивающая соединение с сервером. - Входящие сообщения - сообщения поступающие из внешней системы. Это сообщения передающие информацию о рыночных данных, транзакциях, портфелях, событиях соединения и т.п. Shell-Title-frimework-api.png Такой механизм позволяет унифицировать работу по разработке адаптеров, в то же время позволяет пользователю создать свои собственные подключения к различным торговым системам. Давайте рассмотрим основные преимущества применения библиотек S#.API: - Независимость созданного пользователем торгового робота от API используемого брокера или биржи, фактически созданный торговый робот может работать с любым подключением. Так пользователь может легко подключать своего торгового робота например к Quik, Transaq, или FOREX, не меняя программного кода. - Сегодня библиотека S#.API поддерживает более 70 подключений ( Коннекторы (Россия), Коннекторы (Америка), Коннекторы Forex, Коннекторы Криптовалют). - Универсальность библиотеки позволяет использовать ее как частным трейдерам, небольшим командам разработчиков, а так же крупным инвестиционным компаниям и банкам. - Важным показателем является большая производительность, позволяющая одновременно исполнять сотни стратегий по любым инструментам. - Высокая скорость обработки заявок в S#.API позволяет снизить время обработки до нескольких микросекунд. - Библиотека может использовать прямое к торговле, такое как: Plaza II, Micex Bridge, а также поддерживает FIX протокол, что позволяет сокращать время обработки заявок. - Определение реального проскальзывания добивается за счет реалистичного тестирования, которое проводится с применением тиков и стаканов. Это позволяет пользователю снизить до минимума риск возможных потерь и более гибко и точно настроить свою торговую стратегию. - Широкая распространённость языка C#, применимого в создании библиотеки и среды Visual Studio, упрощает работу пользователя, за счет избыточной информации о их возможностях. Для удобства работы S#.API разделена на блоки, что позволяет пользователю без особых усилий найти тот раздел, который его интересует. Простота установки на компьютер, распространённость языка программирования и среды использования делают библиотеку S#.API универсальным способом для разработки торговых роботов. Пользователю достаточно однажды создать торгового робота, которого он может подключать к любой выбранной торговой площадке или брокеру. Так же знание работы с библиотекой позволяет развивать навыки программирования пользователя. Мы рассмотрели основной элемент – библиотеку S#.API, на базе которой строятся все базовые программные продукты StockSharp. Отлично, теперь понятно, что с применением библиотеки S#.API пользователь может создавать своих торговых роботов и применять их в торговле. Однако использования среды разработки Visual Studio, не совсем удобно для работы созданными торговыми системами, не говоря уже о тестировании торговых систем. Для удобства и простоты работы, компания StockSharp разработала готовый графический каркас с возможностью оперативного изменения под нужды пользователя-трейдера, при этом с открытым кодом, созданный на языке C# - S#.Shell. Давайте рассмотрим основные преимущества данного графического каркаса: - Главным преимуществом продукта является открытый исходный код. Что это дает пользователю? gui-shell-source-code.jpg Открытый исходный код программы позволяет пользователю использовать все возможности продукта, дополняя его своими собственными надстройками. Пользователь может настроить свои собственные панели управления, использую уже готовые элементы или создать свои собственные. Простота настройки увеличивает скорость подготовки программы к запуску. Доступность модуляций S#.Shell, позволяет создать пользователю удобную среду пользования, понятную ему. Shell-Title-frimework.png Таким образом, применение открытого исходного кода не просто позволяет пользователю создавать удобный индивидуальный интерфейс, но идеален для создания торговых роботов на заказ, а это расширяет сферу применения знаний пользователя, открывая ресурс для дополнительного заработка. - Следующим неоспоримым преимуществом S#.Shell является поддержка более 70 различных подключений к мировым биржам (Коннекторы (Россия), Коннекторы (Америка), Коннекторы Forex, Коннекторы Криптовалют, Общие). gui-shell-connector-exchange.jpg - S#.Shell позволяет пользователю полностью протестировать свои торговые системы, прежде чем заходить на реальные торги. Удобная статистика, кривые Эквити, и подробнейший отчет о ходе тестирования, позволяют пользователю на стадии разработки и тестирования учесть возможные риски и внести изменяя в код торгового робота. gui-shell-equti-exchange.png - Так же пользователь имеет возможность сохранять резервные копии своих торговых роботов, восстанавливать настройки и сравнивать изменения с первоначальным кодом торгового робота. - Очень важной и удобной функцией S#.Shell является одновременный запуск стратегий. Что это дает? Пользователь теперь не ограничен одной площадкой для работы и так же может применять комплекс из нескольких стратегий, которые могут действовать раздельно друг от друга, или могут быть применены как комплекс из стратегий. Такие комплексы позволяют компенсировать или подстраховывать друг друга, проводить политику хеджирования и арбитража. При этом пользователь получает подробнейшую информацию о ходе торговли, получая информацию об ордерах, сделках, позициях, прибыли, логах и другую информацию, вывод которой он может настроить в программе. Так же пользователь может настроить запуск стратегии по расписанию, установив четкий график работы каждой из запускаемых торговых стратегий. S#.Shell – это удобное и многофункциональное программное решение, настраиваемое под пользователя. Подводя итог можно сказать следующее, что использования комплекса из библиотеки S#.API и оболочки S#.Shell, позволяет пользователю получить полностью настраиваемый под его нужды торговый комплекс. Пользователь получает не просто оболочку для торговли, он получает решение для тестирования, торговли, комплексного взаимодействия своих созданных стратегий с различными рынками одновременно или в отдельности. Удобство использования очевидно, оно не только сокращает время на подготовку и торговлю, но и позволяет пользователю заниматься разработкой решений на продажу, что увеличивает доход. Удобный курс обучения от StockSharp позволяет быстро освоить обе программы, научиться программировать и зарабатывать. Уже включенный в стоимость исходный код S#.Shell и дополнительные торговые системы, сокращают затраты пользователя и дают возможность начать торговать безотлагательно.
Сегодня невозможно представить биржевую торговлю без использования FIX протокола. Однако появился он относительно недавно - в 1992. Увеличение скорости и объема данных, побудили создать принципиально новое соединение с высокой пропускной способностью и надежностью подключение. На сегодня выпущена уже пятая версия протокола FIX5, которая должна придти на смену предыдущему FIX4. Однако наиболее популярным для использования все так же остается FIX4, который зарекомендовал себя, как оптимальное решение для передачи данных. Сам протокол существует в двух синтаксисах, это XML (второе название FIXML) и «ключ - значение» («Tag=Value»). Стоит сказать, что протокол разделяется на 3 уровня - транспортный, сессионный, прикладной. fix_protocol.jpg Для лучшего восприятия механизма работы протокола, рассмотрим каждый из уровней отдельно. Начнем рассмотрение с транспортного уровня протокола FIX. Данный уровень дает описание структуры сообщения передаваемого посредством FIX протокола. Дает описание как построена структура сообщений. Рассматривая ее можно сказать следующее, что это обычная строка, содержащая шифр, записанный при помощи синтаксиса FIX протокола. По сути - это шифр, содержащий сообщение для отправки на торговую площадку. FIX_connector_data.png На примере указано сообщение транспортного уровня FIX протокола, которое направлено на биржу Lmax. Данное сообщение передает информацию, что трейдер хочет войти в систему торгов, для совершения операций. На первый взгляд, данное сообщение это набор цифр и символов, однако давайте разберем, какую информацию содержит данное сообщение. На нашем примере мы видим синтаксис типа «Tag=Value». Все сообщение состоят из нескольких составляющих - полей, данные поля поделены вертикальными линиями. Каждое поле разделено на две части знаком «=». Получается, что слева от знака равно – ключ или «Tag», а справа – значение или «Value». Ключи – это всегда положительные и целые числа, которые обозначают наименование поля. Каждой биржей предоставляется своего рода документация, в соответствии с которой шифруются и дешифруются сообщения по FIX протоколу. В ней указываются имена «Tag», описывающих тип данных, и описание самих получаемых данных. Практически все поля стандартизированы, имея одинаковый смысл на всех торговых площадках. Однако стоит сказать, что при этом, не каждая биржа поддерживает их. Сообщения отправленные посредством FIX протокола, содержат обязательные и необязательные поля, а также условно-обязательные поля, присутствие которых обусловлено наличием других полей. На схеме ниже можем наглядно увидеть разделение сообщения на поля. Давайте рассмотрим пример такой записи. FIX_protocol_messenge.png Разделение полей происходит посредством SOH символа, который расшифровывается как - Start of Heading, и принадлежит способу кодирования ASCII. При этом данный символ не отображается в виде аббревиатуры, а условно указывается вертикальной чертой и с точки зрения формата UNICODE имеет значение “\\u0001”. Та же стоит отметить, что сообщение строится из трех частей. Условно они показаны на рисунке различными цветами: - Зеленый - заголовок - Розовый - тело - Сиреневый - контрольная сумма Давайте подробнее разберем, что собой представляет каждая из частей. В заголовке сообщения может содержаться различное количество полей, рассмотрим главные, которые обязательно должны быть в FIX сообщении: - 8 = FIX.4.4 – это поле указывает на версию протокола, оно всегда первое. - 9 = 123 – данное поле указывает на размер FIX сообщения, оно располагается вторым размер сообщения, всегда второе по счету - 35 = V – данное поле означает наименование операции, которую необходимо совершить, в данном случае V – запрос рыночных данных, данное поле всегда расположено третьим. - 34 = 2 – обозначает какое по счету сообщение, исчисляется за текущую сессию. - 49 = FIXtest1 – данное поле означает идентификатор пользователя-отправителя, который присваиваться биржей. - 54 = 20120924-14:05:44.952 – это текущее время направления сообщения. - 56 = LMXBDM – данное поле значение идентификатора, который присваивается получателю биржей. Рассматривая тело FIX сообщения, можно сказать что это перечень полей, которые соответствуют каждому из типов запросов. Так же используется практика применения набора полей или групп, которые содержат одинаковые теги. Давай те предположим, что нам нужно запросить информацию по списку инструментов. При этом каждый из них будет иметь одинаковый тег, и отличаться только содержанием. Мы перечисляем необходимые инструменты, используя при этом для каждого отдельное поле. Такой вид записи называется группой или набором полей. Все они будут иметь один тег или тип данных, и отличаться только содержимым. Рассмотрим контрольную сумму. Расчет производится в соответствии со специальным алгоритмом, при расчете принимаются заголовок и тело. В начале, высчитывается длина «заголовка плюс тело», затем делим длину на 256 и получаем остаток. Контрольная сумма состоит из трех символов. Если в остатке от деления мы получили 20, то вперед мы добавляем 0, и получаем 020. В итоге контрольная сумма в нашем случае будет иметь вид «10 = 020|». Теперь рассмотрим протокол уровня сессии. Данный протокол FIX сообщений регламентирует механизм установки/разрыва соединения, поддержания соединения, сообщения о пропущенных данных. Он состоит из ряда сообщений: 1. Logon (35=A) – по средством данного сообщения происходит аутентификация сервером пользователя. Оно направляется первым, и служит сигналом к началу сессии передачи данных. При успешном запуске, приходит ответное сообщение, при ошибке -сообщение о возникшей ошибки. 2. Logout (35=5) – данное сообщение говорит о разрыве связи с сервером. 3. Heartbeat (35=0) – данное сообщение оповещает о готовности контрагентов, направляется обеим сторонам, другое название сообщение «пульса». Периодичность отправки пульса задается пользователем в первом сообщении Logon. 4. Test Request (35=1) – это сообщение является тестовым и направляется в случае когда контрагент за установленный период не отправил пульс сообщение. Сеанс сессии будет закрыт, если данное сообщение останется без ответа. 5. Resend Request (35=2) – это сообщение-запрос, которое направлено на отправку повторного сообщения. Resend Request, например, может повторить дать сигнал, что бы биржа повторила пропущенную информацию. 6. Reject (35=3) – сообщение отправляется в ответ, если предыдущее является неправильно сформированным. 7. Sequence Reset (35=4) – данное сообщение может иметь две формы. - в поле GapFillFlag (тег 123) стоит значение “Y”, применяется для игнорирования административных сообщений, если едет повторение их отсылки. - во втором случае применяется для обнуления счетчика MsgSeqNum. Последним уровнем FIX сообщений – прикладной. Данный уровень имеет самое емкое описание, это связано с тем, что данный уровень содержит информацию, которая необходима работы с торговой площадкой. Давайте рассмотрим основные сообщения данного уровня: 1. Market Data Request (35=V) – сообщение отправляет сигнал о том, что пользователь подписывается на поток передаваемых данных о котировках в текущий период времени. Пользователь может отписаться от получения данных через аналогичный запрос, указывая ID предшествующего сообщения. В этом случае ему придет сообщение MarketDataSnapshotFullRefresh (35=W). 2. New Order Single (35=D) – сообщение о желании пользователя выставить ордер в систему. Пользователь имеет возможность установить собственный идентификатор, это упрощает процесс отслеживания за исполнением, частичным исполнением или отменой ордера. 3. Execution Report (35=8) – сообщение о отчете о выполнения, которое предоставляет информацию в каком статусе ордер исполнен или отменен, и по каким причинам. Данный отчет указывается как Exec Type (Tag 150). 4. OrderCancelRequest (35=F) – сообщение о запросе на отмену выставленного ордера. fix_protocol_trading.jpg Мы разобрали основные аспекты работы с сообщениями, передаваемыми по средством FIX протокола. Количество таких сообщений и вариантов запросов огромное множество, и с каждым годом возможности и инструменты работы с FIX протоколом растут. Спецификация таких сообщений регламентируется биржей, оставляя стандартизированную форму записи запросов. Напомню, что передача таких сообщений проходит непосредственно при прямом подключении к торговой площадке, посредством FIX коннекторов. Стоимость таких коннекторов и их наименование различны, подробнее о спецификации коннекторов можно ознакомится на нашем сайте.