Table of Contents

Алгоритм котирования

Обзор

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

Основные компоненты

StockSharp предоставляет два ключевых компонента для котирования:

  1. QuotingProcessor — основной процессор, который анализирует рыночные данные и состояние заявок, чтобы рекомендовать действия по котированию.

  2. IQuotingBehavior — интерфейс, определяющий поведение котирования, включая расчет оптимальной цены и определение необходимости обновления заявок.

Примеры стратегий с котированием

В документации представлены примеры стратегий, которые демонстрируют использование механизма котирования:

  • MqStrategy — пример стратегии, которая использует механизм котирования для управления позицией на рынке.
  • MqSpreadStrategy — пример стратегии, создающей спред на рынке путем одновременного выставления котировок на покупку и продажу.
  • StairsCountertrendStrategy — пример контртрендовой стратегии с использованием котирования для более точного входа в рынок.

Эти примеры помогают понять, как интегрировать механизм котирования в собственные торговые алгоритмы.

Поведения котирования

StockSharp поддерживает различные поведения котирования:

  • MarketQuotingBehavior — котирование на основе рыночной цены с настраиваемым смещением и типом.
  • BestByPriceQuotingBehavior — котирование на основе лучшей цены с настраиваемым смещением.
  • LimitQuotingBehavior — котирование по фиксированной цене.
  • BestByVolumeQuotingBehavior — котирование на основе лучшей цены по объему.
  • LevelQuotingBehavior — котирование на основе указанного уровня в стакане.
  • LastTradeQuotingBehavior — котирование на основе цены последней сделки.
  • TheorPriceQuotingBehavior — котирование опционов на основе теоретической цены.
  • VolatilityQuotingBehavior — котирование опционов на основе волатильности.

Использование в собственной стратегии

Шаг 1: Создание поведения котирования

// Создаем поведение для рыночного котирования
var behavior = new MarketQuotingBehavior(
    new Unit(0.01m), // Смещение цены от лучшей котировки
    new Unit(0.1m, UnitTypes.Percent), // Минимальное отклонение для обновления котировки
    MarketPriceTypes.Following // Тип рыночной цены для котирования
);

Шаг 2: Создание и инициализация процессора

// Создаем процессор котирования
_quotingProcessor = new QuotingProcessor(
    behavior,
    Security, // Инструмент
    Portfolio, // Портфель
    Sides.Buy, // Направление котирования
    Volume, // Объем котирования
    Volume, // Максимальный объем заявки
    TimeSpan.Zero, // Без таймаута
    this, // Стратегия реализует ISubscriptionProvider
    this, // Стратегия реализует IMarketRuleContainer
    this, // Стратегия реализует ITransactionProvider
    this, // Стратегия реализует ITimeProvider
    this, // Стратегия реализует IMarketDataProvider
    IsFormedAndOnlineAndAllowTrading, // Проверка разрешения торговли
    true, // Использовать цены стакана
    true  // Использовать цену последней сделки, если стакан пуст
)
{
    Parent = this
};

Шаг 3: Подписка на события процессора

// Подписываемся на события процессора для логирования и обработки
_quotingProcessor.OrderRegistered += order =>
    this.AddInfoLog($"Order {order.TransactionId} registered at price {order.Price}");

_quotingProcessor.OrderFailed += fail =>
    this.AddInfoLog($"Order failed: {fail.Error.Message}");

_quotingProcessor.OwnTrade += trade =>
    this.AddInfoLog($"Trade executed: {trade.Trade.Volume} at {trade.Trade.Price}");

_quotingProcessor.Finished += isOk => {
    this.AddInfoLog($"Quoting finished with success: {isOk}");
    _quotingProcessor?.Dispose();
    _quotingProcessor = null;
};

Шаг 4: Запуск процессора

// Запускаем процессор
_quotingProcessor.Start();

Шаг 5: Освобождение ресурсов

Не забудьте очистить ресурсы процессора при остановке стратегии:

protected override void OnStopped()
{
    // Освобождаем ресурсы текущего процессора
    _quotingProcessor?.Dispose();
    _quotingProcessor = null;
    
    base.OnStopped();
}

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

  1. Снижение проскальзывания — котирование помогает получить лучшую цену исполнения по сравнению с рыночными заявками.

  2. Гибкость настройки — различные поведения котирования для разных рыночных ситуаций.

  3. Автоматическое обновление — процессор автоматически отслеживает изменения рынка и обновляет заявки при необходимости.

  4. Полный контроль — возможность настройки параметров котирования, включая смещение цены, минимальное отклонение и тип рыночной цены.

  5. Управление рисками — возможность установки таймаута для ограничения времени исполнения.

Прикладные сценарии использования

  • Маркет-мейкинг — создание ликвидности на рынке путем выставления двусторонних котировок.
  • Алгоритмическая торговля — улучшение цены исполнения в автоматизированных стратегиях.
  • Контртрендовая торговля — более точный вход в рынок против тренда.
  • Арбитраж — одновременное котирование на нескольких рынках для использования ценовых расхождений.

Внедрение механизма котирования в вашу стратегию может значительно улучшить исполнение заявок и повысить её эффективность.