Пример #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);
                }
            }
        }
Пример #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));
         }
     }
 }