Introducing State
We extend the basic model by introducing state. The model is a state transition system where incoming events can update internal state.
State initialization
internal state {
Side : Side
Price :? Price
live_order : bool = false;
}Assignment to and from state
receive (msg:NewOrderSingle){
state.live_order = true
state.Side = msg.Side
state.Price = msg.Price
send ExecutionReport {
OrderID = msg.ClOrdID;
ExecID = "";
ExecType = ExecType.New;
OrdStatus = OrdStatus.New;
Side = state.Side;
LeavesQty = 0.0;
CumQty = 0.0;
OrderQtyData.OrderQty = msg.OrderQtyData.OrderQty;
}
}Automatic assignment using assignable
internal state {
assignable{
Side : Side
Price :? Price
OrderQtyData.OrderQty : Qty
OrdType : OrdType
OrdStatus : OrdStatus = OrdStatus.PendingNew;
ExecType : ExecType = ExecType.PendingNew;
LeavesQty : Qty
CumQty : Qty
OrderID : string
}
live_order : bool = false;
AvgPx : float
bestBid : float
bestAsk : float
}receive (msg:NewOrderSingle){
state.live_order = true
state.LeavesQty = msg.OrderQtyData.OrderQty
state.OrderID = fresh()
state.OrdStatus = OrdStatus.New
assignFrom(msg,state)
send ExecutionReport {
state with
ExecID = fresh();
ExecType = ExecType.New;
}
}Related: State and Advanced Features.