Продолжаем связывать данные из терминалов на бирже с тем, как это видят роботы.
Сегодня поговорим про сделки по нашему счёту. Они появляются в момент исполнения наших ордеров. В своих вёб-терминалах мы видим их примерно так:
В одной из предыдущих статей мы говорили об обезличенных сделках, которые доступны всем участникам торгов. В этой поговорим про собственные сделки, которые отличаются от обезличенных расширенным набором информации и доступны только их владельцу.
Как мы знаем, все сделки генерируются в момент исполнения ордеров, следовательно, каждая собственная сделка в дополнение к полям, присутствующим в обезличенных трейдах, будет содержать номер своего ордера-родителя.
Итого, процесс генерации моей сделки выглядит так:
Продолжаем связывать данные из терминалов на бирже с тем, как это видят роботы.
Сегодня поговорим про стакан или книгу заявок, как ещё это иногда называют. Почти в любом вёб-терминале он имеет такой вид:
Неотъемлемым атрибутом любой торговой площадки является такая сущность, как книга заявок.
Абсолютно все сделки после валидации попадают в ядро биржи, в котором специальный алгоритм сводит покупателей с продавцами.
У книги заявок есть два сортированных списка. Первый называют бидами (Bids), хранит все лимитные заявки на покупку, лучшим в списке считается ордер с наивысшей ценой. Второй называют асками (Asks). Список хранит все заявки на продажу, в котором лучшей заявкой считается ордер с наименьшей ценой.
При наличии нескольких заявок с одинаковой ценой лучшей из них считается та, которая была получена раньше остальных. На основании книги заявок строится агрегированный стакан котировок, который мы привыкли видеть во всех терминалах и интерфейсах бирж. К примеру, в популярной бирже он выглядит так:
Продолжаем связывать данные из терминалов на бирже с тем, как это видят роботы.
Сегодня поговорим про Ордера (Заявки). Мы их создаём в момент, когда хотим открыть позицию:
В одной из прошлых статей мы говорили о сделках, но сама по себе сделка не может существовать без такого понятия, как заявка.
Ордер (биржевая заявка, приказ) – это поручение, направляемое на биржу, которое выражает намерение трейдера совершить торговую операцию купли или продажи финансового инструмента. Существует несколько разновидностей ордеров, отличающихся типом заказа, особенностью исполнения и дополнительными ограничениями. По типу исполнения выделяют рыночные, лимитные и условные заявки.
Рыночный ордер исполняется сразу после поступления на биржу при наличии контрагентов в виде лимитных заявок. Такой ордер не требует установки цены. Итоговая цена исполнения будет рассчитана на основании средней цены сделок, которые появятся в результате удовлетворения заявки.
Продолжаем связывать данные из терминалов на бирже с тем, как это видят роботы.
Сегодня поговорим про свечи. В Вашем вёб-терминале Вы видите их примерно так:
Свеча представляет собой вертикально расположенный прямоугольник, по центру от которого вверх и вниз выступают линии, именуемые тенями. По сути каждая свеча является агрегатором информации о поведении цены за определенный интервал времени.
В основном Вы видите на графике Японские свечи. Про них и поговорим ниже. Однако свечей есть великое множество и по ним у нас есть отдельная серия статей. За более глубокими знаниями сюда: https://smart-lab.ru/company/os_engine/blog/1028089.php
Шаг первый. Выбор источника цен.
Для цен, из которых можно формировать свечи, берут несколько различных типов данных. Это могут быть:
Сегодня поговорим про ленту сделок.
В Вашем вёб-терминале Вы видите ленту сделок где-то здесь. Обычно это таблица:
Обезличенная сделка или трейд – все эти термины описывают факт взаимодействия между покупателем и продавцом (через сведение ордеров), результатом которого является атомарная операция передачи ценных бумаг из одних рук в другие. Записи об этом мы и видим в таблице обезличенных сделок.
Как обезличенная сделка появляется:
Всё, что Вы видите у себя в вёб-терминале биржи или в QUIK, является базовым типом данных для роботов. И роботы должны их уметь анализировать. А до этого в них должен разобраться программист, который хочет этого робота создать. Этот минисборник про примитивы Вам с этим поможет.
В OsEngine существуют классы, моделирующие эти сущности, которые необходимы для работы программы. К основным типам относятся: Trade, Candle, MarketDepth, MyTrade, Order, Portfolio, PositionOnBoard, Position. Для эффективной работы вам необходимо полное понимание устройства этих объектов, поэтому далее мы подробно рассмотрим предназначение каждого из них.
Часть из вышеописанных примитивов хранятся в каталоге OsEngine\project\OsEngine\Entity. Для наглядности можно посмотреть на снимок обозревателя решений, на котором описываемые типы подчеркнуты красными линиями:
Первое, что Вы увидите, открыв OsEngine, обозреватель решения с папками справа. Главное в этот момент не испугаться.
В этих папках хранится весь проект, но для создания роботов Вам нужно примерно знать всего несколько. Ну а сами папки, по сути, можно называть «Пространства имён», которые Вы должны научиться использовать. Про это сегодня и поговорим.
Пространства имен — это способ группировки кода, который позволяет организовать логическую и удобную структуру проекта. Как правило, типы, связанные общей идеей и схожей функциональностью, содержатся в общем пространстве.
Во время разработки торговых роботов в OsEngine нужно примерно представлять откуда и что берётся. Где хранятся те или иные сущности в проекте. Рассмотрим базовые пространства, которые Вам точно пригодятся.
Начнём с того, что посмотрим, что такое пространство имён в исходном коде на примере почти любого робота, доступного в платформе. В файле с кодом пространство задается при помощи ключевого слова namespace:
Сегодня скачаем OsEngine как программист, а не пользователь. До этого у Вас уже должна быть установлена Visual Studio, что мы обсуждали в прошлой статье на тему. И Вы должны быть полны решимости научиться писать торговых роботов самому!
Ну а в этой статье скачаем свежий билд OsEngine с ГитХаб, откроем проект, как программисты это делают. А также обновим некоторые библиотеки, которые нужно подтянуть через Nuget, чтобы всё заработало.
ВАЖНО! Не забывайте про наш ГАЙД по алготрейдингу, там вы найдёте все нужные Вам инструкции и туториалы по проекту в одном месте: smart-lab.ru/company/os_engine/blog/1024149.php
Чтобы скачать OsEngine, нужно перейти по ссылке на ГитХаб. Это международное хранилище для ПО с открытым кодом.
Нажмите на зеленую кнопку Code:
Для программирования (не для запуска, а именно для разработки) торговых роботов в OsEngine вам понадобится среда разработки. Иначе они называются IDE. Это нужно для того, чтобы не писать исходный код в текстовых файлах, а делать это с комфортом и быстро.
Существует несколько программ, подходящих для этих целей. К таковым относятся Visual Studio, Rider, Visual Studio Code и другие, менее известные варианты.
Каждый выбирает то, что ему больше нравится, но, если вы затрудняетесь в выборе, мы настоятельно рекомендуем остановиться на Visual Studio Community. И в этом посте мы поговорим о том, как её установить. Программа полностью бесплатная, как и наш OsEngine.
Выбор Visual Studio будет идеальным вариантом, который закроет все ваши потребности.
Visual Studio имеет в своем арсенале как стандартные инструменты (редактор, отладчик), так и массу приятных дополнительных функций (компиляторы, оптимизаторы кода, графические конструкторы и др.), которые делают процесс разработки более продуктивным, интересным и качественным.
Переходим к вопросам программирования на OsEngine. И эта история более ресурсоёмкая, чем просто торговля. В этом процессе Вам понадобиться установить несколько очень прожорливых программ, таких как Visual Studio. Поэтому, в отличие от торговли, здесь Вам понадобиться железо посерьёзнее.
В основном, чтобы не ослепнуть. Ибо на маленьких мониторах Вы рискуете потерять зрение, занимаясь программированием.
Но, кроме этого, «стандартный» ноутбук использует обрезанный процессор, и Вы лишите себя возможности не только программировать, но и вести оптимизацию.
Если вдруг Вы будете подбирать ПК именно для разработки торговых роботов, то про видеокарту забудьте. Она нам не нужна совсем.
Вот сборка, на которой в нашем офисе ведутся разработки и оптимизации: