Esempio n. 1
0
        } //dgv_ShowFills_CellMouseClick()

        public static void dgv_ShowFillsSystemMenuItem_Click(object sender, MouseEventArgs e)
        {
            //
            // Purpose: A generic menu click event for the Order Right-Click
            //

            // Local Variables
            ToolStripMenuItem ts_From      = (ToolStripMenuItem)sender;
            OrderMenuStruct   myOrderStr   = (OrderMenuStruct)ts_From.Tag;
            String            myQuestion   = "";
            String            myMessage    = "";
            String            OrderRefID   = myOrderStr.OrderRefID;
            Decimal           Quantity     = myOrderStr.Quantity;
            Decimal           FillAmount   = myOrderStr.FillAmount;
            Decimal           RoutedAmount = myOrderStr.RoutedAmount;
            ShowFillStatus    myForm       = myOrderStr.myParentForm;


            if (OrderRefID.Length > 0)
            {
                switch (myOrderStr.Instruction)
                {
                case "Delete":
                    if (myOrderStr.FillAmount != 0)
                    {
                        myQuestion = "WARNING: This order has already been filled " + myOrderStr.FillAmount.ToString("#,###") + " @" + myOrderStr.FillPrice.ToString("#,###.####") + ", so you should 'Resize to Fill' rather than Delete\r\n\r\n";
                    }
                    else if (myOrderStr.RoutedAmount != 0)
                    {
                        myQuestion = "WARNING: Part of this order has already been routed " + myOrderStr.RoutedAmount.ToString("#,###") + " and should be cancelled first.\r\n\r\n";
                    }
                    myQuestion = myQuestion +
                                 "You are about to Delete the Order for\r\n\r\n" +
                                 myOrderStr.Side + " " + myOrderStr.Quantity + "  " + myOrderStr.BBG_Ticker + "\r\n";
                    if (myOrderStr.EMSX_Sequence.Length > 0)
                    {
                        myQuestion = myQuestion + "\r\nBloomberg Order# " + myOrderStr.EMSX_Sequence;
                    }
                    myQuestion = myQuestion + "\r\n\r\n" + "Is this Ok?";

                    if (MessageBox.Show(myQuestion, "Delete Order", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        if (myOrderStr.EMSX_Sequence.Length > 0)
                        {
                            myMessage = SendToBloomberg.EMSXAPI_Delete(OrderRefID);
                        }

                        if (myMessage.Length > 0)
                        {
                            if (MessageBox.Show("We received the UNEXPECTED message below from Bloomberg while trying to delete the order.\r\n\r\n" +
                                                "Do you wish to continue with the Delete?\r\n\r\n" +
                                                "=============================================\r\n\r\n\r\n" +
                                                myMessage, "Delete Order", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No)
                            {
                                return;
                            }
                        }

                        // Delete the Order
                        SystemLibrary.SQLExecute("Exec sp_ReverseOrder '" + OrderRefID + "'");
                        myForm.bt_Refresh_Click(null, null);

                        // Update The Positions Table
                        myForm.NeedUpdate     = true;
                        myForm.NeedFullUpdate = true;
                        // Refresh the Portfolio Tab
                        //myForm.ParentForm1.LoadPortfolioIncr();

                        // Report what Bloomberg says
                        if (myMessage.Length > 0)
                        {
                            SystemLibrary.SQLExecute("Exec sp_Fills_From_EMSX_API");
                            MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction);
                        }
                    }
                    break;

                case "ResizeToFill":
                    myQuestion = "You are about to Resize the Order for\r\n\r\n" +
                                 myOrderStr.Side + " " + myOrderStr.FormattedQuantity + "  " + myOrderStr.BBG_Ticker + "\r\n\n" +
                                 "To the FillAmount of " + myOrderStr.FormattedFillAmount + "\r\n\r\n" +
                                 "Is this Ok?";

                    if (Math.Abs(RoutedAmount) > Math.Abs(FillAmount))
                    {
                        myQuestion = "WARNING: The Routed part of this order (" + myOrderStr.RoutedAmount.ToString("#,###") + ") is greater than the Filled Amount (" + myOrderStr.FillAmount.ToString("#,###") + ") and should be cancelled first.\r\n\r\n" +
                                     myQuestion;
                    }

                    if (FillAmount == 0)
                    {
                        MessageBox.Show("The Order has not been Filled (Fill Amount = 0).\r\n\r\nPlease use the [Delete Order] menu if that is your intention", "Resize order to Fill Amount");
                    }
                    else if (MessageBox.Show(myQuestion, "Resize Order", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, Convert.ToInt32(myOrderStr.FillAmount));

                        // Resize the Order
                        SystemLibrary.SQLExecute("Exec sp_ResizeOrder '" + OrderRefID + "', " + myOrderStr.FillAmount.ToString());
                        myForm.bt_Refresh_Click(null, null);

                        // Update The Positions Table
                        myForm.NeedUpdate = true;
                        // Refresh the Portfolio Tab
                        //myForm.ParentForm1.LoadPortfolioIncr();

                        // Report what Bloomberg says
                        if (myMessage.Length > 0)
                        {
                            MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction);
                        }
                    }
                    break;

                case "ResizeToRouted":
                    if (RoutedAmount == 0)
                    {
                        MessageBox.Show("The Order has not been Routed (Routed Amount = 0).\r\n\r\nPlease use the [Delete Order] menu if that is your intention", "Resize order to Routed Amount");
                    }
                    else if (MessageBox.Show("You are about to Resize the Order for\r\n\r\n" +
                                             myOrderStr.Side + " " + myOrderStr.FormattedQuantity + "  " + myOrderStr.BBG_Ticker + "\r\n\n" +
                                             "To the RoutedAmount of " + myOrderStr.FormattedRoutedAmount + "\r\n\r\n" +
                                             "Is this Ok?", "Resize Order", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, Convert.ToInt32(myOrderStr.RoutedAmount));

                        // Resize the Order
                        SystemLibrary.SQLExecute("Exec sp_ResizeOrder '" + OrderRefID + "', " + myOrderStr.RoutedAmount.ToString());
                        myForm.bt_Refresh_Click(null, null);

                        // Update The Positions Table
                        myForm.NeedUpdate = true;
                        // Refresh the Portfolio Tab
                        //myForm.ParentForm1.LoadPortfolioIncr();

                        // Report what Bloomberg says
                        if (myMessage.Length > 0)
                        {
                            MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction);
                        }
                    }
                    break;

                case "ResizeToDouble":
                    Decimal DoubleQuantity = myOrderStr.Quantity * 2;
                    if (MessageBox.Show("You are about to Double the Order for\r\n\r\n" +
                                        myOrderStr.Side + " " + myOrderStr.FormattedQuantity + "  " + myOrderStr.BBG_Ticker + "\r\n\n" +
                                        "Is this Ok?", "Resize Order", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, Convert.ToInt32(DoubleQuantity));

                        // Resize the Order
                        SystemLibrary.SQLExecute("Exec sp_ResizeOrder '" + OrderRefID + "', " + DoubleQuantity.ToString());
                        myForm.bt_Refresh_Click(null, null);

                        // Update The Positions Table
                        myForm.NeedUpdate = true;
                        // Refresh the Portfolio Tab
                        //myForm.ParentForm1.LoadPortfolioIncr();

                        // Report what Bloomberg says
                        if (myMessage.Length > 0)
                        {
                            MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction);
                        }
                    }
                    break;

                case "ResizeOrder":
                    String myValue = myOrderStr.FormattedQuantity;
                    long   myQty;
                    String mySql;

                    if (SystemLibrary.InputBox("Resize Order for " + myOrderStr.BBG_Ticker + " from " + myOrderStr.FormattedQuantity, "Change the Size of the Order OR Cancel", ref myValue, myForm.validate_ResizOrder, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                        myQty = SystemLibrary.ToInt32(myValue);
                        if (Math.Sign(myQty) != Math.Sign(myOrderStr.Quantity))
                        {
                            MessageBox.Show(@"Cannot swap between Buy & Sell.", "Resize aborted");
                            return;
                        }
                        if (Math.Abs(myQty) < Math.Abs(myOrderStr.FillAmount))
                        {
                            MessageBox.Show(@"Cannot resize below the Fill Amount of " + myOrderStr.FillAmount.ToString("#,###") + ".", "Resize aborted");
                            return;
                        }
                        if (Math.Abs(myQty) < Math.Abs(myOrderStr.RoutedAmount))
                        {
                            MessageBox.Show(@"Cannot resize below the Routed Amount of " + myOrderStr.RoutedAmount.ToString("#,###") + ".", "Resize aborted");
                            return;
                        }

                        myMessage = SendToBloomberg.EMSXAPI_Modify(OrderRefID, myOrderStr.BBG_Ticker, (Int32)myQty);

                        mySql = "Exec sp_ResizeOrder '" + OrderRefID + "', " + myQty.ToString();
                        SystemLibrary.SQLExecute(mySql);

                        myForm.bt_Refresh_Click(null, null);

                        // Update The Positions Table
                        myForm.NeedUpdate = true;
                        // Refresh the Portfolio Tab
                        //myForm.ParentForm1.LoadPortfolioIncr();

                        // Report what Bloomberg says
                        if (myMessage.Length > 0)
                        {
                            MessageBox.Show("Changed in the Portfolio Management System, but received this messagae from Bloomberg.\r\n\r\n" + myMessage, myOrderStr.Instruction);
                        }
                    }
                    break;
                }
            }
        } //dgv_ShowFillsSystemMenuItem_Click()
