Example #1
0
        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.");
            }
        }
Example #2
0
 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);
 }
Example #3
0
 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);
 }
Example #4
0
        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);
        }
Example #5
0
        internal void OnOrderStatusChanged(Order order, bool queued = true)
        {
            var e = new OnOrderStatusChanged(order);

            if (queued)
            {
                this.queue.Enqueue(e);
            }
            else
            {
                OnEvent(e);
            }
        }
Example #6
0
 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);
 }
Example #7
0
        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);
        }
Example #8
0
 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");
         }
     }
 }
Example #9
0
 internal void OnOrderStatusChanged(Order order, bool queued = true)
 {
     var e = new OnOrderStatusChanged(order);
     if (queued)
         this.queue.Enqueue(e);
     else
         OnEvent(e);
 }