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); }
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); }