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); }
internal void OnOrderStatusChanged(Order order, bool queued = true) { var e = new OnOrderStatusChanged(order); if (queued) { this.queue.Enqueue(e); } else { OnEvent(e); } }
public void UpdateOrder(UserTradeOrder aNewOrder, OrderStatus aStatus) { if (aNewOrder.Market == null) { return; } FOrders.AddOrUpdate(aNewOrder.InternalID, aNewOrder, (key, lOldValue) => aNewOrder); if (!FSaveManager.UpdateOrder(aNewOrder, aStatus)) { throw new Exception("Failed to write new transaction into disk"); } aNewOrder.Status = aStatus; OnOrderStatusChanged?.BeginInvoke(aNewOrder.InternalID, aStatus, aNewOrder.Market.SellingCurrencyInfo.Id, null, null); }
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"); } } }
internal void OnOrderStatusChanged(Order order, bool queued = true) { var e = new OnOrderStatusChanged(order); if (queued) this.queue.Enqueue(e); else OnEvent(e); }