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 } } }
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))); }