예제 #1
0
        internal static OrderHitStatus HitSpotOrder(Order order, HitOrderSettings hitOrderSettings, Quotation quotation, DateTime baseTime)
        {
            if (!order.ShouldSportOrderDelayFill && order.HitStatus.IsFinal())
            {
                return(OrderHitStatus.None);
            }
            Price marketPrice = HitCommon.CalculateMarketPrice(order.IsBuy, quotation);

            if (ShouldCancelSpotOrder(order, marketPrice, quotation.IsNormal))
            {
                return(OrderHitStatus.ToCancel);
            }
            if (order.DQMaxMove <= 0)
            {
                return(OrderHitStatus.None);
            }
            if (!hitOrderSettings.IncreaseHitCount())
            {
                return(OrderHitStatus.None);
            }
            Price bestPrice = CalculateBestPriceForSportOrder(order, marketPrice);

            if (bestPrice != null)
            {
                order.BestPrice = bestPrice;
                order.BestTime  = baseTime;
            }
            if (order.ShouldAutoFill && !order.ShouldSportOrderDelayFill && Math.Abs(order.HitCount) >= order.Instrument().HitTimes)
            {
                return(OrderHitStatus.ToAutoFill);
            }
            return(OrderHitStatus.Hit);
        }
예제 #2
0
        internal static OrderHitStatus HitMarketAndLimitOrder(Order order, HitOrderSettings hitOrderSettings, Quotation newQuotation, DateTime baseTime, bool ignoreHitTimes)
        {
            Price marketPrice = HitCommon.CalculateMarketPrice(order.IsBuy, newQuotation);

            if (!IsHitPrice(order, newQuotation, marketPrice))
            {
                return(OrderHitStatus.None);
            }
            if (!hitOrderSettings.IncreaseHitCount())
            {
                return(OrderHitStatus.None);
            }
            if (ShouldUseNewHitPrice(order, newQuotation))
            {
                order.BestPrice = marketPrice;
                order.BestTime  = baseTime;
            }
            else
            {
                return(OrderHitStatus.None);
            }
            return(order.CalculateLimitMarketHitStatus(ignoreHitTimes));
        }