Advertisement
GlobalLiquidity

Untitled

Mar 5th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.55 KB | None | 0 0
  1. //Trading Rig States (Parent State Machine)
  2. public class DisengagedState : State
  3. {
  4.     protected override void OnEntry(StateHandlerInfo<State> info)
  5.     {
  6.         Console.WriteLine("Entering Disengaged State");
  7.         //TODO : Cancel All Orders
  8.         base.OnEntry(info);
  9.     }
  10. }
  11.  
  12. public class EngagedState : State
  13. {
  14.     protected override void OnEntry(StateHandlerInfo<State> info)
  15.     {
  16.         Console.WriteLine("Entering Engaged State");
  17.         base.OnEntry(info);
  18.     }
  19.  
  20.     protected override void OnExit(StateHandlerInfo<State> info)
  21.     {
  22.         Console.WriteLine("Exiting Engaged State");
  23.         base.OnExit(info);
  24.     }
  25. }
  26.  
  27. //MarketMaker States (Child State Machine)
  28. public class EvaluatingState : State
  29. {
  30.     protected override void OnEntry(StateHandlerInfo<State> info)
  31.     {
  32.         Console.WriteLine("Entering Evaluating State");
  33.         //TODO : Set desired trade price and quantity
  34.         //Simulate a strategy update
  35.        
  36.         base.OnEntry(info);
  37.     }
  38.  
  39.     protected override void OnExit(StateHandlerInfo<State> info)
  40.     {
  41.         Console.WriteLine("Exiting Evaluating State");
  42.         base.OnExit(info);
  43.     }
  44. }
  45.  
  46. public class CancellingOrderState : State
  47. {
  48.     protected override void OnEntry(StateHandlerInfo<State> info)
  49.     {
  50.         Console.WriteLine("Entering Cancelling Order State");
  51.         //TODO : Cancel existing order
  52.         base.OnEntry(info);
  53.     }
  54.  
  55.     protected override void OnExit(StateHandlerInfo<State> info)
  56.     {
  57.         Console.WriteLine("Exiting Cancelling Order State");
  58.         base.OnExit(info);
  59.     }
  60. }
  61.  
  62. public class PlacingOrderState : State
  63. {
  64.     protected override void OnEntry(StateHandlerInfo<State> info)
  65.     {
  66.         Console.WriteLine("Entering Placing Order State");
  67.         //TODO : Place Order
  68.         Console.WriteLine("Simulating Placing Order...");
  69.         base.OnEntry(info);
  70.     }
  71.  
  72.     protected override void OnExit(StateHandlerInfo<State> info)
  73.     {
  74.         Console.WriteLine("Exiting Placing Order State");
  75.         base.OnExit(info);
  76.     }
  77. }
  78.  
  79. public class OrderActiveState : State
  80. {
  81.     protected override void OnEntry(StateHandlerInfo<State> info)
  82.     {
  83.         Console.WriteLine("Entering Order Active State");
  84.         //TODO : Place Order
  85.         base.OnEntry(info);
  86.     }
  87.  
  88.     protected override void OnExit(StateHandlerInfo<State> info)
  89.     {
  90.         Console.WriteLine("Exiting Order Active State");
  91.         base.OnExit(info);
  92.     }
  93. }
  94.  
  95. public class TradingRig
  96. {
  97.     StateMachine TradingRigStateMachine;
  98.     ChildStateMachine<State> MarketMakerStateMachine;
  99.  
  100.     public Event EngageEvent = new Event("Engage");
  101.     public Event DisengageEvent = new Event("Disengage");
  102.     public Event StrategyUpdated = new Event("Strategy Updated");
  103.     public Event StrategyUnchanged = new Event("Strategy Unchanged");
  104.     public Event OrderBookUpdated = new Event("Order Book Updated");
  105.     public Event CancellationConfirmationReceived = new Event("Cancellation Confirmation Received");
  106.     public Event OrderConfirmationReceived = new Event("Order Confirmation Received");
  107.    
  108.     public bool HasActiveOrder = false;
  109.    
  110.     void BuildMarketMakerStateMachine(State parentState)
  111.     {
  112.         //MarketMakerStateMachine = new StateMachine("Market Maker");
  113.         MarketMakerStateMachine = parentState.CreateChildStateMachine("Market Maker");
  114.         var evaluatingState = MarketMakerStateMachine.CreateInitialState<EvaluatingState>("Evaluating");
  115.         var cancellingOrderState = MarketMakerStateMachine.CreateState<CancellingOrderState>("Cancelling Order");
  116.         var placingOrderState = MarketMakerStateMachine.CreateState<PlacingOrderState>("Placing Order");
  117.         var orderActiveState = MarketMakerStateMachine.CreateState<OrderActiveState>("Order Active");
  118.        
  119.         evaluatingState.TransitionOn(StrategyUpdated).To(cancellingOrderState).WithGuard(g => HasActiveOrder);
  120.         evaluatingState.TransitionOn(StrategyUpdated).To(placingOrderState);
  121.         evaluatingState.TransitionOn(StrategyUnchanged).To(orderActiveState).WithGuard(g => HasActiveOrder);
  122.        
  123.         cancellingOrderState.TransitionOn(CancellationConfirmationReceived).To(placingOrderState);
  124.         placingOrderState.TransitionOn(OrderConfirmationReceived).To(orderActiveState);
  125.         orderActiveState.TransitionOn(OrderBookUpdated).To(evaluatingState);
  126.     }
  127.  
  128.     public void BuildTradingRigStateMachine()
  129.     {
  130.        
  131.        
  132.         TradingRigStateMachine = new StateMachine("Trading Rig");
  133.         var disengagedState = TradingRigStateMachine.CreateInitialState<DisengagedState>("Disengaged");
  134.         var engagedState = TradingRigStateMachine.CreateState<EngagedState>("Engaged");
  135.         BuildMarketMakerStateMachine(engagedState);
  136.         disengagedState.TransitionOn(EngageEvent).To(engagedState);
  137.         engagedState.TransitionOn(DisengageEvent).To(disengagedState);     
  138.     }
  139.    
  140.     public void Engage()
  141.     {
  142.         EngageEvent.Fire();    
  143.     }
  144.    
  145.     public void Disengage()
  146.     {
  147.         DisengageEvent.Fire();
  148.     }
  149.    
  150. }
  151.  
  152. void Main()
  153. {
  154.     TradingRig Rig = new TradingRig();
  155.     Rig.BuildTradingRigStateMachine();
  156.     Rig.EngageEvent.Fire(); //Simulate the user using the UI to engage the rig
  157.     //Trading Rig State Machine will transition to Engaged State
  158.     //Market Maker State Machine will transition to Evaluating State
  159.     Rig.StrategyUpdated.Fire();  //Simulate Strategy Update Event
  160.     //Market Maker State Machine will transition to Placing Order State
  161.     Thread.Sleep(250); //Simulate delay between placing order and getting a confirmation
  162.     Rig.OrderConfirmationReceived.Fire(); // Simulate receiving order confirmation
  163.     //Market Maker State Machine will transition to Order Active State
  164.     Rig.HasActiveOrder = true; //This is not ideal - Currently using this as a transition guard
  165.     Thread.Sleep(250); //Simulate delate as market remains unchanged
  166.     Rig.OrderBookUpdated.Fire(); //Simulate an order book update
  167.     //Market Maker State Machine will transition to Evaluating State
  168.     Rig.StrategyUpdated.Fire(); //Simulate Strategy Update Event. (i.e new order book data causes new desired order)
  169.     //Since we have an active order (HasOrder = True),
  170.     //this time the Market Maker State Machine will transition to Cancelling Order State
  171.     Thread.Sleep(250); // Simulate delay receiving cancellation confirmation
  172.     Rig.CancellationConfirmationReceived.Fire(); //Simulate receiving cancellation confirmation
  173.     //Market Maker State Machine will transition to Placing Order State and will place a new order
  174.     Thread.Sleep(250); //Simulate delay between placing order and getting a confirmation
  175.     Rig.OrderConfirmationReceived.Fire(); // Simulate receiving order confirmation
  176.     //Market Maket State Machine will transition to Order Active State
  177.     Rig.OrderBookUpdated.Fire(); //Simulate an order book update
  178.     //Market Maker State Machine will transition to Evaluating State
  179.     //This time our evaluation shows no need to change the order so
  180.     //the Market Maker State Machine will transition back to Order Active State
  181.     Rig.StrategyUnchanged.Fire();
  182.     Rig.DisengageEvent.Fire();
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement