Example #1
0
        public void placeOrder(OrderDirections directions)
        {
            cancelOrder();
            cache           = new OrderCache(app);
            this.directions = directions;
            OrderBuilder bld = new OrderBuilder(cache);

            state = State.ConnectionPending;
            using (OrderWatcher watch = new OrderWatcher(cache, bld.OrderTag)) {
                cache.Start();
                while (state != State.ConnectionDead && state != State.OrderFinished)
                {
                    if (!WaitAny(10000, watch.WaitHandles))
                    {
                        WriteLine("TIMED OUT WaitAny(10000) WAITING FOR RESPONSE");
                        break;
                    }
                    OrderWatcher.Action action;
                    while (watch.GetNext(out action, out ord))
                    {
                        switch (action)
                        {
                        case OrderWatcher.Action.Live:
                            if (state == State.ConnectionPending)
                            {
                                WriteLine("SUBMITTING ORDER");
                                state = State.OrderPending;
                                bld.SetAccount(Configuration.getValue("Configuration/Account/Bank"),
                                               Configuration.getValue("Configuration/Account/Branch"),
                                               Configuration.getValue("Configuration/Account/Customer"),
                                               Configuration.getValue("Configuration/Account/Deposit"));
                                bld.SetBuySell(OrderBuilder.BuySell.BUY);
                                bld.SetExpiration(OrderBuilder.Expiration.DAY);
                                bld.SetRoute(directions.Route);
                                bld.SetSymbol(directions.Symbol, getExchange(directions), OrderBuilder.SecurityType.STOCKOPT);
                                bld.SetVolume(directions.Size);
                                bld.SetPriceLimit(directions.LimitPrice);
                                if (directions.Simulated)
                                {
                                    WriteLine("Am sending simulated order");
                                }
                                else
                                {
                                    WriteLine("Am sending real order");
                                    cache.SubmitOrder(bld);
                                }
                            }
                            break;

                        case OrderWatcher.Action.Dead:
                            WriteLine("CONNECTION FAILED");
                            state = State.ConnectionDead;
                            break;

                        case OrderWatcher.Action.Order:
                            DisplayOrder(ord);
                            if (state == State.OrderPending && ord.Type == "UserSubmitOrder")
                            {
                                if (ord.CurrentStatus == "COMPLETED")
                                {
                                    WriteLine("Order Completed");
                                    state = State.OrderFinished;
                                }
                                else
                                {
                                    WriteLine("Order UNEXPECTEDLY FINISHED");
                                    state = State.OrderFinished;
                                }
                            }
                            else if (state == State.CancelPending)
                            {
                                if (ord.CurrentStatus == "COMPLETED" || ord.CurrentStatus == "DELETED")
                                {
                                    state = State.OrderFinished;
                                }
                            }

                            if (ord.Type == "ExchangeTradeOrder")
                            {
                                WriteLine("GOT FILL FOR {0} {1} AT {2}", ord.Buyorsell, ord.Volume, ord.Price);
                            }
                            if (ord.Type == "ExchangeKillOrder")
                            {
                                WriteLine("GOT KILL");
                            }

                            break;
                        } // end switch
                    }     // end while getNext
                }         // end while state
            }             // end using watch
            WriteLine("DONE PLACING ORDER");
        }
Example #2
0
        public void placeOrder(OrderDirections directions)
        {
            cancelOrder();
              cache = new OrderCache(app);
              this.directions = directions;
              OrderBuilder bld = new OrderBuilder(cache);
              state = State.ConnectionPending;
              using (OrderWatcher watch = new OrderWatcher(cache, bld.OrderTag)) {
            cache.Start();
            while (state != State.ConnectionDead && state != State.OrderFinished) {
              if (!WaitAny(10000, watch.WaitHandles) ) {
            WriteLine("TIMED OUT WaitAny(10000) WAITING FOR RESPONSE");
            break;
              }
              OrderWatcher.Action action;
              while (watch.GetNext(out action, out ord)) {
            switch (action) {
            case OrderWatcher.Action.Live:
              if (state == State.ConnectionPending) {
            WriteLine("SUBMITTING ORDER");
            state = State.OrderPending;
            bld.SetAccount(Configuration.getValue("Configuration/Account/Bank"),
                   Configuration.getValue("Configuration/Account/Branch"),
                   Configuration.getValue("Configuration/Account/Customer"),
                   Configuration.getValue("Configuration/Account/Deposit"));
            bld.SetBuySell(OrderBuilder.BuySell.BUY);
            bld.SetExpiration(OrderBuilder.Expiration.DAY);
            bld.SetRoute(directions.Route);
            bld.SetSymbol(directions.Symbol, getExchange(directions), OrderBuilder.SecurityType.STOCKOPT);
            bld.SetVolume(directions.Size);
            bld.SetPriceLimit(directions.LimitPrice);
            if (directions.Simulated) {
              WriteLine("Am sending simulated order");
            }
            else {
              WriteLine("Am sending real order");
              cache.SubmitOrder(bld);
            }
              }
              break;
            case OrderWatcher.Action.Dead:
              WriteLine("CONNECTION FAILED");
              state = State.ConnectionDead;
              break;
            case OrderWatcher.Action.Order:
              DisplayOrder(ord);
              if( state==State.OrderPending && ord.Type=="UserSubmitOrder" ) {
            if( ord.CurrentStatus=="COMPLETED") {
            WriteLine("Order Completed");
            state = State.OrderFinished;
            }
            else {
              WriteLine("Order UNEXPECTEDLY FINISHED" );
              state = State.OrderFinished;
            }
              }
              else if (state == State.CancelPending) {
            if( ord.CurrentStatus=="COMPLETED" || ord.CurrentStatus=="DELETED" )
              state = State.OrderFinished;
              }

              if (ord.Type == "ExchangeTradeOrder")
            WriteLine("GOT FILL FOR {0} {1} AT {2}", ord.Buyorsell, ord.Volume, ord.Price);
              if (ord.Type == "ExchangeKillOrder")
            WriteLine("GOT KILL");

              break;
            } // end switch
              } // end while getNext
            } // end while state
              } // end using watch
              WriteLine("DONE PLACING ORDER");
        }