public void CancelOrder(string oriID, string clrID, char sideID, string symbolID) { OrigClOrdID origClOrdID = new OrigClOrdID(oriID); ClOrdID clOrdID = new ClOrdID(clrID); Side side = new Side(sideID); Symbol symbol = new Symbol(symbolID); TransactTime time = new TransactTime(); QuickFix42.OrderCancelRequest message = new QuickFix42.OrderCancelRequest(origClOrdID, clOrdID, symbol, side, time); message.setInt(38, 0);//委托数量,这里不设置竟无法撤单。 SendToServer(message); }
public int cancelOrder(OrderStruct os) {//will add check in case of already filled, no cancel. OrderDAO ord = new OrderDAO(); OrderStruct dbos = new OrderStruct(11, 8); if (ord.getOrderFromDB(os.OrderNo, ref dbos) < 0) { Console.WriteLine("Error : Unable to get order details from DB"); return(-1); } Console.WriteLine("DBG: truct val"); dbos.display(); string ordStatus = new string(dbos.OrderStatus); //if(ordStatus.Equals("CANCELED") || ordStatus.Equals("COMPLETED")) //{ // Console.WriteLine("Order is already "+ordStatus); // return -1; //} Console.WriteLine("Order No [" + dbos.OrderNo + "] : Status [" + ordStatus + "]"); //return -1; int ordNo = ord.cancelOrder(ref dbos); if (ordNo < 0) { return(-1); } Console.WriteLine("TODO: Send FIX - cancel for os.ID"); //Send FIX - cancel for os.ID OrigClOrdID origCLOrdID = new OrigClOrdID(Convert.ToString(dbos.fixAcceptedID)); ClOrdID OrdId = new ClOrdID(Convert.ToString(ordNo)); string symboldata = sanitiseField(os.symbol); Symbol symbol = new Symbol(symboldata); Side side = new Side(Side.BUY); if (os.direction == 'S') { side = new Side(Side.SELL); } Console.WriteLine("cancelling origOrdId : " + dbos.fixAcceptedID + " newOrdId : " + ordNo); Console.WriteLine("symboldata : " + symboldata + " side : " + side); var orderCan = new QuickFix.FIX42.OrderCancelRequest(origCLOrdID, OrdId, symbol, side, new TransactTime(DateTime.Now.ToUniversalTime())); Session.SendToTarget(orderCan, FixClient.MySess); return(os.OrderNo); }
public int amendOrder(ref OrderStruct os) { if (!isOrderAmendPossible(os.OrderStatus)) { return(-1); } OrderDAO ord = new OrderDAO(); int newOrdID = ord.amendOrder(ref os); // OrderID is the last FixAccepted version Console.WriteLine("TODO: Send FIX - cancel for os.LinkedOrderID ; Send FIX - New for os.ID"); OrigClOrdID origCLOrdID = new OrigClOrdID(Convert.ToString(os.ID)); ClOrdID OrdId = new ClOrdID(Convert.ToString(newOrdID)); string symboldata = sanitiseField(os.symbol); Symbol symbol = new Symbol(symboldata); Side side = new Side(Side.BUY); if (os.direction == 'S') { side = new Side(Side.SELL); } OrdType ordType = new OrdType(OrdType.LIMIT); if (os.orderType == 1) { ordType = new OrdType(OrdType.MARKET); } var orderMod = new QuickFix.FIX42.OrderCancelReplaceRequest(origCLOrdID, OrdId, new HandlInst('1'), symbol, side, new TransactTime(DateTime.Now.ToUniversalTime()), ordType); int Qty = (int)os.quantity; orderMod.Price = new Price((decimal)os.price); orderMod.SetField(new OrderQty(Qty)); Console.WriteLine("Modifying origOrdId/FixAcceptedID : " + os.ID + " newOrderID : " + newOrdID); Console.WriteLine("symboldata : " + symboldata + " side : " + side + " Price : " + os.price + " qty : " + os.quantity); Session.SendToTarget(orderMod, FixClient.MySess); return(os.OrderNo); }
public bool CancelarOrdem(OrdemCancelamentoInfo ordem, long ini = 0, long fim = 0, long oriini = 0, long orifim = 0, int delay = 0, string mnemonic = "", string senderSubID = "", string extraTags = "") { //Cria a mensagem FIX de NewOrderSingle QuickFix.FIX42.OrderCancelRequest ordercrr = new QuickFix.FIX42.OrderCancelRequest(); ordercrr.Set(new Account(ordem.Account.ToString())); if (!string.IsNullOrEmpty(mnemonic)) { ordercrr.SetField(new Account(mnemonic), true); } if (!string.IsNullOrEmpty(senderSubID)) { ordercrr.Header.SetField(new SenderSubID(senderSubID), true); } ordercrr.Set(new Symbol(ordem.Symbol)); ordercrr.Set(new ClOrdID(ordem.ClOrdID)); ordercrr.Set(new OrigClOrdID(ordem.OrigClOrdID)); // Armazena ClOrdID em Memo (5149) para posterior referência nos tratamentos de retornos QuickFix.Fields.StringField field5149 = new QuickFix.Fields.StringField(5149, ordem.ClOrdID); ordercrr.SetField(field5149); //ordersingle.Set(new IDSource()); if (ordem.Side == OrdemDirecaoEnum.Venda) { ordercrr.Set(new Side(Side.SELL)); } else { ordercrr.Set(new Side(Side.BUY)); } //TimeInForce tif = FixMessageUtilities.deOrdemValidadeParaTimeInForce(ordem.TimeInForce); //if (tif != null) // ordercrr.Set(tif); ordercrr.Set(new OrderQty(ordem.OrderQty)); ////if (ordem.TimeInForce == OrdemValidadeEnum.ValidoAteDeterminadaData) ////{ //// DateTime expiredate = Convert.ToDateTime(ordem.ExpireDate); //// ordercrr.Set(new ExpireDate(expiredate.ToString("yyyyMMdd"))); ////} ////OrdType ordType = FixMessageUtilities.deOrdemTipoParaOrdType(ordem.OrdType); ////if (ordType != null) //// ordercrr.Set(ordType); // Verifica envio do preco //switch (ordem.OrdType) //{ // case OrdemTipoEnum.Limitada: // case OrdemTipoEnum.MarketWithLeftOverLimit: // case OrdemTipoEnum.StopLimitada: // ordercrr.Set(new Price(Convert.ToDecimal(ordem.Price))); // break; // case OrdemTipoEnum.StopStart: // ordercrr.Set(new Price(Convert.ToDecimal(ordem.Price))); // ordercrr.Set(new StopPx(Convert.ToDecimal(ordem.StopPrice))); // break; // case OrdemTipoEnum.Mercado: // case OrdemTipoEnum.OnClose: // ordercrr.Set(new Price(Convert.ToDecimal(ordem.Price))); // break; // default: // ordercrr.Set(new Price(Convert.ToDecimal(ordem.Price))); // break; //} ordercrr.Set(new TransactTime(DateTime.Now)); //ordercrr.Set(new HandlInst('1')); //ordercrr.Set(new ExecBroker("227")); //if (ordem.MaxFloor > 0) // ordercrr.Set(new MaxFloor(Convert.ToDecimal(ordem.MaxFloor))); //if (ordem.MinQty > 0) // ordercrr.Set(new MinQty(Convert.ToDecimal(ordem.MinQty))); //QuickFix.FIX42.OrderCancelReplaceRequest.NoAllocsGroup noAllocsGrp = new QuickFix.FIX42.OrderCancelReplaceRequest.NoAllocsGroup(); //noAllocsGrp.Set(new AllocAccount("67")); //ordercrr.AddGroup(noAllocsGrp); bool bRet = false; // Tags Customizadas Bloomberg if (!string.IsNullOrEmpty(extraTags)) { string[] arr = extraTags.Split(';'); for (int i = 0; i < arr.Length; i++) { if (!string.IsNullOrEmpty(arr[i])) { string[] valor = arr[i].Split('='); StringField fld = new StringField(Convert.ToInt32(valor[0]), valor[1]); ordercrr.SetField(fld); } } } if (oriini != 0 && orifim != 0) { long times = fim - ini; logger.Info("=====================================> INICIO CANCELAR ORDEM========> Qtd: " + times); for (long i = 0; i < times; i++) { ClOrdID xx = new ClOrdID(ini.ToString()); OrigClOrdID xx2 = new OrigClOrdID(oriini.ToString()); ordercrr.ClOrdID = xx; ordercrr.OrigClOrdID = xx2; bRet = Session.SendToTarget(ordercrr, _session.SessionID); if (!bRet) { logger.Info("erro"); break; } if (0 != delay) { Thread.Sleep(delay); } ini++; oriini++; } logger.Info("=====================================> FIM CANCELAR ORDEM========> Qtd: " + times); } else { bRet = Session.SendToTarget(ordercrr, _session.SessionID); } return(bRet); }
public bool CancelarOrdem(OrdemCancelamentoInfo orderCancelInfo, long ini = 0, long fim = 0, long oriini = 0, long orifim = 0, int delay = 0, string mnemonic = "") { //Cria a mensagem FIX de OrderCancelRequest QuickFix.FIX44.OrderCancelRequest orderCancel = new QuickFix.FIX44.OrderCancelRequest(); if (orderCancelInfo.Account > 0) { orderCancel.Set(new Account(orderCancelInfo.Account.ToString())); } if (!string.IsNullOrEmpty(mnemonic)) { orderCancel.SetField(new Account(mnemonic), true); } orderCancel.Set(new OrigClOrdID(orderCancelInfo.OrigClOrdID)); orderCancel.Set(new ClOrdID(orderCancelInfo.ClOrdID)); if (orderCancelInfo.OrderID != null && orderCancelInfo.OrderID.Length > 0) { orderCancel.Set(new OrderID(orderCancelInfo.OrderID)); } // Instrument Identification Block orderCancel.Set(new Symbol(orderCancelInfo.Symbol)); orderCancel.Set(new SecurityID(orderCancelInfo.SecurityID)); orderCancel.Set(new SecurityIDSource(SecurityIDSource.EXCHANGE_SYMBOL)); if (orderCancelInfo.Side == OrdemDirecaoEnum.Venda) { orderCancel.Set(new Side(Side.SELL)); } else { orderCancel.Set(new Side(Side.BUY)); } orderCancel.Set(new TransactTime(DateTime.Now)); //ATP - 2012-10-29 //Qtde de contratos/papeis a serem cancelados orderCancel.Set(new OrderQty(orderCancelInfo.OrderQty)); // Cliente QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup PartyIDGroup1 = new QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup(); PartyIDGroup1.Set(new PartyID(orderCancelInfo.ExecBroker)); PartyIDGroup1.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup1.Set(new PartyRole(PartyRole.ENTERING_TRADER)); // Corretora QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup PartyIDGroup2 = new QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup(); PartyIDGroup2.Set(new PartyID("227")); PartyIDGroup2.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup2.Set(new PartyRole(PartyRole.ENTERING_FIRM)); QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup PartyIDGroup3 = new QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup(); if (orderCancelInfo.SenderLocation != null && orderCancelInfo.SenderLocation.Length > 0) { PartyIDGroup3.Set(new PartyID(orderCancelInfo.SenderLocation)); } else { PartyIDGroup3.Set(new PartyID("GRA")); } PartyIDGroup3.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup3.Set(new PartyRole(54)); orderCancel.AddGroup(PartyIDGroup1); orderCancel.AddGroup(PartyIDGroup2); orderCancel.AddGroup(PartyIDGroup3); //BEI - 2012-Nov-14 if (orderCancelInfo.ForeignFirm != null && orderCancelInfo.ForeignFirm.Length > 0) { QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup PartyIDGroup4 = new QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup(); PartyIDGroup4.Set(new PartyID(orderCancelInfo.ForeignFirm)); PartyIDGroup4.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup4.Set(new PartyRole(PartyRole.FOREIGN_FIRM)); orderCancel.AddGroup(PartyIDGroup4); } if (orderCancelInfo.ExecutingTrader != null && orderCancelInfo.ExecutingTrader.Length > 0) { QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup PartyIDGroup7 = new QuickFix.FIX44.OrderCancelRequest.NoPartyIDsGroup(); PartyIDGroup7.Set(new PartyID(orderCancelInfo.ExecutingTrader)); PartyIDGroup7.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup7.Set(new PartyRole(PartyRole.EXECUTING_TRADER)); orderCancel.AddGroup(PartyIDGroup7); } // Memo Field if (orderCancelInfo.Memo5149 != null && orderCancelInfo.Memo5149.Length > 0) { if (orderCancelInfo.Memo5149.Length > 50) { orderCancelInfo.Memo5149 = orderCancelInfo.Memo5149.Substring(0, 50); } StringField memo5149 = new StringField(5149, orderCancelInfo.Memo5149); orderCancel.SetField(memo5149); } bool bRet = false; if (oriini != 0 && orifim != 0) { long times = fim - ini; logger.Info("=====================================> INICIO CANCELAR ORDEM========> Qtd: " + times); for (long i = 0; i < times; i++) { ClOrdID xx = new ClOrdID(ini.ToString()); OrigClOrdID xx2 = new OrigClOrdID(oriini.ToString()); orderCancel.ClOrdID = xx; orderCancel.OrigClOrdID = xx2; bRet = Session.SendToTarget(orderCancel, _session.SessionID); if (!bRet) { logger.Info("erro"); break; } if (0 != delay) { Thread.Sleep(delay); } ini++; oriini++; //System.Windows.Forms.Application.DoEvents(); } logger.Info("=====================================> FIM CANCELAR ORDEM========> Qtd: " + times); } else { bRet = Session.SendToTarget(orderCancel, _session.SessionID); } return(bRet); }
/* * public void ExecOrders(object arg) * { * NewOrderSingle ordem = (NewOrderSingle)arg; * long clordid = Convert.ToInt64(DateTime.Now.ToString("yyyyMMddhhmmssfff")); * bool bRet; * logger.Info("=====================================> INICIO ========> Regs: " + _times); * for (int i =0; i<_times; i++) * { * ClOrdID xx = new ClOrdID(clordid++.ToString()); * ordem.ClOrdID = xx; * //Thread.Sleep(1); * bRet = Session.SendToTarget(ordem, _session.SessionID); * } * logger.Info("=====================================> FIM ========> Regs: " + _times); * } */ public bool AlterarOrdem(OrdemInfo ordem, long ini = 0, long fim = 0, long oriini = 0, long orifim = 0, int delay = 0, string mnemonic = "") { //Cria a mensagem FIX de NewOrderSingle QuickFix.FIX44.OrderCancelReplaceRequest orderCancelReplaceReq = new QuickFix.FIX44.OrderCancelReplaceRequest(); orderCancelReplaceReq.Set(new OrigClOrdID(ordem.OrigClOrdID)); if (ordem.Account > 0) { orderCancelReplaceReq.Set(new Account(ordem.Account.ToString())); } if (!string.IsNullOrEmpty(mnemonic)) { orderCancelReplaceReq.SetField(new Account(mnemonic), true); } // Instrument Identification Block orderCancelReplaceReq.Set(new Symbol(ordem.Symbol)); orderCancelReplaceReq.Set(new SecurityID(ordem.SecurityID)); orderCancelReplaceReq.Set(new SecurityIDSource(SecurityIDSource.EXCHANGE_SYMBOL)); if (ordem.ExchangeNumberID != null && ordem.ExchangeNumberID.Length > 0) { orderCancelReplaceReq.Set(new OrderID(ordem.ExchangeNumberID)); } orderCancelReplaceReq.Set(new ClOrdID(ordem.ClOrdID)); //ordersingle.set(new IDSource()); if (ordem.Side == OrdemDirecaoEnum.Venda) { orderCancelReplaceReq.Set(new Side(Side.SELL)); } else { orderCancelReplaceReq.Set(new Side(Side.BUY)); } orderCancelReplaceReq.Set(new Price(Convert.ToDecimal(ordem.Price))); TimeInForce tif = FixMessageUtilities.deOrdemValidadeParaTimeInForce(ordem.TimeInForce); if (tif != null) { orderCancelReplaceReq.Set(tif); } orderCancelReplaceReq.Set(new OrderQty(ordem.OrderQty)); if (ordem.TimeInForce == OrdemValidadeEnum.ValidoAteDeterminadaData) { DateTime expiredate = Convert.ToDateTime(ordem.ExpireDate); orderCancelReplaceReq.Set(new ExpireDate(expiredate.ToString("yyyyMMdd"))); } OrdType ordType = FixMessageUtilities.deOrdemTipoParaOrdType(ordem.OrdType); if (ordType != null) { orderCancelReplaceReq.Set(ordType); } //if (ordem.OrdType == OrdemTipoEnum.StopLimitada ) //{ // ordersingle.set(new StopPx(ordem.StopPx)); //} orderCancelReplaceReq.Set(new TransactTime(DateTime.Now)); // Cliente QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup PartyIDGroup1 = new QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup(); PartyIDGroup1.Set(new PartyID(ordem.ExecBroker)); PartyIDGroup1.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup1.Set(new PartyRole(PartyRole.ENTERING_TRADER)); // Corretora QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup PartyIDGroup2 = new QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup(); PartyIDGroup2.Set(new PartyID("227")); PartyIDGroup2.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup2.Set(new PartyRole(PartyRole.ENTERING_FIRM)); // Location ID QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup PartyIDGroup3 = new QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup(); if (ordem.SenderLocation != null && ordem.SenderLocation.Length > 0) { PartyIDGroup3.Set(new PartyID(ordem.SenderLocation)); } else { PartyIDGroup3.Set(new PartyID("GRA")); } PartyIDGroup3.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup3.Set(new PartyRole(54)); orderCancelReplaceReq.AddGroup(PartyIDGroup1); orderCancelReplaceReq.AddGroup(PartyIDGroup2); orderCancelReplaceReq.AddGroup(PartyIDGroup3); //BEI - 2012-Nov-14 if (ordem.ForeignFirm != null && ordem.ForeignFirm.Length > 0) { QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup PartyIDGroup4 = new QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup(); PartyIDGroup4.Set(new PartyID(ordem.ForeignFirm)); PartyIDGroup4.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup4.Set(new PartyRole(PartyRole.FOREIGN_FIRM)); orderCancelReplaceReq.AddGroup(PartyIDGroup4); } if (ordem.Account > 0) { QuickFix.FIX44.OrderCancelReplaceRequest.NoAllocsGroup noAllocsGrp = new QuickFix.FIX44.OrderCancelReplaceRequest.NoAllocsGroup(); noAllocsGrp.Set(new AllocAccount(ordem.Account.ToString())); noAllocsGrp.Set(new AllocAcctIDSource(99)); orderCancelReplaceReq.AddGroup(noAllocsGrp); } //SelfTradeProtection - 2012-Nov-27 if (ordem.InvestorID != null && ordem.InvestorID.Length > 0) { QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup PartyIDGroup5 = new QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup(); PartyIDGroup5.Set(new PartyID(ordem.InvestorID)); PartyIDGroup5.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup5.Set(new PartyRole(PartyRole.INVESTOR_ID)); orderCancelReplaceReq.AddGroup(PartyIDGroup5); } if (ordem.ExecutingTrader != null && ordem.ExecutingTrader.Length > 0) { QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup PartyIDGroup7 = new QuickFix.FIX44.OrderCancelReplaceRequest.NoPartyIDsGroup(); PartyIDGroup7.Set(new PartyID(ordem.ExecutingTrader)); PartyIDGroup7.Set(new PartyIDSource(PartyIDSource.PROPRIETARY_CUSTOM_CODE)); PartyIDGroup7.Set(new PartyRole(PartyRole.EXECUTING_TRADER)); orderCancelReplaceReq.AddGroup(PartyIDGroup7); } // Memo Field if (ordem.Memo5149 != null && ordem.Memo5149.Length > 0) { if (ordem.Memo5149.Length > 50) { ordem.Memo5149 = ordem.Memo5149.Substring(0, 50); } StringField memo5149 = new StringField(5149, ordem.Memo5149); orderCancelReplaceReq.SetField(memo5149); } bool bRet = false; if (oriini != 0 && orifim != 0) { long times = fim - ini; logger.Info("=====================================> INICIO ALTERAR ORDEM========> Qtd: " + times); for (long i = 0; i < times; i++) { ClOrdID xx = new ClOrdID(ini.ToString()); OrigClOrdID xx2 = new OrigClOrdID(oriini.ToString()); orderCancelReplaceReq.ClOrdID = xx; orderCancelReplaceReq.OrigClOrdID = xx2; bRet = Session.SendToTarget(orderCancelReplaceReq, _session.SessionID); if (!bRet) { logger.Info("erro"); break; } if (0 != delay) { Thread.Sleep(delay); } ini++; oriini++; //System.Windows.Forms.Application.DoEvents(); } logger.Info("=====================================> FIM ALTERAR ORDEM========> Qtd: " + times); } else { bRet = Session.SendToTarget(orderCancelReplaceReq, _session.SessionID); } return(bRet); }
private void CancelOrder(string id) { if (id != null) { if (ordersAll.ContainsKey(id)) { OrigClOrdID orig = new OrigClOrdID(id); OrderInfo info = (OrderInfo)ordersAll[id]; ClOrdID clordid = new ClOrdID(GetNextID()); Symbol symbol=info.Order .getSymbol (); QuickFix.Side side = info.Order.getSide(); TransactTime time = new TransactTime(); QuickFix42.OrderCancelRequest cxl = new OrderCancelRequest(orig ,clordid ,symbol ,side,time); _quickFixWrapper.Send(cxl); } } }