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); } } }
public void TestConstructorNoSenderCompId() { var message = new Fix.Message { MsgType = FIX_5_0SP2.Messages.NewOrderSingle.MsgType }; var order = new Fix.Order(message); Assert.IsNotNull(order); }
public void TestConstructorWrongMsgType() { var message = new Fix.Message { MsgType = FIX_5_0SP2.Messages.ExecutionReport.MsgType }; var order = new Fix.Order(message); Assert.IsNotNull(order); }
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); }
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); }
void AmendButtonClick(object sender, EventArgs e) { Fix.Order order = SelectedOrder; if (order == null) { return; } _defaultsButton.PerformClick(); _messageDefaults.AmendOrder(order); }
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); }
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); } } }
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(); }
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); }
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); } }
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); }
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); }
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; }
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); }
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); } }
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; } }
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); } } }