private void ValidateCommon(Order order) { var instrument = order.Owner.TradingInstrument; var settingInstrument = order.Owner.SettingInstrument(); if (!instrument.IsTrading) { throw new TransactionServerException(TransactionError.TimingIsNotAcceptable); } var tradePolicyDetail = order.Owner.TradePolicyDetail(); BOPolicy binaryOptionPolicy = null; BOPolicyDetail binaryOptionPolicyDetail = null; if (tradePolicyDetail.BinaryOptionPolicyID == null) { throw new TransactionServerException(TransactionError.OrderTypeIsNotAcceptable); } if (!BOPolicyRepository.TryGet(tradePolicyDetail.BinaryOptionPolicyID.Value, out binaryOptionPolicy) || !BOPolicyDetailRepository.Default.TryGet(new BOPolicyDetailKey(tradePolicyDetail.BinaryOptionPolicyID.Value, order.BetTypeId, order.Frequency), out binaryOptionPolicyDetail)) { throw new TransactionServerException(TransactionError.OrderTypeIsNotAcceptable); } if (binaryOptionPolicyDetail.BetType.Option == BOOption.Instance) { BOBetType betType = BOBetTypeRepository.Get(order.BetTypeId); TimeSpan acceptSpan = TimeSpan.FromSeconds(order.Frequency * betType.HitCount); DateTime acceptTime = instrument.CurrentTradingSession.AcceptEndTime - acceptSpan; if (Market.MarketManager.Now >= acceptTime) { throw new TransactionServerException(TransactionError.TimingIsNotAcceptable); } } else { if (binaryOptionPolicyDetail.BetType.HitCount > 1) { this.Logger.WarnFormat("Hit count must be 1 when BOSettleTime is filled, order id = {0}", order.Id); throw new TransactionServerException(TransactionError.OrderTypeIsNotAcceptable); } DateTime now = Market.MarketManager.Now; TimeSpan acceptVariation = TimeSpan.Zero; if (binaryOptionPolicyDetail.BetType.Option == BOOption.Settle) { acceptVariation = binaryOptionPolicyDetail.BetType.LastPlaceOrderTimeSpan; } else if (binaryOptionPolicyDetail.BetType.Option == BOOption.IntegralMinute) { acceptVariation = TimeSpan.FromMinutes(order.Frequency); } if (order.SettleTime.Value > instrument.CurrentTradingSession.AcceptEndTime || now > (order.SettleTime.Value - acceptVariation)) { throw new TransactionServerException(TransactionError.TimingIsNotAcceptable); } } }
internal Order(Transaction owner, BOOrderConstructParams constructParams, OrderServiceFactoryBase serviceFactory) : base(owner, constructParams, serviceFactory) { if (this.IsOpen) { this.PayBackPledge = 0m; _boOrderSettings = (BOOrderSettings)_orderSettings; _bOBetType = BOBetTypeRepository.Get(_boOrderSettings.BetTypeId); this.CalculateNextHitTime(); if (this.HitCount > 0) { _betResult = this.CalculateBetResult(this.BestPrice, this.GetBetDirection(this.HitCount - 1)); } } }
private static void UpdateBOBetType(XElement node, string methodName) { Guid id = XmlConvert.ToGuid(node.Attribute("ID").Value); if (methodName == "Add") { BOBetType item = new BOBetType(id, node); binaryOptionBetTypes[id] = item; } else if (methodName == "Delete") { binaryOptionBetTypes.Remove(id); } else if (methodName == "Modify") { binaryOptionBetTypes[id].Update(node); } }
internal static void Read(IDBRow row) { BOBetType item = new BOBetType(row); binaryOptionBetTypes.Add(item.ID, item); }