コード例 #1
0
ファイル: OrderPlaceVerifier.cs プロジェクト: dreamsql/Outter
 protected override void InnerVerify(Order order, bool isPlaceByRiskMonitor, AppType appType, PlaceContext context)
 {
     base.InnerVerify(order, isPlaceByRiskMonitor, appType, context);
     this.VerifyPlaceSettings(order, context);
 }
コード例 #2
0
ファイル: OrderPlaceVerifier.cs プロジェクト: dreamsql/Outter
 protected override void VerifyBPointAndMaxDQLot(Order order, PlaceContext context)
 {
     this.VerifyNetLot(order);
     this.VerifyMaxDQLot(order, context);
 }
コード例 #3
0
ファイル: OrderPlaceVerifier.cs プロジェクト: dreamsql/Outter
        protected override void InnerVerify(Order order, bool isPlaceByRiskMonitor, AppType appType, PlaceContext context)
        {
            this.VerifyInstrumentAcceptableOrderType(order, context);
            Order amendedOrder = order.Owner.AmendedOrder;

            if (amendedOrder != null && this.IsTradeOptionAndSetPriceEqual(order, amendedOrder))
            {
                return;
            }
            base.InnerVerify(order, isPlaceByRiskMonitor, appType, context);
            this.VerifyCommon(order, isPlaceByRiskMonitor, appType);
        }
コード例 #4
0
ファイル: OrderPlaceVerifier.cs プロジェクト: dreamsql/Outter
 protected override void VerifyInstrumentAcceptableOrderType(Order order, PlaceContext context)
 {
 }
コード例 #5
0
 public PlaceRepository(PlaceContext placeContext)
 {
     this.placeContext = placeContext;
 }
コード例 #6
0
ファイル: OrderPlaceVerifier.cs プロジェクト: dreamsql/Outter
        protected override bool IsTimingAcceptable(DateTime baseTime, Transaction tran, PlaceContext context)
        {
            bool isTimingAcceptable = tran.EndTime > baseTime;

            switch (tran.OrderType)
            {
            case OrderType.MarketOnOpen:
                isTimingAcceptable = true;
                break;

            case OrderType.MarketOnClose:
                string errorDetail;
                isTimingAcceptable = tran.TradingInstrument.CanPlace(tran.SubmitTime, (OrderType.MarketOnClose).IsPendingType(), tran.AccountInstrument.GetQuotation(tran.SubmitorQuotePolicyProvider), context, out errorDetail);
                if (!isTimingAcceptable)
                {
                    var tradeDay        = Settings.Setting.Default.GetTradeDay(context.TradeDay);
                    var systemParameter = Settings.Setting.Default.SystemParameter;
                    isTimingAcceptable = (tran.SubmitTime >= tran.SettingInstrument(context.TradeDay).DayOpenTime&&
                                          tran.SubmitTime <= tran.SettingInstrument(context.TradeDay).DayCloseTime.AddMinutes(0 - systemParameter.MooMocAcceptDuration));
                }
                break;
            }
            return(isTimingAcceptable);
        }
コード例 #7
0
 protected override bool IsTimingAcceptable(DateTime baseTime, Transaction tran, PlaceContext context)
 {
     return(tran.EndTime > baseTime);
 }
コード例 #8
0
 protected override void InnerVerify(Order order, PlaceContext context)
 {
 }
コード例 #9
0
 private string GetErrorMsg(Order order, PlaceContext context)
 {
     return(string.Format("Order side is not allowed, AllowedSpotTradeOrderSides={0}, AllowedNewTradeSides={1}", order.Instrument(context.TradeDay).AllowedSpotTradeOrderSides, order.Owner.DealingPolicyPayload(context.TradeDay).AllowedNewTradeSides));
 }
コード例 #10
0
 public PlacesController(PlaceContext context)
 {
     _context = context;
 }
コード例 #11
0
 protected abstract void InnerVerify(Order order, PlaceContext context);
コード例 #12
0
 protected override void InnerVerify(Order order, PlaceContext context)
 {
     this.VerifyPhysicalTradeSide(order);
     this.VerifyCommon(order, context);
 }
