Esempio n. 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
                }
            }
        }
Esempio n. 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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
 private static IObservable <TradeDto> ExecuteForConnection(IHubProxy executionHubProxy, TradeRequestDto tradeRequestDto)
 {
     return(Observable.FromAsync(
                () => executionHubProxy.Invoke <TradeDto>(ServiceConstants.Server.Execute, tradeRequestDto)));
 }
Esempio n. 6
0
 public IObservable <TradeDto> ExecuteRequest(TradeRequestDto tradeRequest)
 {
     return(RequestUponConnection(connection => ExecuteForConnection(connection.ExecutionHubProxy, tradeRequest), TimeSpan.FromMilliseconds(500)));
 }