Exemple #1
0
        void Run_Raw_Second(STR_Arb arb)
        {
            // 두번째 시나리오
            /*
             * 국주 채권 NS
             *
             */

            // 0. 체결이 무조건 전량체결이 되도록 한다.
            SimOrderContractPolicyData data = GetSimOrderContractPolicyData_FixedFull();
            String jsonText = Util.GetJsonText(typeof(SimOrderContractPolicyData), data);
            SimOrderContractPolicy.Ins().ChangePolicy(jsonText);

            long initSweeperCount = arb.GetBondArbNode().GetSweeperCollection().GetTotalSweeperCount();

            // 1. 국주채권을 등록한다
            logger.Info("D2-1. RegisterHousingBondPair START");
            RegisterHousingBondPair();
            logger.Info("D2-1. RegisterHousingBondPair END");

            // 2. Arb이 아니므로 아무 일도 일어나지 않는 것을 확인한다
            logger.Info("D2-2. Check No Arb case START(wait few sec)");
            System.Threading.Thread.Sleep(2000);
            Trace.Assert(arb.GetBondArbNode().GetSweeperCollection().GetTotalSweeperCount() == initSweeperCount);
            logger.Info("D2-2. Check No Arb case END(ok)");

            // 3. 2개짜리 NS기회
            logger.Info("D2-3. Check Arb case(NS) START");
            RawMarketData rmdNormal = RmdManager.Ins().BondSpot.GetData(_kHousingBondCode_Normal);
            RawMarketData rmdSmall = RmdManager.Ins().BondSpot.GetData(_kHousingBondCode_Small);
            SetImmeLongPart(rmdNormal, 1000 * CommonConst._1_000_000, 5000);
            SetImmeShortPart(rmdSmall, 1000 * CommonConst._1_000_000, 15000);

            for (int i = 0; i < 50; ++i)
            {
                System.Threading.Thread.Sleep(100);
                Trace.Assert(arb.GetBondArbNode().GetSweeperCollection().GetLiveSweeperCount() <= 4);
            }

            logger.Info("D2-3. Check Arb case(NS) END");

            System.Threading.Thread.Sleep(5000);
        }
Exemple #2
0
        void Run_Raw_First(STR_Arb arb)
        {
            // 첫번째 시나리오
            /*
             * 두산 채권에서 매수 매도 기회가 나와서 매수 매도 모두 채결이 정상적으로 잘 된다.
             *
             */

            // 0. 체결이 무조건 전량체결이 되도록 한다.
            SimOrderContractPolicyData data = GetSimOrderContractPolicyData_FixedFull();
            String jsonText = Util.GetJsonText(typeof(SimOrderContractPolicyData), data);
            SimOrderContractPolicy.Ins().ChangePolicy(jsonText);

            // 1. 두산건설을 등록한다
            logger.Info("D1. RegisterCreditBondPair START");
            RegisterCreditBondPair();
            logger.Info("D1. RegisterCreditBondPair END");

            // 2. Arb이 아니므로 아무 일도 일어나지 않는 것을 확인한다
            logger.Info("D2. Check No Arb case START(wait few sec)");
            System.Threading.Thread.Sleep(2000);
            Trace.Assert(arb.GetBondArbNode().GetSweeperCollection().GetTotalSweeperCount() == 0);
            logger.Info("D2. Check No Arb case END(ok)");

            // 3. 1개짜리 기회이지만 RN 기회이므로 아무일도 일어나지 않는다
            logger.Info("D3. Check One Arb(RN) case START(wait few sec)");
            RawMarketData rmdRetail = RmdManager.Ins().BondSpot.GetData(_kDoosanCode_Retail);
            RawMarketData rmdNormal = RmdManager.Ins().BondSpot.GetData(_kDoosanCode_Normal);
            SetImmeLongPart(rmdRetail, 100 * CommonConst._1_000_000, 5000);
            SetImmeShortPart(rmdNormal, 100 * CommonConst._1_000_000, 15000);
            System.Threading.Thread.Sleep(2000);
            Trace.Assert(arb.GetBondArbNode().GetSweeperCollection().GetTotalSweeperCount() == 0);
            logger.Info("D3. Check One Arb(RN) case END(ok)");

            SetAsZeroRMD(ref rmdRetail);
            SetAsZeroRMD(ref rmdNormal);

            // 4. 1개 기회이고 NR이지만 pnl이 너무 작아서 진입하지 않는다
            logger.Info("D4. Check One Arb(NR) with small pnl case START");
            SetImmeLongPart(rmdNormal, 100 * CommonConst._1_000, 5000);
            SetImmeShortPart(rmdRetail, 100 * CommonConst._1_000, 5001);
            System.Threading.Thread.Sleep(2000);
            Trace.Assert(arb.GetBondArbNode().GetSweeperCollection().GetTotalSweeperCount() == 0);
            logger.Info("D4. Check One Arb(NR) with small pnl case END");

            SetAsZeroRMD(ref rmdRetail);
            SetAsZeroRMD(ref rmdNormal);

            // 5. 1개짜리 기회이고 NR 기회이므로 1개 진입한다.
            logger.Info("D5. Check One Arb(NR) case START");
            SetImmeLongPart(rmdNormal, 100 * CommonConst._1_000, 5000);
            SetImmeShortPart(rmdRetail, 100 * CommonConst._1_000, 15000);
            System.Threading.Thread.Sleep(2000);
            Trace.Assert(arb.GetBondArbNode().GetSweeperCollection().GetTotalSweeperCount() == 1);
            logger.Info("D5. Check One Arb(NR) case END");

            SetAsZeroRMD(ref rmdRetail);
            SetAsZeroRMD(ref rmdNormal);

            System.Threading.Thread.Sleep(5000);

            // 6. 4개 이상 기회 NR, 4개 들어간다. (4개 이상은 안 들어감)
            logger.Info("D6. Check 4 Arb(NR) case START");
            SetImmeLongPart(rmdNormal, 100 * CommonConst._1_000_000 * CommonConst._1_000, 5000);
            SetImmeShortPart(rmdRetail, 100 * CommonConst._1_000_000 * CommonConst._1_000, 15000);

            for (int i = 0; i < 50; ++i)
            {
                System.Threading.Thread.Sleep(100);
                Trace.Assert(arb.GetBondArbNode().GetSweeperCollection().GetLiveSweeperCount() <= 4);
            }
            logger.Info("D6. Check 4 Arb(NR) case END");

            SetAsZeroRMD(ref rmdRetail);
            SetAsZeroRMD(ref rmdNormal);
        }