public void OnCancelRejected(MbtOpenOrder order) { if (debug) { orderLog.Debug("OnCancelRejected( " + order.OrderNumber + " )"); } }
public void OnExecute(MbtOpenOrder order) { m_orders[order.OrderNumber] = order; int elapsed = Environment.TickCount - orderStart; orderLog.Notice("OnExecute( " + order.OrderNumber + " ), " + elapsed + "ms"); }
public void OnReplacePlaced(MbtOpenOrder order) { if (debug) { orderLog.Debug("OnReplacePlaced( " + order.OrderNumber + " )"); } }
public void OnSubmit(MbtOpenOrder order) { m_orders[order.OrderNumber] = order; int elapsed = Environment.TickCount - orderStart; orderLog.Notice("OnSubmit( " + order.OrderNumber + " ) " + elapsed + "ms"); orderSubmitted = false; }
void OnRemove(MbtOpenOrder order) { for (int i = 0; i < readers.Count; i++) { if (readers[i].Symbol.Symbol == order.Symbol) { readers[i].OnRemove(order); } } }
void OnCancelRejected(MbtOpenOrder order) { for (int i = 0; i < readers.Count; i++) { if (readers[i].Symbol.Symbol == order.Symbol) { readers[i].OnCancelRejected(order); } } }
void _orderClient_OnExecute(MbtOpenOrder pOrd) { if (pOrd.Acknowledged == false) { return; } //PlaceOrderOperation operation; //lock (this) //{ // // Operations stored in stub by order token / Id. // operation = (PlaceOrderOperation)_operationStub.GetOperationById(pOrd.Token); //} OrderInfo?orderInfo = ConvertToOrderInfo(pOrd); if (orderInfo.HasValue == false) { SystemMonitor.Warning("Failed to convert order for order [" + pOrd.Token + "]."); return; } TryCompleteOrderOperation(pOrd.Token, true, orderInfo); //if (operation == null) //{ // SystemMonitor.Error("Operation with this ID [" + pOrd.Token + "] not found."); //} //else //{ // //string x = orderInfo.Value.OpenPrice.ToString(); // if (orderInfo.HasValue == false) // { // SystemMonitor.Warning("Failed to convert order for order [" + pOrd.Token + "]."); // operation.Complete("Failed to convert order type. Operation failed.", null); // return; // } // operation.Complete(string.Empty, orderInfo.Value); //} if (_accountInfo.HasValue == false) { SystemMonitor.Error("Order update received, but account not established."); } else { _adapter.OrderExecutionSourceStub.UpdateOrderInfo(_accountInfo.Value, Order.UpdateTypeEnum.Executed, orderInfo.Value); } }
string DisplayOrder(MbtOpenOrder order) { // TickConsole.Notice("Account: Old Order: " + Display(order)); string retVal = ""; retVal += "BuySell=" + (order.BuySell == MBConst.VALUE_BUY?"Buy":"Sell"); retVal += ",Symbol=" + order.Symbol; retVal += ",Quantity=" + order.Quantity; retVal += ",Price=" + order.Price; retVal += ",OrderType=" + order.OrderType; retVal += ",OrderNumber=" + order.OrderNumber; retVal += ",SharesFilled=" + order.SharesFilled; return(retVal); }
void m_OrderClient_OnSubmit(MbtOpenOrder pOrd) { OrderImpl o = new OrderImpl(pOrd.Symbol, pOrd.Quantity); o.side = pOrd.BuySell == MBConst.VALUE_BUY; o.price = (decimal)pOrd.Price; o.stopp = (decimal)pOrd.StopLimit; o.TIF = pOrd.TimeInForce == MBConst.VALUE_DAY ? "DAY" : "GTC"; o.time = Util.ToTLTime(pOrd.UTCDateTime); o.date = Util.ToTLDate(pOrd.UTCDateTime); o.sec = pOrd.UTCDateTime.Second; o.trail = (decimal)pOrd.TrailingOffset; //o.ex = pOrd.Route; o.id = Convert.ToUInt32(pOrd.OrderNumber); tl.newOrder(o); }
public void OnRemove(MbtOpenOrder order) { int elapsed = Environment.TickCount - orderStart; orderLog.Notice("OnRemove( " + order.OrderNumber + " ), " + elapsed + "ms, position: " + Display(m_position)); if (followupSignal != 0) { orderLog.Notice("Followup Signal = " + followupSignal); InternalSignal(followupSignal); followupSignal = 0; } else { orderLog.Notice("Account Status: " + Display(m_account)); } m_orders.Remove(order.OrderNumber); }
void _orderClient_OnAcknowledge(MbtOpenOrder pOrd) { if (pOrd.Acknowledged == false) { return; } OrderInfo?orderInfo = ConvertToOrderInfo(pOrd); //if (orderInfo.HasValue && orderInfo.Value.State == OrderStateEnum.Canceled) //{// There might be a pending operation on this order. // TryCompleteOrderOperation(pOrd.Token, false, orderInfo); //} if (_accountInfo.HasValue == false) { SystemMonitor.Error("Order update received, but account not established."); } else { _adapter.OrderExecutionSourceStub.UpdateOrderInfo(_accountInfo.Value, Order.UpdateTypeEnum.Submitted, orderInfo.Value); } }
void _orderClient_OnExecute(MbtOpenOrder pOrd) { if (pOrd.Acknowledged == false) { return; } //PlaceOrderOperation operation; //lock (this) //{ // // Operations stored in stub by order token / Id. // operation = (PlaceOrderOperation)_operationStub.GetOperationById(pOrd.Token); //} OrderInfo? orderInfo = ConvertToOrderInfo(pOrd); if (orderInfo.HasValue == false) { SystemMonitor.Warning("Failed to convert order for order [" + pOrd.Token + "]."); return; } TryCompleteOrderOperation(pOrd.Token, true, orderInfo); //if (operation == null) //{ // SystemMonitor.Error("Operation with this ID [" + pOrd.Token + "] not found."); //} //else //{ // //string x = orderInfo.Value.OpenPrice.ToString(); // if (orderInfo.HasValue == false) // { // SystemMonitor.Warning("Failed to convert order for order [" + pOrd.Token + "]."); // operation.Complete("Failed to convert order type. Operation failed.", null); // return; // } // operation.Complete(string.Empty, orderInfo.Value); //} if (_accountInfo.HasValue == false) { SystemMonitor.Error("Order update received, but account not established."); } else { _adapter.OrderExecutionSourceStub.UpdateOrderInfo(_accountInfo.Value, Order.UpdateTypeEnum.Executed, orderInfo.Value); } }
void m_OrderClient_OnSubmit(MbtOpenOrder pOrd) { OrderImpl o = new OrderImpl(pOrd.Symbol,pOrd.Quantity); o.side = pOrd.BuySell == MBConst.VALUE_BUY; o.price = (decimal)pOrd.Price; o.stopp = (decimal)pOrd.StopLimit; o.TIF = pOrd.TimeInForce == MBConst.VALUE_DAY ? "DAY" : "GTC"; o.time = Util.ToTLTime(pOrd.UTCDateTime); o.date = Util.ToTLDate(pOrd.UTCDateTime); o.sec = pOrd.UTCDateTime.Second; o.trail = (decimal)pOrd.TrailingOffset; //o.ex = pOrd.Route; o.id = Convert.ToUInt32(pOrd.OrderNumber); tl.newOrder(o); }
void _orderClient_OnAcknowledge(MbtOpenOrder pOrd) { if (pOrd.Acknowledged == false) { return; } OrderInfo? orderInfo = ConvertToOrderInfo(pOrd); //if (orderInfo.HasValue && orderInfo.Value.State == OrderStateEnum.Canceled) //{// There might be a pending operation on this order. // TryCompleteOrderOperation(pOrd.Token, false, orderInfo); //} if (_accountInfo.HasValue == false) { SystemMonitor.Error("Order update received, but account not established."); } else { _adapter.OrderExecutionSourceStub.UpdateOrderInfo(_accountInfo.Value, Order.UpdateTypeEnum.Submitted, orderInfo.Value); } }
void m_OrderClient_OnRemove(MbtOpenOrder pOrd) { uint num = Convert.ToUInt32(pOrd.OrderNumber); tl.newOrderCancel((long)num); }
/// <summary> /// Convert real order to order orderInfo. /// </summary> /// <param name="pOrd"></param> /// <returns></returns> OrderInfo? ConvertToOrderInfo(MbtOpenOrder pOrd) { OrderInfo result = new OrderInfo(pOrd.Token); result.Tag = pOrd.OrderNumber; result.OpenPrice = (decimal)pOrd.Price; bool replaceable = pOrd.Replaceable; string dateTimeString = pOrd.Date + " " + pOrd.Time; DateTime dateTime; if (DateTime.TryParse(dateTimeString, out dateTime) == false) { SystemMonitor.Error("Failed to parse order date time [" + dateTimeString + "]."); dateTime = DateTime.Now; } string currentEvent = pOrd.CurrentEvent.ToLower(); if (currentEvent.Contains("live")) { result.State = OrderStateEnum.Submitted; } else if (currentEvent.Contains("executed")) { result.State = OrderStateEnum.Executed; } else if (currentEvent.Contains("suspended")) { result.State = OrderStateEnum.Suspended; } else { if (pOrd.Acknowledged) { result.State = OrderStateEnum.Submitted; } } if (result.State == OrderStateEnum.Unknown) { } result.OpenTime = dateTime; result.StopLoss = (decimal)pOrd.StopLimit; result.TakeProfit = (decimal)pOrd.StopLimit; Symbol? symbol = _adapter.GetSymbolByName(pOrd.Symbol, false); if (symbol.HasValue == false) {// Start usage for this symbol. return null; } result.Symbol = symbol.Value; result.Type = ConvertFromMBTOrderType(pOrd.OrderType, pOrd.BuySell); if (result.Type == OrderTypeEnum.UNKNOWN) { SystemMonitor.OperationWarning("Failed to recognize order type [" + pOrd.OrderType.ToString() + "]."); //return null; } result.Volume = pOrd.Quantity; return result; }
void m_OrderClient_OnAcknowledge(MbtOpenOrder pOrd) { debug(String.Format("order acknowledge:{0}", pOrd.OrderNumber)); }
void m_OrderClient_OnRemove(MbtOpenOrder pOrd) { debug("m_OrderClient_OnRemove: " + pOrd.OrderNumber); /* //order has been completely filled so do cleanup string bid = pOrd.OrderNumber; debug(String.Format("Cleaning up orders for {0}", bid)); //clean up the orders list if( orders.ContainsKey(bid) ) orders.Remove(bid); else debug(String.Format("order {0} did not exist in orders", bid)); //clean up mappings long tlid = 0; if( broker2tl.TryGetValue(bid, out tlid ) ) { //got the tradelink id so clear the broker mapping debug(String.Format("Cleaning up broker2tl mapping {0} - {1}", bid, tlid)); broker2tl.Remove(bid); //then clear the tradelink mapping debug(String.Format("cleaning up tl2broker mapping {0} - {1}", tlid, bid)); if( tl2broker.ContainsKey(tlid ) ) tl2broker.Remove(tlid); else debug(String.Format("Order {0} did not have a matching tlid {1} to remove.", bid, tlid)); } */ }
void m_OrderClient_OnReplaceRejected(MbtOpenOrder pOrd) { debug("m_OrderClient_OnReplaceRejected: " + pOrd.OrderNumber); }
void _orderClient_OnSubmit(MbtOpenOrder pOrd) { }
/// <summary> /// Store executed orders in a dictionary so we have access to info later on /// </summary> /// <param name="pOrd"></param> void m_OrderClient_OnExecute(MbtOpenOrder pOrd) { //add successfully executed orders to the orders dictionary //done in the history now //if (!orders.ContainsKey(pOrd.OrderNumber)) orders.Add(pOrd.OrderNumber, pOrd); }
void m_OrderClient_OnAcknowledge(MbtOpenOrder pOrd) { debug("m_OrderClient_OnAcknowledge: " + pOrd.OrderNumber); }
/// <summary> /// Return a descriptive string of this order /// TODO: one for history as well /// </summary> /// <param name="order"></param> /// <returns></returns> string DisplayOrder(MbtOpenOrder order) { //string orderType = ( order.OrderType == MBConst.VALUE_MARKET ) ? MBConst.TYPE_MARKET : MBConst.TYPE_STOP; string retVal = ""; retVal += "BuySell=" + (order.BuySell == MBConst.VALUE_BUY ? "Buy" : (order.BuySell == MBConst.VALUE_SELL ? "Sell" : "undefined BuySell: " + order.BuySell)); retVal += " Symbol=" + order.Symbol; retVal += " Quantity=" + order.Quantity; retVal += " Price=" + order.Price; retVal += " OrderType=" + order.OrderType; //compare with OrderType values retVal += " OrderNumber=" + order.OrderNumber; retVal += " Token=" + order.Token; retVal += " SharesFilled=" + order.SharesFilled; return retVal; }
void m_OrderClient_OnCancelPlaced(MbtOpenOrder pOrd) { debug(String.Format("Order cancel placed for {0}", pOrd.OrderNumber)); }
void _orderClient_OnReplacePlaced(MbtOpenOrder pOrd) { }
/// <summary> /// Store submitted orders in a dictionary so we have access to info later on /// </summary> /// <param name="pOrd"></param> void m_OrderClient_OnSubmit(MbtOpenOrder pOrd) { debug("m_OrderClient_OnSubmit: " + pOrd.OrderNumber); if (!orders.ContainsKey(pOrd.OrderNumber)) orders.Add(pOrd.OrderNumber, pOrd); }
/// <summary> /// Convert an MbtOpenOrder to a TradeLink OrderImpl and check if the order token /// is mapped to an existing TradeLink order. If so, replace the token with the OrderNumber and /// update the mapping for tl2broker with the order number as well. If not generate a new order number /// </summary> /// <param name="pOrd"></param> /// <returns></returns> OrderImpl ToTradeLinkOrder(MbtOpenOrder pOrd) { //get the token string token = pOrd.Token; //get the actual broker ID number now string bid = pOrd.OrderNumber, s = ""; //check for a matching tradelink order long tlid = 0, v = 0; //first try to get the tlid by token if (!broker2tl.TryGetValue(token, out tlid)) { //ok now try to get it by broker OrderNumber if it has been processed once before. if (!broker2tl.TryGetValue(bid, out tlid)) { //this order must be initiated by MB Trading so assign a new one tlid = _idt.AssignId; debug(String.Format("No matching TradeLink ID found for token {0}, generated {1}", token, tlid)); } //save the mappings if (!broker2tl.ContainsKey(bid)) { broker2tl.Add(bid, tlid); } else { broker2tl.TryGetValue(bid, out v); debug(String.Format("WARNING! OrderNumber {0} is already mapped to {1}. Overwriting it with {2}", bid, v, tlid)); broker2tl[bid] = tlid; } if (!tl2broker.ContainsKey(tlid)) { tl2broker.Add(tlid, bid); } else { tl2broker.TryGetValue(tlid, out s); debug(String.Format("WARNING! TradeLinkID {0} is already mapped to {1}. Overwriting it with {2}", tlid, s, bid)); tl2broker[tlid] = bid; } } else { //we have a match so this order was generated by TradeLink //overwrite the Token with the OrderNumber debug(String.Format("Overwriting token {0} with OrderNumber {1} for TradeLink order ID {2}", token, bid, tlid)); tl2broker[tlid] = bid; //remove the Token mapping broker2tl.Remove(token); //and map the OrderNumber to the TradeLink ID if (!broker2tl.ContainsKey(bid)) broker2tl.Add(bid, tlid); } OrderImpl o = new OrderImpl(pOrd.Symbol, pOrd.Quantity); o.id = tlid; o.Account = pOrd.Account.Account; o.side = (pOrd.BuySell == MBConst.VALUE_BUY); o.price = (decimal)pOrd.Price; o.stopp = (decimal)pOrd.StopPrice; o.ValidInstruct = pOrd.TimeInForce == MBConst.VALUE_DAY ? OrderInstructionType.DAY : OrderInstructionType.GTC; o.time = Util.DT2FT(pOrd.UTCDateTime); o.date = Util.ToTLDate(pOrd.UTCDateTime); o.trail = (decimal)pOrd.TrailingOffset; return o; }
TradeImpl ToTradeLinkFill(MbtOpenOrder pOrd, MbtOrderHistory pHist) { //debug(String.Format("pOrd\n{0}\n\npHist\n{1}", Util.DumpObjectProperties(pOrd), Util.DumpObjectProperties(pHist))); debug(String.Format("pOrd: {0}", DisplayOrder(pOrd))); //TODO:Add hstory to this debug TradeImpl f = new TradeImpl(); f.symbol = pOrd.Symbol; f.Account = pOrd.Account.Account; //f.xprice = (pOrd.Price > 0) ? (decimal)pOrd.Price : (decimal)pOrd.StopLimit; //f.xprice = Math.Abs((decimal)pOrd.Price); f.xprice = (decimal)pHist.Price; //f.xsize = pHist.Event == "Executed" ? pHist.Quantity : pHist.SharesFilled; f.xsize = pHist.Quantity; f.side = (pOrd.BuySell == MBConst.VALUE_BUY); f.xtime = Util.DT2FT(pOrd.UTCDateTime); f.xdate = Util.ToTLDate(pOrd.UTCDateTime); long tlid = 0; if (broker2tl.TryGetValue(pOrd.OrderNumber, out tlid)) f.id = tlid; else debug(String.Format("WARNING: No order matching fill for pOrd.OrderNumber {0}", pOrd.OrderNumber)); //debug(String.Format("New fill {1}\n is valid:{0}\ndump:{2}", f.isValid, f.ToString(), Util.DumpObjectProperties(f))); debug(String.Format("New fill {1} is valid? {0}", f.isValid, f.ToString())); return f; }
void m_OrderClient_OnCancelRejected(MbtOpenOrder pOrd) { debug("m_OrderClient_OnCancelRejected: " + pOrd.OrderNumber); }
void m_OrderClient_OnCancelRejected(MbtOpenOrder pOrd) { debug(String.Format("Order Cancel REJECTED for {0}", pOrd.OrderNumber)); }
/// <summary> /// Convert real order to order orderInfo. /// </summary> /// <param name="pOrd"></param> /// <returns></returns> OrderInfo?ConvertToOrderInfo(MbtOpenOrder pOrd) { OrderInfo result = new OrderInfo(pOrd.Token); result.Tag = pOrd.OrderNumber; result.OpenPrice = (decimal)pOrd.Price; bool replaceable = pOrd.Replaceable; string dateTimeString = pOrd.Date + " " + pOrd.Time; DateTime dateTime; if (DateTime.TryParse(dateTimeString, out dateTime) == false) { SystemMonitor.Error("Failed to parse order date time [" + dateTimeString + "]."); dateTime = DateTime.Now; } string currentEvent = pOrd.CurrentEvent.ToLower(); if (currentEvent.Contains("live")) { result.State = OrderStateEnum.Submitted; } else if (currentEvent.Contains("executed")) { result.State = OrderStateEnum.Executed; } else if (currentEvent.Contains("suspended")) { result.State = OrderStateEnum.Suspended; } else { if (pOrd.Acknowledged) { result.State = OrderStateEnum.Submitted; } } if (result.State == OrderStateEnum.Unknown) { } result.OpenTime = dateTime; result.StopLoss = (decimal)pOrd.StopLimit; result.TakeProfit = (decimal)pOrd.StopLimit; Symbol?symbol = _adapter.GetSymbolByName(pOrd.Symbol, false); if (symbol.HasValue == false) {// Start usage for this symbol. return(null); } result.Symbol = symbol.Value; result.Type = ConvertFromMBTOrderType(pOrd.OrderType, pOrd.BuySell); if (result.Type == OrderTypeEnum.UNKNOWN) { SystemMonitor.OperationWarning("Failed to recognize order type [" + pOrd.OrderType.ToString() + "]."); //return null; } result.Volume = pOrd.Quantity; return(result); }
/* pmh - 9/21/12 - See note on DefaultAccount at end of document! void m_OrderClient_OnDefaultAccountChanged(MbtAccount pAcct) { debug("m_OrderClient_OnDefaultAccountChanged: " + pAcct.Account); } */ void m_OrderClient_OnExecute(MbtOpenOrder pOrd) { //add successfully executed orders to the orders dictionary //done in the history now //if (!orders.ContainsKey(pOrd.OrderNumber)) orders.Add(pOrd.OrderNumber, pOrd); debug("m_OrderClient_OnExecute: " + pOrd.OrderNumber); //pmh - go ahead and log the event anyway. }