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)