private static decimal CalculatePhysicalTradePL(PhysicalOrderRelation orderRelation, Exchanger exchanger) { decimal result = 0m; if (orderRelation.PhysicalValueMatureDay == null || orderRelation.RealPhysicalValueMatureDate == orderRelation.PhysicalValueMatureDay) { result = exchanger.ExchangeByCommonDecimals(orderRelation.TradePL); } return(result); }
internal static void RecoveAffectedOpenOrders(Order order, bool isPayForInstalmentDebitInterest, DateTime tradeDay) { foreach (var eachOrderRelation in order.OrderRelations) { Order openOrder = eachOrderRelation.OpenOrder; openOrder.LotBalance += eachOrderRelation.ClosedLot; if (order.Owner.IsPhysical) { PhysicalOrderRelation physicalOrderRelation = (PhysicalOrderRelation)eachOrderRelation; AffectedOpenOrderRecover.Recove(order, eachOrderRelation.CloseTime.Value, isPayForInstalmentDebitInterest, tradeDay, physicalOrderRelation.PayBackPledge, physicalOrderRelation.ClosedPhysicalValue); } } }
internal List <PhysicalOrderRelation> UpdatePhysicalOrderRelationValueMatureDate(TradeDayInfo info) { List <PhysicalOrderRelation> result = new List <PhysicalOrderRelation>(); foreach (var eachOrderRelation in info.OrderRelations) { PhysicalOrderRelation physicalOrderRelation = eachOrderRelation as PhysicalOrderRelation; if (physicalOrderRelation == null) { continue; } if (physicalOrderRelation.PhysicalValueMatureDay <= info.TradeDay && physicalOrderRelation.RealPhysicalValueMatureDate == null) { result.Add(physicalOrderRelation); physicalOrderRelation.RealPhysicalValueMatureDate = DateTime.Now.Date; } } return(result); }
private static bool ExistNotMaturePhysicalValue(this Order order, IEnumerable <OrderRelation> orderRelations) { if (!order.Owner.IsPhysical) { return(false); } foreach (var eachOrderRelation in orderRelations) { if (eachOrderRelation.OpenOrderId != order.Id) { continue; } PhysicalOrderRelation physicalOrderRelation = (PhysicalOrderRelation)eachOrderRelation; if (physicalOrderRelation.PhysicalValueMatureDay != null && physicalOrderRelation.RealPhysicalValueMatureDate == null) { return(true); } } return(false); }
private static void CalculateNotValuedOrderRelationPL(TradeDayInfo tradeDayInfo, Exchanger exchanger, Dictionary <Guid, OrderResetResult> resetOrderDict, List <Guid> affectedOrders) { foreach (var eachOrderRelation in tradeDayInfo.OrderRelations) { Order closeOrder = eachOrderRelation.CloseOrder; if (!closeOrder.ShouldCalculate(affectedOrders)) { continue; } PhysicalOrder physicalCloseOrder = closeOrder as PhysicalOrder; PhysicalOrderRelation physicalOrderRelation = eachOrderRelation as PhysicalOrderRelation; if (closeOrder.Phase == OrderPhase.Executed && !closeOrder.IsOpen && closeOrder.ExecuteTime <= tradeDayInfo.Settings.ResetTime && eachOrderRelation.ValueTime == null) { OrderResetResult resetResult = CreateOrderResetResult(closeOrder, tradeDayInfo, resetOrderDict); resetResult.NotValuedPL += new InterestStorage(exchanger.ExchangeByCommonDecimals(eachOrderRelation.InterestPL), exchanger.ExchangeByCommonDecimals(eachOrderRelation.StoragePL)); resetResult.TradePLNotValued += exchanger.ExchangeByCommonDecimals(eachOrderRelation.TradePL); if (physicalOrderRelation != null) { resetResult.PhysicalTradePLNotValued += CalculatePhysicalTradePL(physicalOrderRelation, exchanger); } } } }
private static void CalculateValuedOrderRelationPL(TradeDayInfo tradeDayInfo, Exchanger exchanger, Dictionary <Guid, OrderResetResult> resetOrderDict, List <Guid> affectedOrders) { foreach (var eachOrderRelation in tradeDayInfo.OrderRelations) { Order closeOrder = eachOrderRelation.CloseOrder; if (!closeOrder.ShouldCalculate(affectedOrders)) { continue; } if (closeOrder.Phase == OrderPhase.Executed && !closeOrder.IsOpen && closeOrder.ExecuteTime <= tradeDayInfo.Settings.ResetTime && eachOrderRelation.ValueTime > tradeDayInfo.Settings.BeginTime && eachOrderRelation.ValueTime <= tradeDayInfo.Settings.ResetTime) { var resetResult = CreateOrderResetResult(closeOrder, tradeDayInfo, resetOrderDict); var valuedPL = eachOrderRelation.CalculateValuedPL(); resetResult.ValuedPL += new InterestStorage(valuedPL.InterestPL, valuedPL.StoragePL); resetResult.TradePLValued += valuedPL.TradePL; PhysicalOrderRelation physicalOrderRelation = eachOrderRelation as PhysicalOrderRelation; if (physicalOrderRelation != null) { resetResult.PhysicalTradePLValued += CalculatePhysicalTradePL(physicalOrderRelation, exchanger); } } } }
private static bool ExistNotMaturePhysicalValueForCloseOrder(this Order order, IEnumerable <OrderRelation> orderRelations) { PhysicalOrder physicalOrder = order as PhysicalOrder; if (physicalOrder == null) { return(false); } foreach (var eachOrderRelation in orderRelations) { if (eachOrderRelation.CloseOrder.Id != order.Id) { continue; } PhysicalOrderRelation physicalOrderRelation = (PhysicalOrderRelation)eachOrderRelation; if (eachOrderRelation.ValueTime == null || (physicalOrderRelation != null && physicalOrderRelation.PhysicalValueMatureDay != null && physicalOrderRelation.RealPhysicalValueMatureDate == null)) { return(true); } } return(false); }
public PhysicalOrderRelationXmlService(PhysicalOrderRelation owner) : base(owner) { _owner = owner; }
private void CalculateOrderRelaiton(PhysicalOrderRelation orderRelation, bool isLast, ExecuteContext context) { orderRelation.CalculateClosedPhysicalValue(context.TradeDay); orderRelation.CalculatePayBackPledge(isLast, context); }
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)); }
private void UpdateForOpenOrder(PhysicalOrderRelation orderRelation, PhysicalOrder openOrder) { openOrder.PhysicalOriginValueBalance += -orderRelation.ClosedPhysicalValue; openOrder.PaidPledgeBalance += orderRelation.PayBackPledgeOfOpenOrder; openOrder.UpdateLotBalance(orderRelation.ClosedLot, _physicalOrder.PhysicalTradeSide == PhysicalTradeSide.Delivery); }
internal PhysicalOrderRelationSettings(PhysicalOrderRelation owner, PhysicalOrderRelationConstructParams constructParams) : base(owner) { this.Parse(constructParams); }