Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
 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));
         }
     }
 }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        internal static void Read(IDBRow row)
        {
            BOBetType item = new BOBetType(row);

            binaryOptionBetTypes.Add(item.ID, item);
        }