public void UpdateAccount(IMarginTradingAccount account, AccountFpl accountFpl, Order[] orders = null) { if (orders == null) { orders = _ordersCache.ActiveOrders.GetOrdersByAccountIds(account.Id).ToArray(); } var accuracy = _assetsCache.GetAssetAccuracy(account.BaseAssetId); accountFpl.PnL = Math.Round(orders.Sum(x => x.GetTotalFpl()), accuracy); accountFpl.UsedMargin = Math.Round(orders.Sum(item => item.GetMarginMaintenance()), accuracy); accountFpl.MarginInit = Math.Round(orders.Sum(item => item.GetMarginInit()), accuracy); accountFpl.OpenPositionsCount = orders.Length; var accountGroup = _accountGroupCacheService.GetAccountGroup(account.TradingConditionId, account.BaseAssetId); if (accountGroup == null) { throw new Exception(string.Format(MtMessages.AccountGroupForTradingConditionNotFound, account.TradingConditionId, account.BaseAssetId)); } accountFpl.MarginCallLevel = accountGroup.MarginCall; accountFpl.StopoutLevel = accountGroup.StopOut; accountFpl.CalculatedHash = accountFpl.ActualHash; }
public MarginTradingAccount GuessAccountWithOrder(Order order) { var accountFpl = new AccountFpl(); var newInstance = MarginTradingAccount.Create(_accountsCacheService.Get(order.ClientId, order.AccountId), accountFpl); var orders = _ordersCache.ActiveOrders.GetOrdersByInstrumentAndAccount(order.Instrument, order.AccountId).ToList(); orders.Add(order); UpdateAccount(newInstance, accountFpl, orders.ToArray()); return(newInstance); }