コード例 #13
0
 internal void Verify(Order order, PlaceContext context)
 {
     this.InnerVerify(order, context);
 }
        public bool CanPlace(DateTime baseTime, bool isPending, Quotations.Quotation quotation, PlaceContext context, out string errorDetail)
        {
            errorDetail = string.Empty;
            var  instrument    = this.SettingInstrument;
            bool isPlaceAllowd = this.IsPlaceAllowed;

            if (context.IsBook)
            {
                baseTime      = context.ExecuteTime.Value;
                isPlaceAllowd = true;
            }
            if (context.IsBook)
            {
                instrument = Settings.Setting.Default.GetInstrument(instrument.Id, context.TradeDay);
            }
            if (!instrument.IsActive)
            {
                return(false);
            }
            if (instrument.ExchangeSystem != ExchangeSystem.Local)
            {
                return(true);
            }

            if (isPlaceAllowd && (instrument.DayOpenTime + TimeSpan.FromSeconds(instrument.FirstOrderTime)) <= baseTime && baseTime <= instrument.DayCloseTime)
            {
                bool isOnPriceLimit = InstrumentPriceStatusManager.Default.IsOnPriceLimit(instrument.OriginCode);
                if (instrument.IsPriceEnabled && !isOnPriceLimit)
                {
                    if (instrument.InactiveTime <= 0)
                    {
                        return(true);
                    }
                    else
                    {
                        DateTime compareTime = quotation != null ? quotation.Timestamp : instrument.PriceEnableTime;
                        if (compareTime < instrument.PriceEnableTime)
                        {
                            compareTime = instrument.PriceEnableTime;
                        }

                        double inActiveTime = (Market.MarketManager.Now - compareTime).TotalSeconds;

                        if (inActiveTime < instrument.InactiveTime)
                        {
                            return(true);
                        }
                        else
                        {
                            errorDetail = string.Format("instrument id = {0} exceed inactive time = {1}, instrument.InactiveTime = {2} compareTime = {3}, priceEnableTime = {4} QuotationTimestatp = {5}", instrument.Id, inActiveTime, instrument.InactiveTime, compareTime, instrument.PriceEnableTime, quotation != null? quotation.Timestamp.ToString(): string.Empty);
                            return(false);
                        }
                    }
                }
                else
                {
                    errorDetail = string.Format("IsPriceEnabled = {0}, isOnPriceLimit = {1}", instrument.IsPriceEnabled, isOnPriceLimit);
                    return(false);
                }
            }
            else
            {
                errorDetail = string.Format("baseTime={0}, isPending={1}; isActive={2}, isPlaceAllowed={3}, isPriceEnabled={4},dayOpenTime={5},dayCloseTime={6}, CanPlacePendingOrderAtAnyTime = {7}", baseTime, isPending, instrument.IsActive, isPlaceAllowd, instrument.IsPriceEnabled, instrument.DayOpenTime, instrument.DayCloseTime, instrument.CanPlacePendingOrderAtAnyTime);
                return(instrument.CanPlacePendingOrderAtAnyTime && isPending);
            }
        }
コード例 #15
0
        protected override void InnerVerify(Order order, bool isPlaceByRiskMonitor, AppType appType, PlaceContext context)
        {
            base.InnerVerify(order, isPlaceByRiskMonitor, appType, context);
            Transaction tran = order.Owner;

            if (!order.Owner.TradePolicyDetail(context.TradeDay).IsTradeActive)
            {
                throw new TransactionServerException(TransactionError.TradePolicyIsNotActive);
            }
        }
コード例 #16
0
ファイル: PlaceRepository.cs プロジェクト: shake9696/eventis
 public PlaceRepository(PlaceContext context)
 {
     _context = context;
 }
コード例 #17
0
        internal static void VerifyForExecuting(this Transaction tran, bool isPlaceByRiskMonitor, AppType appType, PlaceContext context)
        {
            var executeVerifier = OrderFacade.Default.GetExecuteVerifier(tran);

            foreach (Order order in tran.Orders)
            {
                executeVerifier.Verify(order, isPlaceByRiskMonitor, appType, context);
            }
        }