Exemplo n.º 1
0
        internal static OrderHitStatus HitAutoClosePrice(Order order, Quotation newQuotation, DateTime baseTime)
        {
            if (order.AutoLimitPrice != null || order.AutoStopPrice != null)
            {
                bool  isBuyForClose = !order.IsBuy;
                Price marketPrice   = HitCommon.CalculateMarketPrice(isBuyForClose, newQuotation);
                if (order.AutoLimitPrice != null)
                {
                    int result = Price.Compare(marketPrice, order.AutoLimitPrice, !newQuotation.IsNormal);
                    if ((!isBuyForClose && result >= 0) || (isBuyForClose && result <= 0)) //Sell High Buy Low
                    {
                        return(OrderHitStatus.ToAutoLimitClose);
                    }
                }

                if (order.AutoStopPrice != null)
                {
                    int result = Price.Compare(marketPrice, order.AutoStopPrice, !newQuotation.IsNormal);
                    if ((!isBuyForClose && result <= 0) || (isBuyForClose && result >= 0)) //Sell Low Buy High
                    {
                        return(OrderHitStatus.ToAutoStopClose);
                    }
                }
            }
            return(OrderHitStatus.None);
        }
Exemplo n.º 2
0
        internal PriceCompareResult Compare(Price price, bool isBuy)
        {
            var marketPrice   = HitCommon.CalculateMarketPrice(isBuy, this);
            int compareResult = Price.Compare(marketPrice, price, !this.IsNormal);
            PriceCompareResult result;

            if (compareResult == 0)
            {
                result = PriceCompareResult.Fair;
            }
            else if (compareResult > 0)
            {
                result = isBuy ? PriceCompareResult.Worse : PriceCompareResult.Better;
            }
            else
            {
                result = isBuy ? PriceCompareResult.Better : PriceCompareResult.Worse;
            }
            return(result);
        }