Table of Contents

Правило на заявки

Обзор

SimpleOrderRulesStrategy - это стратегия, демонстрирующая использование правил для обработки событий, связанных с заявками в StockSharp. Она подписывается на сделки и создает правила для обработки регистрации заявок.

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

// Основные компоненты
public class SimpleOrderRulesStrategy : Strategy
{
}

Метод OnStarted

Вызывается при запуске стратегии:

  • Создает подписку на тики
  • Создает два набора правил для обработки событий регистрации заявок
// Метод OnStarted
protected override void OnStarted(DateTimeOffset time)
{
    var sub = new Subscription(DataType.Ticks, Security);

    sub.WhenTickTradeReceived(this).Do(() =>
    {
        var order = CreateOrder(Sides.Buy, default, 1);

        var ruleReg = order.WhenRegistered(this);
        var ruleRegFailed = order.WhenRegisterFailed(this);

        ruleReg
            .Do(() => LogInfo("Order №1 Registered"))
            .Once()
            .Apply(this)
            .Exclusive(ruleRegFailed);

        ruleRegFailed
            .Do(() => LogInfo("Order №1 RegisterFailed"))
            .Once()
            .Apply(this)
            .Exclusive(ruleReg);

        RegisterOrder(order);
    }).Once().Apply(this);

    sub.WhenTickTradeReceived(this).Do(() =>
    {
        var order = CreateOrder(Sides.Buy, default, 10000000);

        var ruleReg = order.WhenRegistered(this);
        var ruleRegFailed = order.WhenRegisterFailed(this);

        ruleReg
            .Do(() => LogInfo("Order №2 Registered"))
            .Once()
            .Apply(this)
            .Exclusive(ruleRegFailed);

        ruleRegFailed
            .Do(() => LogInfo("Order №2 RegisterFailed"))
            .Once()
            .Apply(this)
            .Exclusive(ruleReg);

        RegisterOrder(order);
    }).Once().Apply(this);

    // Sending request for subscribe to market data.
    Subscribe(sub);

    base.OnStarted(time);
}

Логика работы

Первый набор правил

  • При получении тика создает заявку на покупку 1 единицы
  • Заявка создается через метод CreateOrder с указанием направления, цены (default = рыночная) и объема
  • Устанавливает правила для обработки успешной регистрации и ошибки регистрации
  • Правила являются взаимоисключающими и срабатывают только один раз

Второй набор правил

  • При получении следующего тика создает заявку на покупку 10,000,000 единиц
  • Аналогично устанавливает правила для обработки успешной регистрации и ошибки регистрации
  • Правила также взаимоисключающие и срабатывают только один раз

Особенности

  • Демонстрирует создание правил для обработки событий регистрации заявок
  • Использует механизм взаимоисключающих правил (Exclusive)
  • Показывает пример логирования информации о событиях заявок через метод LogInfo
  • Иллюстрирует использование Once() для ограничения срабатывания правила
  • Создает заявки с разным объемом для демонстрации различных сценариев (успешная регистрация и ошибка регистрации)