Exemplo n.º 1
0
        // 检查对手,保证最不会自成交
        // 这次有可能把平仓单全撤了,剩下的全是开仓单,有些风险
        public int 单边防自成交(OrderBook_OneSide_Order sell, OrderBook_OneSide_Size buy)
        {
            int cnt = 0;

            // 同买卖是不可能自成交的
            if (sell.Side == buy.Side)
            {
                return(cnt);
            }

            // 还没有挂单,不会自成交
            if (sell.Count <= 0)
            {
                return(cnt);
            }

            // 对手单也是空的,不会自成交
            if (buy.Count <= 0)
            {
                return(cnt);
            }

            // 取对手单的最高价
            int level = buy.Grid.Keys[0];

            // 将挂单列表中的单子撤单
            foreach (var s in sell.Grid)
            {
                if (buy.Side == OrderSide.Buy)
                {
                    if (s.Key <= level)
                    {
                        cnt += sell.Cancel(s.Value);
                    }
                }
                else
                {
                    if (s.Key >= level)
                    {
                        cnt += sell.Cancel(s.Value);
                    }
                }
            }
            return(cnt);
        }
Exemplo n.º 2
0
        // 检查对手,保证最不会自成交
        // 这次有可能把平仓单全撤了,剩下的全是开仓单,有些风险
        public int 单边防自成交(OrderBook_OneSide_Order sell,OrderBook_OneSide_Size buy)
        {
            int cnt = 0;
            // 同买卖是不可能自成交的
            if(sell.Side == buy.Side)
                return cnt;

            // 还没有挂单,不会自成交
            if (sell.Count <= 0)
                return cnt;

            // 对手单也是空的,不会自成交
            if (buy.Count <= 0)
                return cnt;

            // 取对手单的最高价
            int level = buy.Grid.Keys[0];
            // 将挂单列表中的单子撤单
            foreach(var s in sell.Grid)
            {
                if (buy.Side == OrderSide.Buy)
                {
                    if (s.Key <= level)
                    {
                        cnt += sell.Cancel(s.Value);
                    }
                }
                else
                {
                    if (s.Key >= level)
                    {
                        cnt += sell.Cancel(s.Value);
                    }
                }
            }
            return cnt;
        }