private void ClientGotOrderFilled(Trade k) { _tradelist.Add(k); System.Windows.Application.Current.Dispatcher.Invoke(() => { // order table int pos = OrderTable.Select(row => row.OrderId).ToList().IndexOf(k.Id); if (pos == -1) { OnDebug("Order id " + k.Id.ToString() + " is not found in order table; possibly new order."); } else { _ordertracker.GotFill(k); if (_ordertracker[k.Id] == 0) { OrderStatus status = OrderStatus.Filled; OrderTable[pos].Status = EnumDescConverter.GetEnumDescription(status); } else { OrderStatus status = OrderStatus.PartiallyFilled; _ordertable[pos].Status = EnumDescConverter.GetEnumDescription(status); } } // position table only handles one account // but it is guarantteed by order id _positiontracker.Adjust(k); pos = PositionTable.Select(row => row.Symbol).ToList().IndexOf(k.FullSymbol); if (pos == -1) { // add new position int count = PositionTable.Count; PositionTable.Add(new PositionEntry(count, k.FullSymbol, _positiontracker[k.FullSymbol].AvgPrice, _positiontracker[k.FullSymbol].Size, _positiontracker[k.FullSymbol].ClosedPL, _positiontracker[k.FullSymbol].OpenPL)); } else { // adjust position PositionTable[pos].AvgPrice = _positiontracker[k.FullSymbol].AvgPrice; PositionTable[pos].Size = _positiontracker[k.FullSymbol].Size; PositionTable[pos].ClosePL = _positiontracker[k.FullSymbol].ClosedPL; PositionTable[pos].OpenPL = _positiontracker[k.FullSymbol].OpenPL; } FillTable.Add(new FillEntry(k.Id, k.TradeTime, k.FullSymbol, k.TradeSize, k.TradePrice)); }); }
private void ClientGotInitialPosition(Position obj) { System.Windows.Application.Current.Dispatcher.Invoke(() => { if (_positiontracker.IsTracked(obj.FullSymbol)) { int pos = PositionTable.Select(row => row.Symbol).ToList().IndexOf(obj.FullSymbol); // should exist PositionTable[pos].AvgPrice = obj.AvgPrice; PositionTable[pos].Size = obj.Size; PositionTable[pos].ClosePL = obj.ClosedPL; PositionTable[pos].OpenPL = obj.OpenPL; } else { int count = PositionTable.Count; // ?? A first chance exception system notsupportedexception presentationframework dll ?? PositionTable.Add(new PositionEntry(count, obj.FullSymbol, obj.AvgPrice, obj.Size, obj.ClosedPL, obj.OpenPL)); } }); _positiontracker.Adjust(obj); }