internal static void Payoff(Account account, Guid currencyId, Guid userId, TerminateData terminateData) { PhysicalOrder order = (PhysicalOrder)account.GetOrder(terminateData.OrderId); if (order.PhysicalTradeSide != iExchange.Common.PhysicalTradeSide.Buy) { return; } order.PaidPledgeBalance = -order.PhysicalOriginValueBalance; foreach (var eachInstalmentItem in order.Instalment.InstalmentDetails) { eachInstalmentItem.UpdateByPrePay(0, 0, 0, DateTime.Now, DateTime.Now, userId, order.LotBalance); } Guid sourceCurrencyId = terminateData.SourceCurrencyId != Guid.Empty ? terminateData.SourceCurrencyId : currencyId; decimal value = -(terminateData.SourceAmount + terminateData.SourceTerminateFee); order.AddBill(new Bill(account.Id, sourceCurrencyId, value, Protocal.BillType.PrePay, BillOwnerType.Order, DateTime.Now)); account.AddBalance(sourceCurrencyId, value, null); account.CalculateRiskData(); }
private void UpdateCloseOrder(PhysicalOrderRelation orderRelation, ExecuteContext context) { _physicalOrder.PaidPledgeBalance += orderRelation.PayBackPledgeOfCloseOrder; _physicalOrder.AddBill(new Bill(_physicalOrder.AccountId, _physicalOrder.CurrencyId, orderRelation.PayBackPledgeOfOpenOrder, BillType.PayBackPledge, BillOwnerType.Order, context.ExecuteTime ?? DateTime.Now)); }