示例#1
0
        private void OnUpdate(object sender, UpdateEventArgs e)
        {
            try
            {
                market.trade(e.update.Symbol, e.update.Bid, e.update.Ask);

                attemptScratchLeg();

                //--------------XXX  make this better---
                //--------------------------------------
                List <SpreadOrder> delorders = new List <SpreadOrder>();



                //check to see if openorders are still attractive
                foreach (SpreadOrder so in orders)
                {
                    double[] wkprices = so.workPrices();

                    if (so.buySell == "Buy")
                    {
                        if (wkprices[0] != market.bid(procSpread.productOne.Product) &&
                            wkprices[1] != market.ask(procSpread.productTwo.Product) &&
                            so.fillPrice() == 0
                            )
                        {
                            if (log.IsDebugEnabled)
                            {
                                log.Debug("buy off market");
                            }
                            string[] sok  = so.getSOKs();
                            Order[]  legs = so.getLegs();

                            int delone = procSpread.Delete(sok[0], procSpread.productOne.ttOrderSet);
                            int deltwo = procSpread.Delete(sok[1], procSpread.productTwo.ttOrderSet);

                            int filledOne = procSpread.productOne.Size - delone;
                            int filledTwo = procSpread.productTwo.Size - deltwo;


                            /*
                             * if we couldnt get the cancel off we need to close it out but ignore
                             * if both legs are complete fills
                             */
                            if (delone != 0 || deltwo != 0)
                            {
                                if (filledOne != 0)
                                {
                                    if (log.IsDebugEnabled)
                                    {
                                        log.Debug("cancel didnt go off completely. selling " + filledOne);
                                    }
                                    procSpread.SendOrder("Sell", market.bid(procSpread.productOne.Product), filledOne, procSpread.productOne);
                                }
                                else
                                {
                                    offOrders[sok[0]] = legs[0];
                                }
                                if (filledTwo != 0)
                                {
                                    if (log.IsDebugEnabled)
                                    {
                                        log.Debug("cancel didnt go off completely. buying " + filledTwo);
                                    }
                                    procSpread.SendOrder("Buy", market.ask(procSpread.productTwo.Product), filledTwo, procSpread.productTwo);
                                }
                                else
                                {
                                    offOrders[sok[1]] = legs[1];
                                }
                            }

                            delorders.Add(so);
                            break;
                        }
                        //XXX shift the spread if necassary.
                        //     else if (so.fillPrice() == 0)
                        //     {
                        //         checkSpreadLevel(so);
                        //     }
                    }
                    else if (so.buySell == "Sell")
                    {
                        if (wkprices[0] != market.ask(procSpread.productOne.Product) &&
                            wkprices[1] != market.bid(procSpread.productTwo.Product) &&
                            so.fillPrice() == 0
                            )
                        {
                            if (log.IsDebugEnabled)
                            {
                                log.Debug("sell off market");
                            }
                            string[] sok  = so.getSOKs();
                            Order[]  legs = so.getLegs();

                            int delone = procSpread.Delete(sok[0], procSpread.productOne.ttOrderSet);
                            int deltwo = procSpread.Delete(sok[1], procSpread.productTwo.ttOrderSet);

                            int filledOne = procSpread.productOne.Size - delone;
                            int filledTwo = procSpread.productTwo.Size - deltwo;


                            //if we couldnt get the cancel off we need to close it out
                            if (delone != 0 || deltwo != 0)
                            {
                                if (filledOne != 0)
                                {
                                    if (log.IsDebugEnabled)
                                    {
                                        log.Debug("cancel didnt go off completely. buying " + filledOne);
                                    }
                                    procSpread.SendOrder("Buy", market.ask(procSpread.productOne.Product), filledOne, procSpread.productOne);
                                }
                                else
                                {
                                    offOrders[sok[0]] = legs[0];
                                }
                                if (filledTwo != 0)
                                {
                                    if (log.IsDebugEnabled)
                                    {
                                        log.Debug("cancel didnt go off completely. selling " + filledTwo);
                                    }
                                    procSpread.SendOrder("Sell", market.bid(procSpread.productTwo.Product), filledTwo, procSpread.productTwo);
                                }
                                else
                                {
                                    offOrders[sok[1]] = legs[1];
                                }
                            }

                            delorders.Add(so);
                            break;
                        }

                        //XXX shift the spread if necassary.
                        //     else if (so.fillPrice() == 0)
                        //     {
                        //          checkSpreadLevel(so);
                        //      }
                    }
                }


                foreach (SpreadOrder dspo in delorders)
                {
                    orders.Remove(dspo);
                }
                //--------------------------------------
                //--------------------------------------


                signal.trader();
            }
            catch (Exception ex)
            {
                if (log.IsErrorEnabled)
                {
                    log.Error(ex.StackTrace);
                }
            }
        }
