コード例 #1
0
        void RejectAllPendingOrders()
        {
            foreach (DataGridViewRow row in _orderGrid.Rows)
            {
                try
                {
                    var       view     = row.DataBoundItem as DataRowView;
                    var       orderRow = view.Row as OrderDataRow;
                    Fix.Order order    = orderRow.Order;

                    if (order.OrdStatus != null)
                    {
                        continue;
                    }

                    var message = new Fix.Message {
                        MsgType = Fix.Dictionary.Messages.ExecutionReport.MsgType
                    };

                    message.Fields.Set(Fix.Dictionary.Fields.ClOrdID, order.ClOrdID);
                    message.Fields.Set(Fix.Dictionary.Fields.Side, (Fix.Side)order.Side);
                    message.Fields.Set(Fix.Dictionary.Fields.Symbol, order.Symbol);
                    message.Fields.Set(Fix.Dictionary.Fields.OrderQty, order.OrderQty);
                    message.Fields.Set(Fix.Dictionary.Fields.OrdStatus, Fix.OrdStatus.Rejected);

                    if (order.OrderID == null)
                    {
                        order.OrderID = Session.NextOrderId.ToString();
                    }

                    message.Fields.Set(Fix.Dictionary.Fields.OrderID, order.OrderID);
                    message.Fields.Set(Fix.Dictionary.Fields.ExecID, Session.NextExecId.ToString());
                    message.Fields.Set(Fix.Dictionary.Fields.LastQty, 0);
                    message.Fields.Set(Fix.Dictionary.Fields.LastPx, 0);
                    message.Fields.Set(Fix.Dictionary.Fields.CumQty, 0);
                    message.Fields.Set(Fix.Dictionary.Fields.AvgPx, 0);

                    if (Session.Version.BeginString != Fix.Dictionary.Versions.FIX_4_0.BeginString)
                    {
                        message.Fields.Set(Fix.Dictionary.Fields.ExecType, Fix.ExecType.Rejected);
                        message.Fields.Set(Fix.Dictionary.Fields.LeavesQty, 0);
                    }

                    if (Session.Version.BeginString.StartsWith("FIX.4."))
                    {
                        message.Fields.Set(Fix.Dictionary.FIX_4_0.Fields.ExecTransType, Fix.Dictionary.FIX_4_0.ExecTransType.New);
                    }

                    Session.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this,
                                    ex.Message,
                                    Application.ProductName,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
        }
コード例 #2
0
        public void TestConstructorNoSenderCompId()
        {
            var message = new Fix.Message {
                MsgType = FIX_5_0SP2.Messages.NewOrderSingle.MsgType
            };
            var order = new Fix.Order(message);

            Assert.IsNotNull(order);
        }
コード例 #3
0
        public void TestConstructorWrongMsgType()
        {
            var message = new Fix.Message {
                MsgType = FIX_5_0SP2.Messages.ExecutionReport.MsgType
            };
            var order = new Fix.Order(message);

            Assert.IsNotNull(order);
        }
コード例 #4
0
        public void TestConstructorNoTargetCompId()
        {
            var message = new Fix.Message {
                MsgType = FIX_5_0SP2.Messages.NewOrderSingle.MsgType
            };

            message.Fields.Set(FIX_5_0SP2.Fields.SenderCompID, "SENDER");
            var order = new Fix.Order(message);

            Assert.IsNotNull(order);
        }
コード例 #5
0
        void OrderBookOrderUpdated(object sender, Fix.OrderBookEventArgs e)
        {
            Fix.Order order = e.Order;

            if (_orderTable.Rows.Find(order.ClOrdID) is not OrderDataRow row)
            {
                return;
            }

            row.Order = order;
            UpdateRow(row);
        }
コード例 #6
0
        void AmendButtonClick(object sender, EventArgs e)
        {
            Fix.Order order = SelectedOrder;

            if (order == null)
            {
                return;
            }

            _defaultsButton.PerformClick();
            _messageDefaults.AmendOrder(order);
        }
コード例 #7
0
        public void TestConstructorNoSymbol()
        {
            var message = new Fix.Message {
                MsgType = Fix.Dictionary.Messages.NewOrderSingle.MsgType
            };

            message.Fields.Set(Fix.Dictionary.Fields.SenderCompID, "SENDER");
            message.Fields.Set(Fix.Dictionary.Fields.TargetCompID, "TARGET");
            var order = new Fix.Order(message);

            Assert.IsNotNull(order);
        }
コード例 #8
0
        void CancelAllOpenOrders()
        {
            foreach (DataGridViewRow row in _orderGrid.Rows)
            {
                try
                {
                    var       view     = row.DataBoundItem as DataRowView;
                    var       orderRow = view.Row as OrderDataRow;
                    Fix.Order order    = orderRow.Order;

                    if (order.OrdStatus == Fix.OrdStatus.Canceled ||
                        order.OrdStatus == Fix.OrdStatus.Rejected ||
                        order.OrdStatus == Fix.OrdStatus.DoneForDay)
                    {
                        continue;
                    }

                    var message = new Fix.Message {
                        MsgType = Fix.Dictionary.Messages.OrderCancelRequest.MsgType
                    };

                    MessagesPanel.UpdateMessage(message, order);

                    message.Fields.Set(Fix.Dictionary.Fields.TransactTime, Fix.Field.TimeString(_session.MillisecondTimestamps));
                    message.Fields.Set(Fix.Dictionary.Fields.Side, order.Side.Value);
                    message.Fields.Set(Fix.Dictionary.Fields.Symbol, order.Symbol);
                    message.Fields.Set(Fix.Dictionary.Fields.OrigClOrdID, order.ClOrdID);
                    message.Fields.Set(Fix.Dictionary.Fields.ClOrdID, Session.FormatClOrdId(Session.NextClOrdId++));
                    //
                    // This field was removed from later versions.
                    //
                    Fix.Field beginString = message.Fields.Find(Fix.Dictionary.Fields.BeginString);

                    if (beginString != null && beginString.Value == Fix.Dictionary.Versions.FIX_4_0.BeginString)
                    {
                        message.Fields.Set(Fix.Dictionary.FIX_4_0.Fields.CxlType, "F");
                    }

                    Session.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this,
                                    ex.Message,
                                    Application.ProductName,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
        }
コード例 #9
0
        void OrderBookOrderUpdated(object sender, Fix.OrderBookEventArgs ev)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new MethodInvoker(() => OrderBookOrderUpdated(sender, ev)));
                return;
            }

            Fix.Order order = ev.Order;

            if (_orderTable.Rows.Find(order.ClOrdID) is not OrderDataRow row)
            {
                return;
            }

            row.Order = order;
            UpdateRow(row);
            _orderGrid.RefreshEdit();
        }
コード例 #10
0
        void AddOrder(Fix.Order order)
        {
            if (_orderTable.Rows.Find(order.ClOrdID) is OrderDataRow _)
            {
                return;
            }

            var row = (OrderDataRow)_orderTable.NewRow();

            row.Order = order;
            row[OrderDataTable.ColumnClOrdId] = order.ClOrdID;
            //
            // Prime these with 0's so the grid looks pretty.
            //
            row[OrderDataTable.ColumnDone]     = 0;
            row[OrderDataTable.ColumnLeaves]   = 0;
            row[OrderDataTable.ColumnAvgPrice] = 0;
            UpdateRow(row);
            _orderTable.Rows.Add(row);
        }
コード例 #11
0
        void CancelButtonClick(object sender, EventArgs e)
        {
            Fix.Order order = SelectedOrder;

            if (order == null)
            {
                return;
            }

            _defaultsButton.PerformClick();

            if (Session.OrderBehaviour == Fix.Behaviour.Initiator)
            {
                _messageDefaults.CancelOrder(order);
            }
            else
            {
                _messageDefaults.UnsolicitedCancelOrder(order);
            }
        }
コード例 #12
0
        public void TestConstructorAllMinimumRequirementsMet()
        {
            var message = new Fix.Message {
                MsgType = FIX_5_0SP2.Messages.NewOrderSingle.MsgType
            };

            message.Fields.Set(FIX_5_0SP2.Fields.SenderCompID, "SENDER");
            message.Fields.Set(FIX_5_0SP2.Fields.TargetCompID, "TARGET");
            message.Fields.Set(FIX_5_0SP2.Fields.Symbol, "BHP");
            message.Fields.Set(FIX_5_0SP2.Fields.ClOrdID, "1.2.3");
            message.Fields.Set(FIX_5_0SP2.Fields.OrderQty, 5000);
            var order = new Fix.Order(message);

            Assert.IsNotNull(order);
            Assert.AreEqual("SENDER", order.SenderCompID);
            Assert.AreEqual("TARGET", order.TargetCompID);
            Assert.AreEqual("BHP", order.Symbol);
            Assert.AreEqual("1.2.3", order.ClOrdID);
            Assert.AreEqual(5000, order.OrderQty);
            Assert.AreEqual(1, order.Messages.Count);
        }
コード例 #13
0
        void OrderBookOrderInserted(object sender, Fix.OrderBookEventArgs e)
        {
            Fix.Order order = e.Order;
            if (_orderTable.Rows.Find(order.ClOrdID) is OrderDataRow)
            {
                return;
            }

            OrderDataRow row = (OrderDataRow)_orderTable.NewRow();

            row.Order = order;
            row[OrderDataTable.ColumnClOrdId] = order.ClOrdID;
            //
            // Prime these with 0's so the grid looks pretty.
            //
            row[OrderDataTable.ColumnDone]     = 0;
            row[OrderDataTable.ColumnLeaves]   = 0;
            row[OrderDataTable.ColumnAvgPrice] = 0;
            UpdateRow(row);
            _orderTable.Rows.Add(row);
        }
コード例 #14
0
        void UpdateUiState()
        {
            bool enabled     = false;
            bool listEnabled = false;

            if (Session != null && Session.Connected && _orderGrid.SelectedRows.Count > 0)
            {
                enabled = true;

                Fix.Order order = SelectedOrder;

                if (order.ListID != null)
                {
                    listEnabled = true;
                }
            }

            _cancelButton.Enabled      = enabled;
            _amendButton.Enabled       = enabled;
            _statusButton.Enabled      = enabled;
            _listExecuteButton.Enabled = listEnabled;
            _listStatusButton.Enabled  = listEnabled;
            _listCancelButton.Enabled  = listEnabled;

            _ackButton.Enabled    = enabled;
            _rejectButton.Enabled = enabled;
            _reportButton.Enabled = enabled;

            _cancelMenuItem.Enabled      = enabled;
            _amendMenuItem.Enabled       = enabled;
            _statusMenuItem.Enabled      = enabled;
            _listExecuteMenuItem.Enabled = listEnabled;
            _listStatusMenuItem.Enabled  = listEnabled;
            _listCancelButton.Enabled    = listEnabled;

            _ackMenuItem.Enabled    = enabled;
            _rejectMenuItem.Enabled = enabled;
            _reportMenuItem.Enabled = enabled;
        }
コード例 #15
0
        void ListExecuteButtonClick(object sender, EventArgs e)
        {
            Fix.Order order = SelectedOrder;

            if (order == null)
            {
                return;
            }

            if (order.ListID == null)
            {
                MessageBox.Show(this,
                                "The selected order does not have a ListID so a ListExecute cannot be performed",
                                Application.ProductName,
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                return;
            }

            _defaultsButton.PerformClick();
            _messageDefaults.ListExecute(order.ListID);
        }
コード例 #16
0
        void AckButtonClick(object sender, EventArgs e)
        {
            Fix.Order order = SelectedOrder;

            if (order == null)
            {
                return;
            }

            _defaultsButton.PerformClick();

            if (order.OrdStatus == Fix.OrdStatus.PendingCancel)
            {
                _messageDefaults.AcknowledgeCancel(order);
            }
            else if (order.OrdStatus == Fix.OrdStatus.PendingReplace)
            {
                _messageDefaults.AcknowledgeAmend(order);
            }
            else
            {
                _messageDefaults.AcknowledgeOrder(order);
            }
        }
コード例 #17
0
        static void UpdateRow(OrderDataRow row)
        {
            Fix.Order order = row.Order;

            row[OrderDataTable.ColumnQuantity]      = order.OrderQty;
            row[OrderDataTable.ColumnSymbol]        = order.Symbol;
            row[OrderDataTable.ColumnExDestination] = order.ExDestination;

            if (order.TimeInForce != null)
            {
                row[OrderDataTable.ColumnTimeInForce]       = (Fix.TimeInForce)order.TimeInForce;
                row[OrderDataTable.ColumnTimeInForceString] = OrderDataGridView.ShortTimeInForceDescription(order.TimeInForce.Value);
            }

            if (order.OrdStatus != null)
            {
                row[OrderDataTable.ColumnOrdStatus]       = (Fix.OrdStatus)order.OrdStatus;
                row[OrderDataTable.ColumnOrdStatusString] = ((Fix.OrdStatus)order.OrdStatus).ToString();
            }
            else
            {
                row[OrderDataTable.ColumnOrdStatusString] = Fix.OrdStatus.PendingNew.ToString();
            }

            if (order.OrigClOrdID != null)
            {
                row[OrderDataTable.ColumnOrigClOrdId] = order.OrigClOrdID;
            }

            if (order.Side != null)
            {
                row[OrderDataTable.ColumnSide]       = (Fix.Side)order.Side;
                row[OrderDataTable.ColumnSideString] = ((Fix.Side)order.Side).ToString();
            }

            long cumQty    = order.CumQty ?? 0;
            long leavesQty = order.LeavesQty ?? 0;

            if (!order.LeavesQty.HasValue)
            {
                if (order.Active)
                {
                    leavesQty = order.OrderQty - cumQty;
                }
            }

            row[OrderDataTable.ColumnLeaves] = leavesQty;
            row[OrderDataTable.ColumnDone]   = cumQty;

            if (order.AvgPx != null)
            {
                row[OrderDataTable.ColumnAvgPrice] = order.AvgPx.Value;
            }

            if (order.Price != null)
            {
                row[OrderDataTable.ColumnLimit] = order.Price.Value;
            }

            if (order.ListID != null)
            {
                row[OrderDataTable.ColumnListId] = order.ListID;
            }

            if (order.Text != null)
            {
                row[OrderDataTable.ColumnText] = order.Text;
            }
        }
コード例 #18
0
ファイル: OrdersPanel.cs プロジェクト: GaryHughes/FixClient
        void AcknowledgeAllPendingOrders()
        {
            if (Session is null)
            {
                return;
            }

            foreach (DataGridViewRow row in _orderGrid.Rows)
            {
                try
                {
                    var view     = row.DataBoundItem as DataRowView;
                    var orderRow = view?.Row as OrderDataRow;

                    if (orderRow?.Order is null)
                    {
                        continue;
                    }

                    Fix.Order order = orderRow.Order;

                    if (order is null)
                    {
                        continue;
                    }

                    if (order.OrdStatus != null)
                    {
                        continue;
                    }

                    var message = new Fix.Message {
                        MsgType = FIX_5_0SP2.Messages.ExecutionReport.MsgType
                    };

                    message.Fields.Set(FIX_5_0SP2.Fields.ClOrdID, order.ClOrdID);

                    if (order.Side is FieldValue side)
                    {
                        message.Fields.Set(order.Side);
                    }

                    message.Fields.Set(FIX_5_0SP2.Fields.Symbol, order.Symbol);
                    message.Fields.Set(FIX_5_0SP2.Fields.OrderQty, order.OrderQty);
                    message.Fields.Set(FIX_5_0SP2.OrdStatus.New);

                    if (order.OrderID == null)
                    {
                        order.OrderID = Session.NextOrderId.ToString();
                    }

                    message.Fields.Set(FIX_5_0SP2.Fields.OrderID, order.OrderID);
                    message.Fields.Set(FIX_5_0SP2.Fields.ExecID, Session.NextExecId.ToString());
                    message.Fields.Set(FIX_5_0SP2.Fields.LastQty, 0);
                    message.Fields.Set(FIX_5_0SP2.Fields.LastPx, 0);
                    message.Fields.Set(FIX_5_0SP2.Fields.CumQty, 0);
                    message.Fields.Set(FIX_5_0SP2.Fields.AvgPx, 0);

                    if (Session.Version.BeginString != "FIX.4.0")
                    {
                        message.Fields.Set(FIX_5_0SP2.ExecType.New);
                        message.Fields.Set(FIX_5_0SP2.Fields.LeavesQty, order.OrderQty);
                    }

                    if (Session.Version.BeginString.StartsWith("FIX.4."))
                    {
                        message.Fields.Set(FIX_4_2.ExecTransType.New);
                    }

                    Session.Send(message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this,
                                    ex.Message,
                                    Application.ProductName,
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
        }