public async Task PlaceOrder() { var subscription = _realmProxy.Services.GetSubject <NotifyResponse>($"user.updates.{_notificationId}") .Subscribe(info => { if (info.Account != null) { Console.WriteLine("Account changed"); } if (info.Order != null) { Console.WriteLine("Order changed"); } if (info.AccountStopout != null) { Console.WriteLine("Account stopout"); } if (info.UserUpdate != null) { Console.WriteLine($"User update: accountAssetPairs = {info.UserUpdate.UpdateAccountAssetPairs}, accounts = {info.UserUpdate.UpdateAccounts}"); } }); var data = await _service.InitData(_token); try { var request = new OpenOrderRpcClientRequest { Token = _token, Order = new NewOrderClientContract { AccountId = data.Demo.Accounts[0].Id, FillType = OrderFillTypeContract.FillOrKill, Instrument = "BTCUSD", Volume = 1 } }; var order = await _service.PlaceOrder(request.ToJson()); if (order.Result.Status == 3) { Console.WriteLine($"Order rejected: {order.Result.RejectReason} -> {order.Result.RejectReasonText}"); } } catch (Exception ex) { Console.WriteLine(ex); } Console.WriteLine("Press enter"); Console.ReadLine(); subscription.Dispose(); }
public async Task <IEnumerable <OperationResult> > PlaceOrders(string accountId, string instrument, int numOrders) { var operations = new List <OperationResult>(); for (var i = 0; i < numOrders; i++) { try { var request = new OpenOrderRpcClientRequest { Token = _token, Order = new NewOrderClientContract { AccountId = accountId, FillType = OrderFillTypeContract.FillOrKill, Instrument = instrument, Volume = 1 } }; LogInfo($"Placing order {i+1}/{numOrders}: [{instrument}]"); var res = new OperationResult { Operation = "PlaceOrders", StartDate = DateTime.UtcNow }; var order = await _service.PlaceOrder(request.ToJson()); res.EndDate = DateTime.UtcNow; res.Result = order.Result; operations.Add(res); LogInfo(order.Result.Status == 3 ? $";{res.Duration};Order rejected: {order.Result.RejectReason} -> {order.Result.RejectReasonText}" : $";{res.Duration};Order placed: {order.Result.Id} -> Status={order.Result.Status}"); } catch (Exception ex) { LogError(ex); } // Sleep TransactionFrequency Thread.Sleep(GetRandomTransactionInterval()); } return(operations); }