Table of Contents

Компрессия тиковых данных и спредов в свечи

Введение

API предоставляет мощные инструменты для компрессии тиковых данных и спредов (лучших цен из стаканов) в свечи. Эта функциональность особенно полезна при анализе исторических данных или при построении собственных индикаторов.

Основные методы-расширения для работы с компрессией данных находятся в классе CandleHelper. Полный исходный код этого класса доступен на GitHub.

Рекомендуется ознакомиться с этим файлом для полного понимания всех доступных методов и их параметров.

Методы компрессии

Компрессия тиков в свечи

Для преобразования тиковых данных в свечи используется метод-расширение ToCandles:

// Пример использования ToCandles для тиков
var tickStorage = storageRegistry.GetTickMessageStorage(securityId, Drive, StorageFormat);
var trades = tickStorage.Load(from, to);
var candles = trades.ToCandles(mdMsg, candleBuilderProvider: candleBuilderProvider);

// Этот код загружает тиковые данные из хранилища и преобразует их в свечи.
// mdMsg - это сообщение с параметрами создаваемых свечей (тип, таймфрейм и т.д.).
// candleBuilderProvider - это провайдер, который предоставляет конкретную реализацию построителя свечей.

Компрессия стаканов в свечи

Для преобразования данных стакана (лучших цен) в свечи используется тот же метод ToCandles, но с дополнительным параметром:

// Пример использования ToCandles для стаканов
var depthStorage = storageRegistry.GetQuoteMessageStorage(securityId, Drive, StorageFormat);
var depths = depthStorage.Load(from, to);
var candles = depths.ToCandles(mdMsg, Level1Fields.SpreadMiddle, candleBuilderProvider: candleBuilderProvider);

// Здесь мы загружаем данные стакана и преобразуем их в свечи.
// Level1Fields.SpreadMiddle указывает, что мы используем среднюю цену спреда для построения свечей.
// Можно также использовать Level1Fields.BestBid или Level1Fields.BestAsk для использования лучших цен покупки или продажи соответственно.

Параметры компрессии

При компрессии можно указать следующие параметры:

  • series: Серия свечей, определяющая тип и параметры создаваемых свечей.
  • type: Тип данных для формирования свечей (например, лучшая цена покупки, продажи или середина спреда).
  • candleBuilderProvider: Провайдер построителя свечей (необязательный параметр).

Пример использования

private IEnumerable<CandleMessage> InternalGetCandles(SecurityId securityId, DateTime? from, DateTime? to)
{
    // ... (код инициализации)

    switch (type)
    {
        case BuildTypes.Ticks:
            return StorageRegistry
                    .GetTickMessageStorage(securityId, Drive, StorageFormat)
                    .Load(from, to)
                    .ToCandles(mdMsg, candleBuilderProvider: candleBuilderProvider);

        case BuildTypes.OrderLog:
            // ... (код для построения свечей из лога заявок)

        case BuildTypes.Depths:
            return StorageRegistry
                    .GetQuoteMessageStorage(securityId, Drive, StorageFormat)
                    .Load(from, to)
                    .ToCandles(mdMsg, Convert(extraType), candleBuilderProvider: candleBuilderProvider);

        // ... (другие случаи)
    }
}

// Этот метод демонстрирует различные способы построения свечей в зависимости от типа исходных данных.
// Он поддерживает построение из тиков, лога заявок, стаканов и других источников.

Дополнительные возможности

Построение свечей из различных источников

API позволяет строить свечи не только из тиков и стаканов, но и из других источников данных:

// Пример построения свечей из различных источников
switch (type)
{
    case BuildTypes.Ticks:
        // ... (код для тиков)

    case BuildTypes.OrderLog:
        // ... (код для лога заявок)

    case BuildTypes.Depths:
        // ... (код для стаканов)

    case BuildTypes.Level1:
        // ... (код для Level1)

    case BuildTypes.SmallerTimeFrame:
        return candleBuilderProvider
                .GetCandleMessageBuildableStorage(StorageRegistry, securityId, mdMsg.GetTimeFrame(), Drive, StorageFormat)
                .Load(from, to);

    // ... (другие случаи)
}

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

Заключение

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