public void ReceiveTick(string equityCode, decimal price)
        {
            var lockObject = LockObjects.GetOrAdd(equityCode, new object());

            lock (lockObject)
            {
                if (_ignoreFurtherTicks || price >= _orderParameters.PriceThreshold)
                {
                    return;
                }

                _ignoreFurtherTicks = true;

                try
                {
                    _orderService.Buy(equityCode, _orderParameters.Quantity, price);

                    OrderPlaced?.Invoke(new OrderPlacedEventArgs(equityCode, price));
                }
                catch (Exception ex)
                {
                    OrderErrored?.Invoke(new OrderErroredEventArgs(equityCode, price, ex));
                    _ignoreFurtherTicks = true;
                }
                finally
                {
                    LockObjects.TryRemove(equityCode, out _);
                }
            }
        }
예제 #2
0
        /// <inheritdoc/>
        public void ReceiveTick(string equityCode, decimal price)
        {
            if (IsInhibited())
            {
                return;
            }

            try
            {
                if (price < _thresholdLevel)
                {
                    lock (_syncLock)
                    {
                        if (IsInhibited())
                        {
                            return;
                        }
                        _orderService.Buy(equityCode, 1, price);
                        _loggerService.Info($"Bought equityCode '{equityCode}' at price '{price}'");
                        InhibitFurtherTicks();
                    }
                    OrderPlaced?.Invoke(new OrderPlacedEventArgs(equityCode, price));
                }
            }
            catch (Exception ex)
            {
                _loggerService.Error($"Error seen in ReceiveTick: {ex.Message}", ex);
                InhibitFurtherTicks();
                OrderErrored?.Invoke(new OrderErroredEventArgs(equityCode, price, ex));
            }
        }
예제 #3
0
        public void ReceiveTick(string equityCode, decimal price)
        {
            if (Completed || price >= this.Price)
            {
                return;
            }
            lock (this._lock)
            {
                if (Completed)
                {
                    return;
                }

                try
                {
                    this._orderService.Buy(this.EquityCode, this.Quantity, price);
                    OrderPlaced?.Invoke(new OrderPlacedEventArgs(this.EquityCode, price));
                }
                catch (Exception ex)
                {
                    OrderErrored?.Invoke(new OrderErroredEventArgs(this.EquityCode, price, ex));
                }
                finally
                {
                    this.Completed = true;
                }
            }
        }
 public void ReceiveTick(string equityCode, decimal price)
 {
     using (this)
     {
         try
         {
             if (_validator.IsValid(equityCode, price))
             {
                 if (price < _config.EquityOrderThreshold)
                 {
                     _orderService.Buy(equityCode, _config.EquityOrderQuantity, price);
                     OrderPlaced?.Invoke(new OrderPlacedEventArgs(equityCode, price));
                 }
             }
             else
             {
                 OrderErrored?.Invoke(new OrderErroredEventArgs(equityCode, price,
                                                                new ArgumentException($"Equity code or price invalid; EquityCode: {equityCode}, Price: {price}")));
             }
         }
         catch (Exception exception)
         {
             OrderErrored?.Invoke(new OrderErroredEventArgs(equityCode, price, exception));
         }
     }
 }
예제 #5
0
        public void ReceiveTick(string equityCode, decimal price)
        {
            logger.Log(LogLevel.Debug, $"{DateTime.Now} ReceiveTick for {equityCode} at {price}");

            if (!orderPlaced && (orderEquity == equityCode) && CanExecute(price))
            {
                logger.Log(LogLevel.Information, $"{DateTime.Now} Order placed for {equityCode} at {price}");
                orderPlaced = true;
                try
                {
                    Execute(price);
                    OrderPlaced?.Invoke(new OrderPlacedEventArgs(equityCode, price));
                    logger.Log(LogLevel.Information, $"{DateTime.Now} Order placed success.");
                }
                catch (Exception ex)
                {
                    OrderErrored?.Invoke(new OrderErroredEventArgs(equityCode, price, ex));
                    logger.Log(LogLevel.Error, $"{DateTime.Now} Order placed errored: {ex.Message}");
                }
            }
        }
        public void ReceiveTick(string equityCode, decimal price)
        {
            if (CanReceiveTick(price))
            {
                lock (LockObject)
                {
                    try
                    {
                        OrderService.Buy(equityCode, Parameters.Quantity, price);

                        OrderPlaced?.Invoke(new OrderPlacedEventArgs(equityCode, price));
                    }
                    catch (Exception ex)
                    {
                        OrderErrored?.Invoke(new OrderErroredEventArgs(equityCode, price, ex));
                    }
                    finally
                    {
                        ShutDown = true;
                    }
                }
            }
        }
예제 #7
0
        public void PlaceOrder(Order order)
        {
            //Check the security is already there in list otherwise add it.
            Security security;

            if (!Securities.TryGetValue(order.Symbol, out security))
            {
                security = AddSecurity(order.Symbol, 256.75, 2216278800000);
                security.TradeCompleted += Security_TradeCompleted;

                //foreach (var orderbook in security.OrderBook)
                //{
                //    var ordBook = orderbook.Value;
                //    ordBook.TradeCompleted += OrderBook_TradeCompleted;
                //}
            }

            if (security != null)
            {
                //Send the Order to Security
                security.SubmitOrder(order);
                OrderPlaced?.Invoke(this, new OrderPlacedEventArgs(order));
            }
        }
예제 #8
0
        public void ReceiveTick(string equityCode, decimal price)
        {
            lock (_shutdownLock)
            {
                if (_shutdown || price >= ThresholdLevel)
                {
                    return;
                }

                _shutdown = true;
            }


            try
            {
                OrderService.Buy(equityCode, 1, price);

                OrderPlaced?.Invoke(new OrderPlacedEventArgs(equityCode, price));
            }
            catch (Exception ex)
            {
                OrderErrored?.Invoke(new OrderErroredEventArgs(equityCode, price, ex));
            }
        }
예제 #9
0
 private void NotifyOrderPlaced(string equityCode, decimal price)
 {
     OrderPlaced?.Invoke(new OrderPlacedEventArgs(equityCode, price));
 }