Esempio n. 2
0
        private void dgv_ShowFills_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            // Show the popup menu
            try
            {
                if (e.Button == MouseButtons.Right && e.RowIndex > -1 && e.ColumnIndex > -1)
                {
                    Point myLocation = new Point(this.Location.X + CXLocation, this.Location.Y + CYLocation);
                    // Select the Order as needed in code later on.
                    String EMSX_Sequence = SystemLibrary.ToString(dgv_ShowFills.Rows[e.RowIndex].Cells["Order#"].Value);
                    String mySql         = "select OrderRefID, BBG_Ticker, Amount as Quantity, Sum(RoutedAmount) as RoutedAmount, Sum(FillAmount) as FillAmount, Side " +
                                           "From Fills " +
                                           "Where OrderRefID = (Select OrderRefID From Orders where Emsx_Sequence = " + EMSX_Sequence + ") " +
                                           "Group By OrderRefID, BBG_Ticker, Amount, Side " +
                                           "Union " +
                                           "Select OrderRefID, BBG_Ticker, Quantity, 0 as RoutedAmount, 0 as FillAmount, Side " +
                                           "From Orders " +
                                           "Where Emsx_Sequence = " + EMSX_Sequence + " " +
                                           "And Not Exists (Select 'x' from Fills Where Fills.OrderRefID = Orders.OrderRefID) ";
                    DataTable dt_Order = SystemLibrary.SQLSelectToDataTable(mySql);
                    if (dt_Order.Rows.Count > 0)
                    {
                        String  OrderRefID            = SystemLibrary.ToString(dt_Order.Rows[0]["OrderRefID"]);
                        String  BBG_Ticker            = SystemLibrary.ToString(dt_Order.Rows[0]["BBG_Ticker"]);
                        String  Side                  = SystemLibrary.ToString(dt_Order.Rows[0]["Side"]);
                        Decimal Quantity              = SystemLibrary.ToDecimal(dt_Order.Rows[0]["Quantity"]);
                        Decimal RoutedAmount          = SystemLibrary.ToDecimal(dt_Order.Rows[0]["RoutedAmount"]);
                        Decimal FillAmount            = SystemLibrary.ToDecimal(dt_Order.Rows[0]["FillAmount"]);
                        String  FormattedQuantity     = Quantity.ToString("#,##0");
                        String  FormattedFillAmount   = FillAmount.ToString("#,##0");
                        String  FormattedRoutedAmount = RoutedAmount.ToString("#,##0");
                        Qty_Order = Quantity;

                        ContextMenuStrip  myMenu    = new ContextMenuStrip();
                        ToolStripMenuItem mySubMenu = new ToolStripMenuItem();

                        OrderMenuStruct myOrderStr = new OrderMenuStruct();
                        myOrderStr.OrderRefID            = OrderRefID;
                        myOrderStr.EMSX_Sequence         = EMSX_Sequence;
                        myOrderStr.BBG_Ticker            = BBG_Ticker;
                        myOrderStr.FormattedQuantity     = FormattedQuantity;
                        myOrderStr.FormattedFillAmount   = FormattedFillAmount;
                        myOrderStr.FormattedRoutedAmount = FormattedRoutedAmount;
                        myOrderStr.Quantity   = Quantity;
                        myOrderStr.FillAmount = FillAmount;
                        //myOrderStr.FillPrice = FillPrice;
                        myOrderStr.RoutedAmount = RoutedAmount;
                        myOrderStr.Side         = Side;
                        myOrderStr.myParentForm = this;

                        // Resize to Fill Menu
                        if (Quantity != FillAmount)
                        {
                            mySubMenu = new ToolStripMenuItem("Resize Order (" + FormattedQuantity + ") to the Fill Amount (" + FormattedFillAmount + ")");
                            myOrderStr.Instruction = "ResizeToFill";
                            mySubMenu.Tag          = myOrderStr;
                            mySubMenu.MouseUp     += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click);
                            myMenu.Items.Add(mySubMenu);
                        }

                        // Resize to Fill Menu
                        if (Quantity != RoutedAmount)
                        {
                            mySubMenu = new ToolStripMenuItem("Resize Order (" + FormattedQuantity + ") to the Routed Amount (" + FormattedRoutedAmount + ")");
                            myOrderStr.Instruction = "ResizeToRouted";
                            mySubMenu.Tag          = myOrderStr;
                            mySubMenu.MouseUp     += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click);
                            myMenu.Items.Add(mySubMenu);
                        }
                        // Double Order Menu
                        mySubMenu = new ToolStripMenuItem("Double Order Size");
                        myOrderStr.Instruction = "ResizeToDouble";
                        mySubMenu.Tag          = myOrderStr;
                        mySubMenu.MouseUp     += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click);
                        myMenu.Items.Add(mySubMenu);

                        // Resize Order Menu
                        myMenu.Items.Add("-");
                        mySubMenu = new ToolStripMenuItem("Resize Order");
                        myOrderStr.Instruction = "ResizeOrder";
                        mySubMenu.Tag          = myOrderStr;
                        mySubMenu.MouseUp     += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click);
                        myMenu.Items.Add(mySubMenu);

                        // Delete Order Menu
                        myMenu.Items.Add("-");
                        mySubMenu = new ToolStripMenuItem("Delete Order");
                        myOrderStr.Instruction = "Delete";
                        mySubMenu.Tag          = myOrderStr;
                        mySubMenu.MouseUp     += new MouseEventHandler(dgv_ShowFillsSystemMenuItem_Click);
                        myMenu.Items.Add(mySubMenu);

                        // Show the Menu
                        myMenu.Show(myLocation);
                    }
                }
            }
            catch { }
        } //dgv_ShowFills_CellMouseClick()