public Sweeper_BondArb(
            BondPair pair,
            Account bondAccount)
        {
            try
            {
                this.ID = g_curID++;

                this._bStartWithSweeperMode = false;

                this.EnterCodeWithMarketType = pair.EnterCodeWithMarketType;
                this.PairCodeWithMarketType = pair.PairCodeWithMarketType;

                this.EnterPrice = pair.EnterPrice;
                this.PairPrice = pair.PairPrice;

                logger.Info("[Start BondArb Sweeper] #{0:n0}, '{1}' ({2:n0} -> {3:n0}) ({4:n0})",
                    this.ID,
                    BondUtil.GetCodeNoTail(this.EnterCodeWithMarketType),
                    this.EnterPrice,
                    this.PairPrice,
                    pair.Count);

                SweepUnitContext_Bond_Long contextLong =
                    new SweepUnitContext_Bond_Long(TradingDirection.Long, pair, bondAccount, this);

                _sweepUnitLong = new SweepUnitTemplate(contextLong, this, 5);
                _sweepUnitLong.CompleteCarefully();

                SweepUnitContext_Bond_Short contextShort =
                    new SweepUnitContext_Bond_Short(TradingDirection.Short, pair, bondAccount, this);

                _sweepUnitShort = new SweepUnitTemplate(contextShort, this, 5);
                _sweepUnitShort.CompleteCarefully();
            }
            catch (System.Exception ex)
            {
                logger.Error(ex.ToString());
                Util.KillWithNotice(ex.ToString());
            }
        }
        void SetShortUnit(Account account, RemainPositionDatum datum)
        {
            SweepUnitContext_Bond_Short contextShort =
                new SweepUnitContext_Bond_Short(TradingDirection.Short, datum, account, this);

            _sweepUnitShort = new SweepUnitTemplate(contextShort, this, 5);
            _sweepUnitShort.CompleteCarefully();
            _sweepUnitShort.StartWithRequestSweepOrdersState();
        }