Example #1
0
        private void Reset(long _)
        {
            _analyticsService.Reset();
            _tradeRepository.Reset();

            // make 3 trades

            // eurusd
            // gbpusd
            // nzdusd
            foreach (var ccyPair in new [] { "EURUSD", "GBPUSD", "NZDUSD"})
            {
                try
                {
                    var price = _priceLastValueCache.GetLastValue(ccyPair);

                    var trade = new TradeRequestDto()
                    {
                        DealtCurrency = "EUR",
                        Direction = DirectionDto.Buy,
                        Notional = 500000,
                        SpotRate = price.Bid,
                        Symbol = ccyPair,
                        ValueDate = DateTime.Now.ToNextWeekday(2)
                    };

                    _executionService.Execute(trade, "CPU-007").Wait(TimeSpan.FromSeconds(10));
                }
                catch
                {
                    // swallow exception
                }
            }
        }
Example #2
0
        public Task<TradeDto> Execute(TradeRequestDto tradeRequest)
        {
            var user = ContextUtil.GetUserName(Context);
            Log.InfoFormat("Received trade request {0} from user {1}", tradeRequest, user);

            var trade = _executionService.Execute(tradeRequest, user);
            Log.InfoFormat("Trade executed: {0}", trade);

            return trade;
        }
        public async Task<TradeDto> Execute(TradeRequestDto tradeRequest, string user)
        {
            var status = TradeStatusDto.Done;

            switch (tradeRequest.Symbol)
            {
                case "EURJPY":
                    await Task.Delay(TimeSpan.FromSeconds(5));
                    break;
                case "GBPUSD":
                    await Task.Delay(TimeSpan.FromSeconds(1.5));
                    break;
                default:
                    await Task.Delay(TimeSpan.FromSeconds(.5));
                    break;
            }
           
            if (tradeRequest.Symbol == "GBPJPY")
            {
                status = TradeStatusDto.Rejected;
            }

            var trade =  new TradeDto
            {
                CurrencyPair = tradeRequest.Symbol,
                Direction = tradeRequest.Direction,
                Notional = tradeRequest.Notional,
                SpotRate = tradeRequest.SpotRate,
                Status = status,
                TradeDate = DateTime.UtcNow,
                ValueDate = tradeRequest.ValueDate,
                TradeId = Interlocked.Increment(ref _tradeId),
                TraderName = user,
                DealtCurrency = tradeRequest.DealtCurrency
            };

            _tradeRepository.StoreTrade(trade);
            _analyticsService.OnTrade(trade);

            // publish trade asynchronously
            await _blotterPublisher.Publish(trade);

            
            return trade;
        }
        public IObservable<IStale<ITrade>> ExecuteRequest(IExecutablePrice executablePrice, long notional, string dealtCurrency)
        {
            var price = executablePrice.Parent;

            var request = new TradeRequestDto
            {
                Direction = executablePrice.Direction == Direction.BUY ? DirectionDto.Buy : DirectionDto.Sell,
                Notional = notional,
                SpotRate = executablePrice.Rate,
                Symbol = price.CurrencyPair.Symbol,
                ValueDate = price.ValueDate,
                DealtCurrency = dealtCurrency
            };

            return _executionServiceClient.ExecuteRequest(request)
                .Select(_tradeFactory.Create)
                .DetectStale(TimeSpan.FromSeconds(2), _concurrencyService.TaskPool);
        }
 private static IObservable<TradeDto> ExecuteForConnection(IHubProxy executionHubProxy, TradeRequestDto tradeRequestDto)
 {
     return Observable.FromAsync(
         () => executionHubProxy.Invoke<TradeDto>(ServiceConstants.Server.Execute, tradeRequestDto));
 } 
 public IObservable<TradeDto> ExecuteRequest(TradeRequestDto tradeRequest)
 {
     return RequestUponConnection(connection => ExecuteForConnection(connection.ExecutionHubProxy, tradeRequest), TimeSpan.FromMilliseconds(500));
 }