Для изменения размера нажмите или перетащите
Стакан: алгоритмы

Стаканы в S# представлены типом данных MarketDepth. С помощью этого типа можно совершать ряд операций над данными в стакане. Например, можно делать разреженными или, наоборот, группировать по ценовым уровням.

Модификации стакана

  1. Создание разреженного стакана из обычного осуществляется через метод TraderHelperSparse:

    C#
    MarketDepth depth = ....;
    
    var sparseDepth = depth.Sparse();

    Все котировки Quote в полученном стакане будут иметь нулевой объем, и они будут созданы с шагом SecurityStepPrice.

    Чтобы объединить разреженный стакан с первоначальным (соединить реальные котировки и разреженные), необходимо вызвать метод TraderHelperJoin(MarketDepth, MarketDepth):

    C#
    var joinedDepth = sparseDepth.Join(depth);
  2. Группировка стакана по ценовым уровням осуществляется через метод TraderHelperGroup(MarketDepth, Unit):

    C#
    MarketDepth depth = ....;
    
    // сгруппировать стакан по ценовому уровню в 10 пунктов
    var grouppedDepth = depth.Group(10.Points(depth.Security));

    Результатом группировки будет стакан MarketDepth, состоящий из котировок типа AggregatedQuote. Через свойство AggregatedQuoteInnerQuotes можно получить реальные котировки стакана, на основе которых произошла группировка по ценовому уровню.

Проверка данных

Иногда требуется проверять данные в стакане для обнаружения в них коллизий. Например, проверка загруженных стаканов из внешних источников, или отслеживание корректности работы биржи в период аномальной работы (кризис, стоп торги). Для этого можно использовать специальный метод MarketDepthVerify, который проверяет, не перемешаны ли между собой биды и оффера.