/// <summary> /// Create a NewOrderSingle message. /// </summary> /// <param name="customFields"></param> /// <param name="orderType"></param> /// <param name="side"></param> /// <param name="symbol"></param> /// <param name="orderQty"></param> /// <param name="tif"></param> /// <param name="price">ignored if orderType=Market</param> /// <returns></returns> static public QuickFix.FIX42.NewOrderSingle NewOrderSingle( Dictionary <int, string> customFields, OrderType orderType, Side side, string symbol, int orderQty, TimeInForce tif, decimal price) { // hard-coded fields QuickFix.Fields.HandlInst fHandlInst = new QuickFix.Fields.HandlInst(QuickFix.Fields.HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE); // from params QuickFix.Fields.OrdType fOrdType = FixEnumTranslator.ToField(orderType); QuickFix.Fields.Side fSide = FixEnumTranslator.ToField(side); QuickFix.Fields.Symbol fSymbol = new QuickFix.Fields.Symbol(symbol); QuickFix.Fields.TransactTime fTransactTime = new QuickFix.Fields.TransactTime(DateTime.Now); QuickFix.Fields.ClOrdID fClOrdID = GenerateClOrdID(); QuickFix.FIX42.NewOrderSingle nos = new QuickFix.FIX42.NewOrderSingle( fClOrdID, fHandlInst, fSymbol, fSide, fTransactTime, fOrdType); nos.OrderQty = new QuickFix.Fields.OrderQty(orderQty); nos.TimeInForce = FixEnumTranslator.ToField(tif); if (orderType == OrderType.Limit) { nos.Price = new QuickFix.Fields.Price(price); } // add custom fields foreach (KeyValuePair <int, string> p in customFields) { nos.SetField(new QuickFix.Fields.StringField(p.Key, p.Value)); } return(nos); }
public void CheckIsInGroupTest() { QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary("../../../spec/fix/FIX44.xml"); QuickFix.DataDictionary.DDGrp g = dd.Messages["B"].GetGroup(33); QuickFix.Fields.Text textField = new QuickFix.Fields.Text("woot"); QuickFix.Fields.ClOrdID clOrdIdField = new QuickFix.Fields.ClOrdID("not woot"); Assert.DoesNotThrow(delegate() { dd.CheckIsInGroup(textField, g, "B"); }); Assert.Throws(typeof(TagNotDefinedForMessage), delegate { dd.CheckIsInGroup(clOrdIdField, g, "B"); }); }
protected void RejectCancelRequest(QuickFix.SessionID session, QuickFix.Fields.ClOrdID clordid, QuickFix.Fields.OrigClOrdID origordid, IOrder nt7_order, string rej_reason, int cxl_rej, bool is_cancelreplace_request) { QuickFix.FIX42.OrderCancelReject rej = new QuickFix.FIX42.OrderCancelReject(); if (nt7_order == null) { rej.Set(new QuickFix.Fields.OrderID("NONE")); } else { rej.Set(new QuickFix.Fields.OrderID(clordid.getValue())); } rej.Set(origordid); rej.Set(Converter.c(nt7_order.OrderState)); rej.Set(new QuickFix.Fields.CxlRejResponseTo(is_cancelreplace_request ? QuickFix.Fields.CxlRejResponseTo.ORDER_CANCEL_REPLACE_REQUEST : QuickFix.Fields.CxlRejResponseTo.ORDER_CANCEL_REQUEST)); rej.Set(new QuickFix.Fields.CxlRejReason(cxl_rej)); rej.Set(new QuickFix.Fields.Text(rej_reason)); rej.Set(new QuickFix.Fields.TransactTime(DateTime.Now, true)); QuickFix.Session.SendToTarget(rej, session); }
public void Set(QuickFix.Fields.ClOrdID val) { this.ClOrdID = val; }
protected void ProcessOrderCancelRequest(QuickFix.SessionID session, QuickFix.Fields.ClOrdID clordid, QuickFix.Fields.OrigClOrdID origordid , bool is_cancelreplace_request, int new_qty, double new_px, double new_stop_px) { IOrder order = null; try { // order exists ? OrderFixBridge order_bridge; lock (locker_) order_bridge = m_orders.AddOrGet(null, origordid.getValue(), session); if (order_bridge.Order == null) { RejectCancelRequest(session, clordid, origordid, null, "Unknown order !", QuickFix.Fields.CxlRejReason.UNKNOWN_ORDER, true); return; } order = order_bridge.Order; switch (order.OrderState) { // order is still alive, go ahead case OrderState.Accepted: case OrderState.PartFilled: case OrderState.Working: if (is_cancelreplace_request) { QuickFixStaticAcceptor.FromFIX_ChangeOrder(order, new_qty, new_px, new_stop_px); } else { QuickFixStaticAcceptor.FromFIX_CancelOrder(order); } return; // pending case OrderState.PendingChange: //VV? case OrderState.PendingSubmit: //VV? case OrderState.PendingCancel: //VV? { string error_message = "Invalid cancel or cancel/replace request since order " + origordid.getValue() + " is in pending state : " + order.OrderState.ToString(); RejectCancelRequest(session, clordid, origordid, order, error_message, QuickFix.Fields.CxlRejReason.ALREADY_PENDING, is_cancelreplace_request); return; } // terminal state case OrderState.Cancelled: case OrderState.Filled: case OrderState.Rejected: { string error_message = "Invalid cancel or cancel/replace request since order " + origordid.getValue() + " is in terminal/closed state : " + order.OrderState.ToString(); RejectCancelRequest(session, clordid, origordid, order, error_message, QuickFix.Fields.CxlRejReason.TOO_LATE_TO_CANCEL, is_cancelreplace_request); return; } case OrderState.Unknown: { string error_message = "Invalid cancel or cancel/replace request since order " + origordid.getValue() + " is in unknow NT7 state : " + order.OrderState.ToString(); RejectCancelRequest(session, clordid, origordid, order, error_message, QuickFix.Fields.CxlRejReason.OTHER, is_cancelreplace_request); return; } } } catch (Exception e) { RejectCancelRequest(session, clordid, origordid, order, "ProcessOrderCancelRequest : internal Error : " + e.ToString() , QuickFix.Fields.CxlRejReason.OTHER, is_cancelreplace_request); } }
protected void ProcessOrderCancelRequest(QuickFix.SessionID session, QuickFix.Fields.ClOrdID clordid, QuickFix.Fields.OrigClOrdID origordid) { ProcessOrderCancelRequest(session, clordid, origordid, false, 0, 0, 0); }
//receive fills, working orders, order rejects public void OnMessage(QuickFix.FIX42.ExecutionReport message, QuickFix.SessionID session) { //parseMessage(message, session); try { QuickFix.Fields.ExecType et = new QuickFix.Fields.ExecType(); QuickFix.Fields.ExecTransType ett = new QuickFix.Fields.ExecTransType(); QuickFix.Fields.ClOrdID coid = new QuickFix.Fields.ClOrdID(); //Friday, December 11, 2009 10:29:27 AM Added parentheses to encapsulate OR //remove hold on orders if order was rejected if (message.IsSetField(coid) && (message.GetField(et).getValue() == QuickFix.Fields.ExecType.FILL || message.GetField(et).getValue() == QuickFix.Fields.ExecType.REJECTED)) { updateOrderMgmt(message.GetField(coid).getValue().ToString()); } //end modified code if (message.IsSetField(et)) { //capture fill to update position if ((message.GetField(et).getValue() == QuickFix.Fields.ExecType.FILL || message.GetField(et).getValue() == QuickFix.Fields.ExecType.PARTIAL_FILL) && message.MultiLegReportingType.getValue() != QuickFix.Fields.MultiLegReportingType.MULTI_LEG_SECURITY) { updateDisplay("execution received"); posTableUpdate(message, session); } //capture working orders and cancel for flatten if (message.GetField(et).getValue() == QuickFix.Fields.ExecType.RESTATED && message.GetField(ett).getValue() == QuickFix.Fields.ExecTransType.STATUS) { string MGT = null; QuickFix.Fields.SenderSubID subID = new QuickFix.Fields.SenderSubID(); if (message.Header.IsSetField(subID)) { MGT = message.Header.GetField(subID).ToString(); orderCancel(MGT, message.OrderID.ToString()); } } } } catch (Exception ex) { updateDisplay("QuickFIX Error"); log.WriteLog(ex.ToString()); } }