public void SendPrevQuotedOrder(string strSymbol, double dLots, char chSide, string strQuoteID) { try { if (m_SessionID == null) { return; } string strCIOrdID = "KYO" + DateTime.UtcNow.ToString("yyyyMMddHHmmssffff"); QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle( new ClOrdID(strCIOrdID), new Symbol(strSymbol), new Side(chSide), new TransactTime(DateTime.UtcNow), new OrdType(OrdType.PREVIOUSLY_QUOTED)); newOrderSingle.Set(new HandlInst(HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE_NO_BROKER_INTERVENTION)); newOrderSingle.Set(new OrderQty(Convert.ToDecimal(dLots * Math.Pow(10, 5)))); newOrderSingle.Set(new TimeInForce(TimeInForce.IMMEDIATE_OR_CANCEL)); newOrderSingle.Set(new QuoteID(strQuoteID)); Session.SendToTarget(newOrderSingle, m_SessionID); Logger.Instance().Log($"REQUEST (SendPreviouslyQuotedOrder) => Symbol: {strSymbol}, Lots: {dLots}, Type: {new Side(chSide)}, QuoteID: {strQuoteID}"); } catch (Exception ex) { Logger.Instance().LogToFile(ex.ToString()); } }
public static QuickFix.FIX44.OrderCancelReplaceRequest OrderCancelReplaceRequest( Dictionary <int, string> customFields, QuickFix.FIX44.NewOrderSingle nos, int newQty, decimal newPrice) { QuickFix.FIX44.OrderCancelReplaceRequest ocrq = new QuickFix.FIX44.OrderCancelReplaceRequest( new QuickFix.Fields.OrigClOrdID(nos.ClOrdID.Obj), GenerateClOrdID(), nos.Symbol, nos.Side, new QuickFix.Fields.TransactTime(DateTime.Now), nos.OrdType); ocrq.HandlInst = new QuickFix.Fields.HandlInst(QuickFix.Fields.HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE); ocrq.OrderQty = new QuickFix.Fields.OrderQty(newQty); if (nos.OrdType.Obj != QuickFix.Fields.OrdType.MARKET) { ocrq.Price = new QuickFix.Fields.Price(newPrice); } // other fields to relay ocrq.TimeInForce = nos.TimeInForce; // add custom fields foreach (KeyValuePair <int, string> p in customFields) { ocrq.SetField(new QuickFix.Fields.StringField(p.Key, p.Value)); } return(ocrq); }
/// <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.FIX44.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.FIX44.NewOrderSingle nos = new QuickFix.FIX44.NewOrderSingle( fClOrdID, 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 LimitBuy() { UnitTestContext context = new UnitTestContext(); context.Login(); OrderViewModel vm = new OrderViewModel(context.App, new FIXApplication.NullFixStrategy()); vm.OrderType = FIXApplication.Enums.OrderType.Limit; vm.Symbol = "LIM"; vm.OrderQtyString = "9"; vm.LimitPriceString = "3.45"; vm.SendBuyCommand.Execute(null); // messaging of sent order Assert.AreEqual(1, context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType].Count); QuickFix.FIX44.NewOrderSingle msg = context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType][0] as QuickFix.FIX44.NewOrderSingle; Assert.AreEqual("LIM", msg.Symbol.Obj); Assert.AreEqual(9, msg.OrderQty.Obj); Assert.AreEqual(3.45m, msg.Price.Obj); Assert.AreEqual(QuickFix.Fields.OrdType.LIMIT, msg.OrdType.Obj); Assert.AreEqual(QuickFix.Fields.Side.BUY, msg.Side.Obj); // what's in the grid Assert.AreEqual(1, vm.Orders.Count); OrderRecord o = vm.Orders.First(); Assert.AreEqual("LIM", o.Symbol); Assert.AreEqual(3.45m, o.Price); Assert.AreEqual("Limit", o.OrdType); Assert.AreEqual("Buy", o.Side); }
public void DefaultBuyOrder() { UnitTestContext context = new UnitTestContext(); context.Login(); OrderViewModel vm = new OrderViewModel(context.App, new FIXApplication.NullFixStrategy()); vm.SendBuyCommand.Execute(null); // messaging of sent order Assert.AreEqual(1, context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType].Count); QuickFix.FIX44.NewOrderSingle msg = context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType][0] as QuickFix.FIX44.NewOrderSingle; Assert.AreEqual("IBM", msg.Symbol.Obj); Assert.AreEqual(5, msg.OrderQty.Obj); Assert.AreEqual(QuickFix.Fields.OrdType.MARKET, msg.OrdType.Obj); Assert.AreEqual(QuickFix.Fields.Side.BUY, msg.Side.Obj); // what's in the grid Assert.AreEqual(1, vm.Orders.Count); OrderRecord o = vm.Orders.First(); Assert.AreEqual("IBM", o.Symbol); Assert.AreEqual(-1, o.Price); Assert.AreEqual("Market", o.OrdType); Assert.AreEqual("Buy", o.Side); }
public void OnMessage(QuickFix.FIX44.NewOrderSingle n, SessionID s) { Symbol symbol = n.Symbol; Side side = n.Side; OrdType ordType = n.OrdType; OrderQty orderQty = n.OrderQty; Price price = new Price(DEFAULT_MARKET_PRICE); ClOrdID clOrdID = n.ClOrdID; switch (ordType.getValue()) { case OrdType.LIMIT: price = n.Price; if (price.Obj == 0) { throw new IncorrectTagValue(price.Tag); } break; case OrdType.MARKET: break; default: throw new IncorrectTagValue(ordType.Tag); } QuickFix.FIX44.ExecutionReport exReport = new QuickFix.FIX44.ExecutionReport( new OrderID(GenOrderID()), new ExecID(GenExecID()), new ExecType(ExecType.FILL), new OrdStatus(OrdStatus.FILLED), symbol, //shouldn't be here? side, new LeavesQty(0), new CumQty(orderQty.getValue()), new AvgPx(price.getValue())); exReport.Set(clOrdID); exReport.Set(symbol); exReport.Set(orderQty); exReport.Set(new LastQty(orderQty.getValue())); exReport.Set(new LastPx(price.getValue())); if (n.IsSetAccount()) { exReport.SetField(n.Account); } try { Session.SendToTarget(exReport, s); } catch (SessionNotFound ex) { Console.WriteLine("==session not found exception!=="); Console.WriteLine(ex.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
private void SendOrder(Side side) { try { Trace.WriteLine(String.Format("Send New Order: Type={0} Side={1} Symbol=[{2}] Qty=[{3}] LimitPrice=[{4}] TIF={5}", this.OrderType.ToString(), side.ToString(), this.Symbol, this.OrderQtyString, this.LimitPriceString, this.TimeInForce.ToString())); Dictionary <int, string> customFieldsDict = new Dictionary <int, string>(); foreach (CustomFieldRecord cfr in this.CustomFields) { customFieldsDict[cfr.Tag] = cfr.Value; } int orderQty = int.Parse(this.OrderQtyString); decimal limitPrice = decimal.Parse(this.LimitPriceString); QuickFix.FIX44.NewOrderSingle nos = MessageCreator44.NewOrderSingle( customFieldsDict, this.OrderType, side, this.Symbol, orderQty, this.TimeInForce, limitPrice); OrderRecord r = new OrderRecord(nos); lock (_ordersLock) { Orders.Add(r); } _qfapp.Send(nos); } catch (Exception e) { Trace.WriteLine("Failed to send order\n" + e.ToString()); } }
private QuickFix.FIX44.NewOrderSingle QueryNewOrderSingle44() { QuickFix.Fields.OrdType ordType = null; QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle( QueryClOrdID(), QuerySymbol(), QuerySide(), new TransactTime(DateTime.Now), ordType = QueryOrdType()); newOrderSingle.Set(new HandlInst('1')); newOrderSingle.Set(QueryOrderQty()); newOrderSingle.Set(QueryTimeInForce()); if (ordType.getValue() == OrdType.LIMIT || ordType.getValue() == OrdType.STOP_LIMIT) { newOrderSingle.Set(QueryPrice()); } if (ordType.getValue() == OrdType.STOP || ordType.getValue() == OrdType.STOP_LIMIT) { newOrderSingle.Set(QueryStopPx()); } return(newOrderSingle); }
public QuickFix.FIX44.NewOrderSingle createOrder(long orderQty, Side side, string symbol = "MFM") { QuickFix.FIX44.NewOrderSingle order = new QuickFix.FIX44.NewOrderSingle(); order.ClOrdID = new ClOrdID(symbol + DateTime.Now.TimeOfDay); order.TransactTime = new TransactTime(DateTime.Now, true); order.Symbol = new Symbol(symbol); order.OrderQty = new OrderQty(orderQty); order.OrdType = new OrdType(OrdType.MARKET); order.Side = side; return(order); }
/// <summary> /// Translate FIX44 NewOrderSingle message to OrderData /// </summary> /// <param name="n">The message</param> /// <returns>The order data</returns> /// <exception cref="QuickFix.IncorrectTagValue"></exception> public static OrderData Translate(QuickFix.FIX44.NewOrderSingle n) { ValidateIsSupportedOrderType(n.OrdType); return(TranslateOrderImpl(n.Symbol, n.Side, n.OrdType, n.OrderQty, n.Price, n.ClOrdID, n.IsSetAccount() ? n.Account : null)); }
private void QueryEnterOrder() { Console.WriteLine("\nNewOrderSingle"); QuickFix.FIX44.NewOrderSingle m = QueryNewOrderSingle44(); if (m != null && QueryConfirm("Send order")) { m.Header.GetString(Tags.BeginString); SendMessage(m); } }
/// <summary> /// Create FIX request for new limit order /// </summary> /// <param name="vol"></param> /// <param name="price"></param> /// <param name="side"></param> /// <returns></returns> public static Message CreateNewOrderRequest(double vol, double price, char side, char type) { QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle(); newOrderSingleRequest.Set(new Account(AccountUtil.APIKey + "," + AccountUtil.SecretKey)); newOrderSingleRequest.Set(new ClOrdID(GetFreeID)); newOrderSingleRequest.Set(new OrderQty(new decimal(vol))); newOrderSingleRequest.Set(new OrdType(type)); newOrderSingleRequest.Set(new Price(new decimal(price))); newOrderSingleRequest.Set(new Side(side)); newOrderSingleRequest.Set(TradeSymbol); newOrderSingleRequest.Set(new TransactTime(DateTime.Now)); return(newOrderSingleRequest); }
private QuickFix.FIX44.NewOrderSingle QueryNewOrderSingle44() { QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle(); newOrderSingle.ClOrdID = new ClOrdID(DateTime.Now.Millisecond.ToString()); var noContraBrokersGroup = new QuickFix.FIX44.ExecutionReport.NoContraBrokersGroup(); noContraBrokersGroup.Set(QueryPool()); newOrderSingle.AddGroup(noContraBrokersGroup); newOrderSingle.Symbol = QuerySymbol(); newOrderSingle.Side = QuerySide(); newOrderSingle.OrdType = new OrdType(OrdType.MARKET); newOrderSingle.Set(QueryOrderQty()); newOrderSingle.Set(new TimeInForce(TimeInForce.FILL_OR_KILL)); return(newOrderSingle); }
private void QueryEnterOrder() { Console.WriteLine("\nNewOrderSingle"); QuickFix.FIX44.NewOrderSingle m = QueryNewOrderSingle44(); if (m != null && QueryConfirm("Send order")) { m.Header.GetField(Tags.BeginString); var transactTime = DateTime.UtcNow; this._orderClientTimestamp.Add(m.ClOrdID.getValue(), transactTime); m.TransactTime = new TransactTime(transactTime); SendMessage(m, ".OD"); } }
public static Message CreateOrderBookRequest(decimal price, char side, bool open) { QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle(); newOrderSingleRequest.Set(AccountUtil.Account); newOrderSingleRequest.Set(new ClOrdID("111")); newOrderSingleRequest.Set(new OrderQty(1)); newOrderSingleRequest.Set(new OrdType('2')); newOrderSingleRequest.Set(new Price(price)); newOrderSingleRequest.Set(new Side(side)); newOrderSingleRequest.Set(new PositionEffect(open ? 'O' : 'C')); newOrderSingleRequest.Set(new Symbol("quarter")); newOrderSingleRequest.Set(new Currency("btc_usd")); newOrderSingleRequest.Set(new SecurityType(SecurityType.FUTURE)); newOrderSingleRequest.Set(new MarginRatio(20)); newOrderSingleRequest.Set(new TransactTime()); return(newOrderSingleRequest); }
public void OnMessage(QuickFix.FIX44.NewOrderSingle n, SessionID s) { Symbol symbol = n.Symbol; Side side = n.Side; OrdType ordType = n.OrdType; OrderQty orderQty = n.OrderQty; Price price = new Price(DEFAULT_MARKET_PRICE); ClOrdID clOrdID = n.ClOrdID; switch (ordType.getValue()) { case OrdType.LIMIT: price = n.Price; if (price.Obj == 0) { throw new IncorrectTagValue(price.Tag); } break; case OrdType.MARKET: break; default: throw new IncorrectTagValue(ordType.Tag); } // Send Status New SendExecution(s, OrdStatus.NEW, ExecType.NEW, n, n.OrderQty.getValue(), 0, 0, 0, 0); Thread.Sleep(1000); // Send Status Partially Filled decimal filledQty = Math.Abs(Math.Round(n.OrderQty.getValue() / 4, 2)); decimal cumQty = filledQty; SendExecution(s, OrdStatus.PARTIALLY_FILLED, ExecType.PARTIAL_FILL, n, filledQty, filledQty, price.getValue(), filledQty, price.getValue()); Thread.Sleep(1000); // Send Status Partially Filled filledQty = Math.Abs(Math.Round(n.OrderQty.getValue() / 4, 2)); cumQty += filledQty; SendExecution(s, OrdStatus.PARTIALLY_FILLED, ExecType.PARTIAL_FILL, n, n.OrderQty.getValue() - cumQty, cumQty, price.getValue(), filledQty, price.getValue()); Thread.Sleep(1000); // Send Status Fully Filled filledQty = n.OrderQty.getValue() - cumQty; cumQty += filledQty; SendExecution(s, OrdStatus.FILLED, ExecType.FILL, n, 0, cumQty, price.getValue(), filledQty, price.getValue()); }
public void OnMessage(QuickFix.FIX44.NewOrderSingle ord, SessionID sessionID) { Symbol symbol = ord.Symbol; Side side = ord.Side; OrdType ordType = ord.OrdType; OrderQty orderQty = ord.OrderQty; Price price = new Price(10); //q isso? ClOrdID clOrdID = ord.ClOrdID; QuickFix.FIX44.ExecutionReport exReport = new QuickFix.FIX44.ExecutionReport( new OrderID(GenOrderID()), new ExecID(GenExecID()), new ExecType(ExecType.FILL), new OrdStatus(OrdStatus.FILLED), symbol, side, new LeavesQty(0), new CumQty(orderQty.getValue()), new AvgPx(price.getValue()) ); exReport.ClOrdID = clOrdID; exReport.Symbol = symbol; exReport.OrderQty = orderQty; exReport.LastQty = new LastQty(orderQty.getValue()); exReport.LastPx = new LastPx(price.getValue()); if (ord.IsSetAccount()) { exReport.Account = ord.Account; } try { Session.SendToTarget(exReport, sessionID); } catch (SessionNotFound ex) { Console.WriteLine("==session not found exception!=="); Console.WriteLine(ex.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public OrderRecord(QuickFix.FIX44.NewOrderSingle nos) { OriginalNOS = nos; decimal price = -1; if (nos.OrdType.Obj == QuickFix.Fields.OrdType.LIMIT && nos.IsSetPrice()) { price = nos.Price.Obj; } ClOrdID = nos.ClOrdID.Obj; Symbol = nos.Symbol.Obj; Side = FIXApplication.FixEnumTranslator.Translate(nos.Side); OrdType = FIXApplication.FixEnumTranslator.Translate(nos.OrdType); Price = price; Status = "New"; }
public OrderRecord(QuickFix.FIX44.NewOrderSingle nos) { OriginalNos = nos; decimal price = -1; if (nos.OrdType.Obj == QuickFix.Fields.OrdType.LIMIT && nos.IsSetPrice()) { price = nos.Price.Obj; } ClOrdID = nos.ClOrdID.Obj; Symbol = nos.Symbol.Obj; Side = Services.TranslateFixFields.Translate(nos.Side); OrdType = Services.TranslateFixFields.Translate(nos.OrdType); Price = price; Quantity = nos.OrderQty.Obj; Status = OrderStatus.New; }
private void AddOrder(string exchange, string orderId, string symbol, bool isBuy, decimal amount, decimal price, ESymbolSource symbolSource) { var newOrder = new QuickFix.FIX44.NewOrderSingle(); newOrder.ClOrdID = new QuickFix.Fields.ClOrdID(orderId); //newOrder.ExecInst newOrder.ExDestination = new QuickFix.Fields.ExDestination(exchange); newOrder.Symbol = new QuickFix.Fields.Symbol(symbol); newOrder.SecurityID = new QuickFix.Fields.SecurityID(symbol); newOrder.SecurityIDSource = new QuickFix.Fields.SecurityIDSource(symbolSource.ToString("D")); newOrder.SecurityExchange = new QuickFix.Fields.SecurityExchange(exchange); newOrder.Side = new QuickFix.Fields.Side(isBuy ? '1' : '2'); //BUY : SELL newOrder.TransactTime = new QuickFix.Fields.TransactTime(DateTime.Now.ToUniversalTime()); newOrder.OrderQty = new QuickFix.Fields.OrderQty(amount); newOrder.OrdType = new QuickFix.Fields.OrdType('2'); //LIMIT newOrder.Price = new QuickFix.Fields.Price(price); newOrder.TimeInForce = new QuickFix.Fields.TimeInForce('1'); //GTC newOrder.ClOrdLinkID = new QuickFix.Fields.ClOrdLinkID(orderId); //newOrder.ExpireTime //GTD SendMessage(newOrder); }
public OrderRecord(QuickFix.FIX44.ExecutionReport msg) { // If creating from an ExecutionReport then it's from an incoming message // and therefore we shouldn't need the NOS details that don't exist anyway OriginalNos = null; ClOrdID = msg.ClOrdID.Obj; OrderID = msg.OrderID.Obj; Symbol = msg.Symbol.Obj; Side = Services.TranslateFixFields.Translate(msg.Side); //OrdType = FIXApplication.FixEnumTranslator.Translate(msg.OrdType); OrdType = OrderType.Limit; // Not specified in ExecutionReport //Price = msg.Price.Obj; // Not specified in ExecutionReport Price = msg.AvgPx.Obj; // TODO We may need to be smarter, updates should use LastPx but what about new orders? Quantity = msg.LeavesQty.Obj; Status = Services.TranslateFixFields.Translate(msg.OrdStatus); if (Status == OrderStatus.Rejected && msg.IsSetOrdRejReason()) { RejectReason = msg.OrdRejReason.ToString(); } }
/** * new Order request * @throws IOException */ public static Message createOrderBookRequest() { //this new Order request type (D) QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle(); //In there you should Set your partner and securitykey must contain a comma newOrderSingleRequest.Set(new Account(AccountUtil.apiKey+","+AccountUtil.sercretKey)); //this is your unique id you can fill any string newOrderSingleRequest.Set(new ClOrdID("123")); //the amount you want to operate (buy or sell) newOrderSingleRequest.Set(new OrderQty(1)); //There is operate type. "1" means marker price order,"2" means limit price order newOrderSingleRequest.Set(new OrdType('1')); newOrderSingleRequest.Set(new Price(10)); //1 means buy;2 means sell newOrderSingleRequest.Set(new Side('1')); //type BTC/CNY or LTC/CNY other formart not supported newOrderSingleRequest.Set(new Symbol("LTC/CNY")); //time newOrderSingleRequest.Set(new TransactTime()); return newOrderSingleRequest; }
/** * new Order request * @throws IOException */ public static Message createOrderBookRequest() { //this new Order request type (D) QuickFix.FIX44.NewOrderSingle newOrderSingleRequest = new QuickFix.FIX44.NewOrderSingle(); //In there you should Set your partner and securitykey must contain a comma newOrderSingleRequest.Set(new Account(AccountUtil.apiKey + "," + AccountUtil.sercretKey)); //this is your unique id you can fill any string newOrderSingleRequest.Set(new ClOrdID("123")); //the amount you want to operate (buy or sell) newOrderSingleRequest.Set(new OrderQty(1)); //There is operate type. "1" means marker price order,"2" means limit price order newOrderSingleRequest.Set(new OrdType('1')); newOrderSingleRequest.Set(new Price(10)); //1 means buy;2 means sell newOrderSingleRequest.Set(new Side('1')); //type BTC/CNY or LTC/CNY other formart not supported newOrderSingleRequest.Set(new Symbol("LTC/CNY")); //time newOrderSingleRequest.Set(new TransactTime()); return(newOrderSingleRequest); }
public void SendLimitOrder(string strSymbol, double dLots, double dPrice, char chSide) { if (m_SessionID == null) { return; } string strCIOrdID = "KYO" + DateTime.UtcNow.ToString("yyyyMMddHHmmssffff"); QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle( new ClOrdID(strCIOrdID), new Symbol(strSymbol), new Side(chSide), new TransactTime(DateTime.UtcNow), new OrdType(OrdType.LIMIT)); newOrderSingle.Set(new HandlInst(HandlInst.AUTOMATED_EXECUTION_ORDER_PRIVATE_NO_BROKER_INTERVENTION)); newOrderSingle.Set(new Price(Convert.ToDecimal(dPrice))); newOrderSingle.Set(new OrderQty(Convert.ToDecimal(dLots * Math.Pow(10, 5)))); newOrderSingle.Set(new TimeInForce(TimeInForce.GOOD_TILL_CANCEL)); Session.SendToTarget(newOrderSingle, m_SessionID); Logger.Instance().Log($"REQUEST (SendLimitOrder) => Symbol: {strSymbol}, Lots: {dLots}, Price: {dPrice}, Type: {new Side(chSide)}"); }
public void SendOrder(OrderModel order) { var orderSingle = new QuickFix.FIX44.NewOrderSingle { Symbol = new Symbol(order.TickerSymbol), ClOrdID = new ClOrdID(order.ClOrderId), Side = new Side(order.Side), OrderQty = new OrderQty(order.Quantity), OrdType = new OrdType(order.Type), TimeInForce = new TimeInForce(order.TIF), Account = new Account(order.Allocation.ToString()), StopPx = new StopPx(order.StopPrice), Price = new Price(order.LimitPrice), Commission = new Commission(order.CommissionAndFees), TransactTime = new TransactTime(order.OrderDate) }; if (_session != null) { _ = _session.Send(orderSingle); } }
public void OrderUpdate() { UnitTestContext context = new UnitTestContext(); context.Login(); OrderViewModel vm = new OrderViewModel(context.App, new FIXApplication.NullFixStrategy()); // send an order with default arguments vm.SendBuyCommand.Execute(null); Assert.AreEqual(1, context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType].Count); QuickFix.FIX44.NewOrderSingle msg = context.Session.MsgLookup[QuickFix.FIX44.NewOrderSingle.MsgType][0] as QuickFix.FIX44.NewOrderSingle; // verify grid content (redundant with earlier tests, but whatever) Assert.AreEqual(1, vm.Orders.Count); OrderRecord or = vm.Orders.First(); Assert.AreEqual("IBM", or.Symbol); Assert.AreEqual(-1, or.Price); Assert.AreEqual("Market", or.OrdType); Assert.AreEqual("Buy", or.Side); Assert.AreEqual("New", or.Status); // send an execution report that will update the grid QuickFix.FIX44.ExecutionReport r = CreateExReport( or.ClOrdID, "foo", QuickFix.Fields.ExecTransType.NEW, QuickFix.Fields.ExecType.FILL, QuickFix.Fields.OrdStatus.FILLED, "IBM", QuickFix.Fields.Side.BUY, 0, 0, 0); r.LastPx = new QuickFix.Fields.LastPx(999m); r.ClOrdID = new QuickFix.Fields.ClOrdID(msg.ClOrdID.Obj); context.App.FromApp(r, context.Session.SessionID); // check that it got changed Assert.AreEqual(1, vm.Orders.Count); Assert.AreEqual(999, or.Price); Assert.AreEqual("Filled", or.Status); }
private void SendExecution(SessionID s, char ordStatus, char execType, QuickFix.FIX44.NewOrderSingle n, decimal leavesQty, decimal cumQty, decimal avgPx, decimal lastQty, decimal lastPrice) { QuickFix.FIX44.ExecutionReport exReport = new QuickFix.FIX44.ExecutionReport( new OrderID(GenOrderID()), new ExecID(GenExecID()), new ExecType(execType), new OrdStatus(ordStatus), n.Symbol, //shouldn't be here? n.Side, new LeavesQty(leavesQty), new CumQty(cumQty), new AvgPx(avgPx)); exReport.ClOrdID = new ClOrdID(n.ClOrdID.getValue()); exReport.Set(new LastQty(lastQty)); exReport.Set(new LastPx(lastPrice)); if (n.IsSetAccount()) { exReport.SetField(n.Account); } try { Session.SendToTarget(exReport, s); } catch (SessionNotFound ex) { Console.WriteLine("==session not found exception!=="); Console.WriteLine(ex.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public QuickFix.Message CreateNewOrderSingle(string clOrderId, string symbol, Fwk.Main.Common.Enums.Side?side, Fwk.Main.Common.Enums.OrdType?ordType, Fwk.Main.Common.Enums.SettlType?settlType, Fwk.Main.Common.Enums.TimeInForce?timeInForce, DateTime?effectiveTime, double?ordQty, double?price, double?stopPx, string account, string exchange) { QuickFix.FIX44.NewOrderSingle nos = new QuickFix.FIX44.NewOrderSingle(); if (!string.IsNullOrEmpty(account)) { nos.SetField(new Account(account)); } if (!string.IsNullOrEmpty(clOrderId)) { nos.SetField(new ClOrdID(clOrderId)); } if (!string.IsNullOrEmpty(exchange)) { nos.SetField(new SecurityExchange(exchange)); } if (effectiveTime != null) { nos.SetField(new TransactTime(effectiveTime.Value)); } if (!string.IsNullOrEmpty(symbol)) { nos.SetField(new Symbol(symbol)); } if (ordQty != null) { nos.SetField(new OrderQty(Convert.ToDecimal(ordQty.Value))); } if (ordType != null) { nos.SetField(new QuickFix.Fields.OrdType(Convert.ToChar(ordType.Value))); } if (price != null) { nos.SetField(new Price(Convert.ToDecimal(price.Value))); } if (stopPx != null) { nos.SetField(new StopPx(Convert.ToDecimal(stopPx.Value))); } if (side != null) { nos.SetField(new QuickFix.Fields.Side(Convert.ToChar(side.Value))); } if (timeInForce.HasValue) { nos.SetField(new QuickFix.Fields.TimeInForce(Convert.ToChar(timeInForce.Value))); } return(nos); }
public void sendOrderRequest(QuickFix.FIX44.NewOrderSingle order) { logger.Info("Order Details: " + order.ToString()); Session.SendToTarget(order, session.SessionID); }
private void TransmitNewOrderSingle() { QuickFix.FIX44.NewOrderSingle msg = new QuickFix.FIX44.NewOrderSingle( new ClOrdID("woooot"), new Symbol("IBM"), new Side(Side.BUY), new TransactTime(DateTime.Now), new OrdType(OrdType.MARKET)); msg.Set(new OrderQty(99)); SendMessage(msg); }
private QuickFix.FIX44.NewOrderSingle QueryNewOrderSingle44() { QuickFix.Fields.OrdType ordType = null; QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle( QueryClOrdID(), QuerySymbol(), QuerySide(), new TransactTime(DateTime.Now), ordType = QueryOrdType()); newOrderSingle.Set(new HandlInst('1')); newOrderSingle.Set(QueryOrderQty()); newOrderSingle.Set(QueryTimeInForce()); if (ordType.getValue() == OrdType.LIMIT || ordType.getValue() == OrdType.STOP_LIMIT) newOrderSingle.Set(QueryPrice()); if (ordType.getValue() == OrdType.STOP || ordType.getValue() == OrdType.STOP_LIMIT) newOrderSingle.Set(QueryStopPx()); return newOrderSingle; }
public void OnMessage(QuickFix.FIX44.NewOrderSingle nos, SessionID sessionID) { ProcessNOS(nos, sessionID); }
public void ProcessOrderCancelReplaceRequest(QuickFix.FIX44.NewOrderSingle nos, QuickFix.FIX44.OrderCancelReplaceRequest msg) { }