示例#2
0
        private void OnUpdate(object sender, UpdateEventArgs e)
        {
            try
            {
                market.trade(e.update.Symbol, e.update.Bid, e.update.Ask);

                attemptScratchLeg();

                //--------------XXX  make this better---
                //--------------------------------------
                List<SpreadOrder> delorders = new List<SpreadOrder>();

                //check to see if openorders are still attractive
                foreach( SpreadOrder so in orders ){

                    double[] wkprices = so.workPrices();

                    if( so.buySell == "Buy" ){
                        if (wkprices[0] != market.bid(procSpread.productOne.Product) &&
                            wkprices[1] != market.ask(procSpread.productTwo.Product) &&
                            so.fillPrice() == 0
                            )
                        {
                            if (log.IsDebugEnabled) log.Debug("buy off market");
                            string[] sok = so.getSOKs();
                            Order[] legs = so.getLegs();

                            int delone = procSpread.Delete(sok[0], procSpread.productOne.ttOrderSet);
                            int deltwo = procSpread.Delete(sok[1], procSpread.productTwo.ttOrderSet);

                            int filledOne = procSpread.productOne.Size - delone;
                            int filledTwo = procSpread.productTwo.Size - deltwo;

                            /*
                             * if we couldnt get the cancel off we need to close it out but ignore
                             * if both legs are complete fills
                             */
                            if (delone != 0 || deltwo != 0)
                            {
                                if (filledOne != 0)
                                {
                                    if (log.IsDebugEnabled) log.Debug("cancel didnt go off completely. selling " + filledOne);
                                    procSpread.SendOrder("Sell", market.bid(procSpread.productOne.Product), filledOne, procSpread.productOne);
                                }
                                else
                                {
                                    offOrders[sok[0]] = legs[0];
                                }
                                if (filledTwo != 0)
                                {
                                    if (log.IsDebugEnabled) log.Debug("cancel didnt go off completely. buying " + filledTwo);
                                    procSpread.SendOrder("Buy", market.ask(procSpread.productTwo.Product), filledTwo, procSpread.productTwo);
                                }
                                else
                                {
                                    offOrders[sok[1]] = legs[1];
                                }
                            }

                            delorders.Add(so);
                            break;
                        }
                        //XXX shift the spread if necassary.
                   //     else if (so.fillPrice() == 0)
                   //     {
                   //         checkSpreadLevel(so);
                   //     }

                    }
                    else if( so.buySell == "Sell" )
                    {
                        if( wkprices[0] != market.ask(procSpread.productOne.Product) &&
                            wkprices[1] != market.bid(procSpread.productTwo.Product) &&
                            so.fillPrice() == 0
                            )
                        {
                            if (log.IsDebugEnabled) log.Debug("sell off market");
                            string[] sok = so.getSOKs();
                            Order[] legs = so.getLegs();

                            int delone = procSpread.Delete(sok[0], procSpread.productOne.ttOrderSet);
                            int deltwo = procSpread.Delete(sok[1], procSpread.productTwo.ttOrderSet);

                            int filledOne = procSpread.productOne.Size - delone;
                            int filledTwo = procSpread.productTwo.Size - deltwo;

                            //if we couldnt get the cancel off we need to close it out
                            if (delone != 0 || deltwo != 0)
                            {

                                if (filledOne != 0)
                                {
                                    if (log.IsDebugEnabled) log.Debug("cancel didnt go off completely. buying " + filledOne);
                                    procSpread.SendOrder("Buy", market.ask(procSpread.productOne.Product), filledOne, procSpread.productOne);
                                }
                                else
                                {
                                    offOrders[sok[0]] = legs[0];
                                }
                                if (filledTwo != 0)
                                {
                                    if (log.IsDebugEnabled) log.Debug("cancel didnt go off completely. selling " + filledTwo);
                                    procSpread.SendOrder("Sell", market.bid(procSpread.productTwo.Product), filledTwo, procSpread.productTwo);
                                }
                                else
                                {
                                    offOrders[sok[1]] = legs[1];
                                }
                            }

                            delorders.Add(so);
                            break;
                        }

                        //XXX shift the spread if necassary.
                   //     else if (so.fillPrice() == 0)
                   //     {
                  //          checkSpreadLevel(so);
                  //      }

                    }

                }

                foreach(SpreadOrder dspo in delorders){
                    orders.Remove(dspo);
                }
                //--------------------------------------
                //--------------------------------------

                signal.trader();
            }
            catch (Exception ex)
            {
                if (log.IsErrorEnabled) log.Error(ex.StackTrace);
            }
        }
示例#3
0
        private void procSpread_OnUpdate(object sender, UpdateEventArgs e)
        {
            double[] b = procStrategy.findPrices("Buy");
            double[] s = procStrategy.findPrices("Sell");

            this.textBoxBid.Text = Convert.ToString(b[2]);
            this.textBoxAsk.Text = Convert.ToString(s[2]);
        }