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