private void HandleOrdAmend(ulong oid, ulong newoid, float prc, uint qty) { Console.WriteLine("HandleOrdAmend"); KeyValuePair <Guid, OrderInfo> oldOrder; if (_executedOrderDictionary.TryRemove(oid, out oldOrder)) { oldOrder.Value.prc = prc; oldOrder.Value.qty = qty; oldOrder.Value.orderID = newoid; if (_executedOrderDictionary.TryAdd(newoid, oldOrder)) { OnOrderStatusChanged.Invoke(_executedOrderDictionary[oid].Value, _executedOrderDictionary[oid].Key); return; } else { Console.WriteLine("ERROR AMENDING ORDER: SAME KEY ALREADY EXISTS"); } } else { Console.WriteLine("ERROR AMENDING ORDER: ORIGINAL ORDER DID NOT EXIST."); } }
private void HandleOrdCancel(ulong oid) { Console.WriteLine("HandleOrdCancel"); lock (_executedOrderDictionary[oid].Value) _executedOrderDictionary[oid].Value.status = OrderStatus.Cancelled; OnOrderStatusChanged.Invoke(_executedOrderDictionary[oid].Value, _executedOrderDictionary[oid].Key); }
private void HandleOrdReject(ulong oid, string err) { Console.WriteLine("HandleOrdReject: " + err); lock (_executedOrderDictionary[oid].Value) { _executedOrderDictionary[oid].Value.status = OrderStatus.Rejected; _executedOrderDictionary[oid].Value.Error = err; } OnOrderStatusChanged.Invoke(_executedOrderDictionary[oid].Value, _executedOrderDictionary[oid].Key); }
private void HandleOpenOrd(ulong oid) { Console.WriteLine("HandleOpenOrd " + Thread.CurrentThread.Name); lock (_executedOrderDictionary[oid].Value) { _executedOrderDictionary[oid].Value.status = OrderStatus.New; _executedOrderDictionary[oid].Value.remainingQuantity = _executedOrderDictionary[oid].Value.qty; } OnOrderStatusChanged.Invoke(_executedOrderDictionary[oid].Value, _executedOrderDictionary[oid].Key); }
private void HandleOrdFill(ulong oid, uint totqty, uint exeqty, uint remqty, uint fillqty, float prc) { Console.WriteLine("HandleOpenFill"); lock (_executedOrderDictionary[oid].Value) { _executedOrderDictionary[oid].Value.status = remqty > 0 ? OrderStatus.Partial : OrderStatus.Filled; _executedOrderDictionary[oid].Value.qty = totqty; _executedOrderDictionary[oid].Value.remainingQuantity = remqty; _executedOrderDictionary[oid].Value.fillQuantity = exeqty; _executedOrderDictionary[oid].Value.lastQtyExecuted = fillqty; _executedOrderDictionary[oid].Value.prc = prc; _executedOrderDictionary[oid].Value.partialFillHistory.Add(new KeyValuePair <DateTime, uint>(DateTime.Now, fillqty)); _executedOrderDictionary[oid].Value.LastExecTS = DateTime.Now; } OnOrderStatusChanged.Invoke(_executedOrderDictionary[oid].Value, _executedOrderDictionary[oid].Key); }
public void CancelOrder(ulong OrderID) { if (isLoggedIn && isConnected) { //containskey is OK concurrency-wise, because no thread will ever remove orders from the dictionary if (_executedOrderDictionary.ContainsKey(OrderID)) { lock (_executedOrderDictionary[OrderID].Value) _executedOrderDictionary[OrderID].Value.status = OrderStatus.PendingCancel; OnOrderStatusChanged.Invoke(_executedOrderDictionary[OrderID].Value, _executedOrderDictionary[OrderID].Key); _stratClient.OrdCancel(OrderID); } else { Console.WriteLine("Could not cancel, orderid not present in dictionary"); } } }