Exemplo n.º 1
0
 void SaveHistory(MbtOrderHistory history)
 {
     if (firstHistory)
     {
         orderLog.Notice(DisplayHeader(history));
         firstHistory = false;
     }
     orderLog.Notice(DisplayValues(history));
 }
Exemplo n.º 2
0
        void _orderClient_OnHistoryAdded(MbtOrderHistory pHist)
        {
            Order.UpdateTypeEnum update;
            OrderInfo?           info = ConvertToOrderInfo(pHist, out update);

            if (info.HasValue && info.Value.State == OrderStateEnum.Canceled)
            {
                TryCompleteOrderOperation(pHist.Token, false, info);
            }

            if (info.HasValue)
            {
                this._adapter.OrderExecutionSourceStub.UpdateOrderInfo(_accountInfo.Value, update, info.Value);
            }
            else
            {
                SystemMonitor.OperationWarning("Order history update skipped [" + pHist.OrderNumber + "/" + pHist.Token + " - " + pHist.Event + ", " + pHist.Message + "].", TracerItem.PriorityEnum.Low);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Convert history to order orderInfo.
        /// </summary>
        /// <param name="OrderInfo"></param>
        /// <returns></returns>
        OrderInfo?ConvertToOrderInfo(MbtOrderHistory pHist, out Order.UpdateTypeEnum updateType)
        {
            updateType = Order.UpdateTypeEnum.Update;

            if (string.IsNullOrEmpty(pHist.Event))
            {
                return(null);
            }

            OrderInfo info = new OrderInfo(pHist.Token);

            string eventInfo = pHist.Event.ToLower();

            if (eventInfo.Contains("enter") || (eventInfo.Contains("session") && eventInfo.Contains("open")))
            {// "Enter", "Session open" events skipped.
                return(null);
            }

            if (eventInfo.Contains("live"))
            {
                info.State = OrderStateEnum.Submitted;
            }
            else if (eventInfo.Contains("executed"))
            {
                info.State = OrderStateEnum.Executed;
            }
            else if (eventInfo.Contains("suspended"))
            {
                info.State = OrderStateEnum.Suspended;
            }
            else if (eventInfo == "cancel" ||
                     (eventInfo.Contains("cancel") && eventInfo.Contains("reject")) ||
                     (eventInfo.Contains("order") && eventInfo.Contains("reject")) ||
                     (eventInfo.Contains("order") && eventInfo.Contains("cancel")))
            {// Order Reject or Cancel.
                info.State = OrderStateEnum.Canceled;
                updateType = Order.UpdateTypeEnum.Canceled;
            }
            else if (eventInfo.Contains("suspended"))
            {// Suspended
                info.State = OrderStateEnum.Suspended;
                updateType = Order.UpdateTypeEnum.Modified;
            }

            string eventMessage = pHist.Message;

            Symbol?symbol = TryObtainSymbol(pHist.Symbol);

            if (symbol.HasValue == false)
            {
                return(null);
            }

            info.Tag        = pHist.OrderNumber;
            info.OpenPrice  = (decimal)pHist.Price;
            info.StopLoss   = (decimal)pHist.StopLimit;
            info.TakeProfit = (decimal)pHist.StopLimit;
            info.OpenTime   = ConvertDateTime(pHist.Date + " " + pHist.Time);
            info.Volume     = pHist.Quantity;

            info.Symbol = symbol.Value;

            info.Type = ConvertFromMBTOrderType(pHist.OrderType, pHist.BuySell);
            if (info.Type == OrderTypeEnum.UNKNOWN)
            {
                SystemMonitor.OperationWarning("Failed to recognize order type [" + pHist.OrderType.ToString() + "].");
                //return null;
            }

            return(info);
        }
        /// <summary>
        /// Convert history to order orderInfo.
        /// </summary>
        /// <param name="OrderInfo"></param>
        /// <returns></returns>
        OrderInfo? ConvertToOrderInfo(MbtOrderHistory pHist, out Order.UpdateTypeEnum updateType)
        {
            updateType = Order.UpdateTypeEnum.Update;

            if (string.IsNullOrEmpty(pHist.Event))
            {
                return null;
            }

            OrderInfo info = new OrderInfo(pHist.Token);

            string eventInfo = pHist.Event.ToLower();

            if (eventInfo.Contains("enter") || (eventInfo.Contains("session") && eventInfo.Contains("open")))
            {// "Enter", "Session open" events skipped.
                return null;
            }

            if (eventInfo.Contains("live"))
            {
                info.State = OrderStateEnum.Submitted;
            }
            else if (eventInfo.Contains("executed"))
            {
                info.State = OrderStateEnum.Executed;
            }
            else if (eventInfo.Contains("suspended"))
            {
                info.State = OrderStateEnum.Suspended;
            }
            else if (eventInfo == "cancel"
                    || (eventInfo.Contains("cancel") && eventInfo.Contains("reject"))
                    || (eventInfo.Contains("order") && eventInfo.Contains("reject"))
                    || (eventInfo.Contains("order") && eventInfo.Contains("cancel")))
            {// Order Reject or Cancel.
                info.State = OrderStateEnum.Canceled;
                updateType = Order.UpdateTypeEnum.Canceled;
            }
            else if (eventInfo.Contains("suspended"))
            {// Suspended
                info.State = OrderStateEnum.Suspended;
                updateType = Order.UpdateTypeEnum.Modified;
            }

            string eventMessage = pHist.Message;

            Symbol? symbol = TryObtainSymbol(pHist.Symbol);
            if (symbol.HasValue == false)
            {
                return null;
            }

            info.Tag = pHist.OrderNumber;
            info.OpenPrice = (decimal)pHist.Price;
            info.StopLoss = (decimal)pHist.StopLimit;
            info.TakeProfit = (decimal)pHist.StopLimit;
            info.OpenTime = ConvertDateTime(pHist.Date + " " + pHist.Time);
            info.Volume = pHist.Quantity;

            info.Symbol = symbol.Value;

            info.Type = ConvertFromMBTOrderType(pHist.OrderType, pHist.BuySell);
            if (info.Type == OrderTypeEnum.UNKNOWN)
            {
                SystemMonitor.OperationWarning("Failed to recognize order type [" + pHist.OrderType.ToString() + "].");
                //return null;
            }

            return info;
        }
        void _orderClient_OnHistoryAdded(MbtOrderHistory pHist)
        {
            Order.UpdateTypeEnum update;
            OrderInfo? info = ConvertToOrderInfo(pHist, out update);

            if (info.HasValue && info.Value.State == OrderStateEnum.Canceled)
            {
                TryCompleteOrderOperation(pHist.Token, false, info);
            }

            if (info.HasValue)
            {
                this._adapter.OrderExecutionSourceStub.UpdateOrderInfo(_accountInfo.Value, update, info.Value);
            }
            else
            {
                SystemMonitor.OperationWarning("Order history update skipped [" + pHist.OrderNumber + "/" + pHist.Token + " - " + pHist.Event + ", " + pHist.Message + "].", TracerItem.PriorityEnum.Low);
            }
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        /// <summary>
        /// Get the order for a history object then convert that to a TradeLink fill
        /// </summary>
        /// <param name="pHist"></param>
        /// <returns></returns>
        TradeImpl HistToTradeLinkFill(MbtOrderHistory pHist)
        {
            MbtOpenOrder pOrd = GetOrderByOrderNumber(pHist.OrderNumber);
            TradeImpl fill = ToTradeLinkFill(pOrd, pHist);
				/*			  
				//clean it up if the order is completely filled
				if( pHist.Quantity == pHist.SharesFilled )
				{
					//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));
					}
					//clear the order from the orders list
					orders.Remove(pOrd.OrderNumber);
				}
				*/
            return fill;
        }
Exemplo n.º 8
0
        /// <summary>
        /// Get the order for a history object then convert that to a TradeLink order
        /// </summary>
        /// <param name="pHist"></param>
        /// <returns></returns>
        OrderImpl HistToTradeLinkOrder(MbtOrderHistory pHist)
        {
            MbtOpenOrder pOrd = GetOrderByOrderNumber(pHist.OrderNumber);
				return ToTradeLinkOrder(pOrd); //pmh - what happens if not found?!?
        }
Exemplo n.º 9
0
		  void m_OrderClient_OnHistoryAdded(MbtOrderHistory pHist)
		  {
			  long tlid = 0;
			  double price = (pHist.Price != 0) ? pHist.Price : pHist.StopPrice;
			  broker2tl.TryGetValue(pHist.OrderNumber, out tlid);
			  debug(String.Format("m_OrderClient_OnHistoryAdded {0} {1} {2} {3} {4} {5} {6}", pHist.Symbol, pHist.Event, pHist.OrderNumber, tlid, price, pHist.Quantity, pHist.Message));
			  switch (pHist.Event)
			  {
				  case "Accepted":
				  case "Live":
					  if (!sentNewOrders.Contains(pHist.OrderNumber))
					  {
						  OrderImpl o = HistToTradeLinkOrder(pHist);
						  tl.newOrder(o);
						  sentNewOrders.Add(pHist.OrderNumber);
					  }
					  break;
				  case "Executed":
					  //OrderImpl o = HistToTradeLinkOrder(pHist);
					  //tl.newOrder(o);
					  TradeImpl f = HistToTradeLinkFill(pHist);
					  pt.Adjust(f);
					  tl.newFill(f);
					  break;
				  case "Order Cancelled":
					  //TODO: have to make sure order cancellations are happening correctly, especially on repeat requests from TradeLink
					  string bid = pHist.OrderNumber;
					  //long tlid = 0;
					  if (broker2tl.TryGetValue(bid, out tlid))
					  {
						  debug(String.Format("Order {0} cancelled, matched order {1} and sending newOrderCancel to TradeLink", bid, tlid));
						  //remove the order mappings
						  if (broker2tl.ContainsKey(bid))
							  broker2tl.Remove(bid);
						  if (tl2broker.ContainsKey(tlid))
							  tl2broker.Remove(tlid);
						  cancelids.Remove(bid);
						  orders.Remove(bid);
						  tl.newCancel(tlid);
						  canceledids.Add(tlid, true);
					  }
					  else
						  debug(String.Format("Order {0} cancelled but no matching TradeLink order to cancel", bid));
					  break;
				  default:
					  break;
			  }
		  }
Exemplo n.º 10
0
 /// <summary>
 /// Get the order for a history object then convert that to a TradeLink order
 /// </summary>
 /// <param name="pHist"></param>
 /// <returns></returns>
 OrderImpl HistToTradeLinkOrder(MbtOrderHistory pHist)
 {
     MbtOpenOrder pOrd = GetOrderByOrderNumber(pHist.OrderNumber);
     return ToTradeLinkOrder(pOrd);
 }
Exemplo n.º 11
0
 public void OnHistoryAdded(MbtOrderHistory orderhistory)
 {
     SaveHistory(orderhistory);
 }