Table of Contents

Rule for Orders

Overview

SimpleOrderRulesStrategy is a strategy that demonstrates the use of rules for processing events related to orders in StockSharp. It subscribes to trades and creates rules for processing order registration events.

Main Components

// Main components
public class SimpleOrderRulesStrategy : Strategy
{
}

OnStarted Method

Called when the strategy starts:

  • Creates a subscription to ticks
  • Creates two sets of rules for processing order registration events
// OnStarted method
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);
}

Logic

First Set of Rules

  • When a tick is received, creates an order to buy 1 unit
  • The order is created using the CreateOrder method, specifying direction, price (default = market), and volume
  • Sets rules for processing successful registration and registration errors
  • The rules are mutually exclusive and trigger only once

Second Set of Rules

  • When the next tick is received, creates an order to buy 10,000,000 units
  • Similarly sets rules for processing successful registration and registration errors
  • The rules are also mutually exclusive and trigger only once

Features

  • Demonstrates creating rules for processing order registration events
  • Uses the mechanism of mutually exclusive rules (Exclusive)
  • Shows an example of logging information about order events using the LogInfo method
  • Illustrates the use of Once() to limit rule triggering
  • Creates orders with different volumes to demonstrate various scenarios (successful registration and registration error)