Exemple #1
0
        public void Run(STR_Arb arb)
        {
            int useAccount = Convert.ToInt32(Util.RemoveComma(ConfigManager.Ins().Config.GetValue(ConfigKeyConst.USE_ACCOUNT)));
            int realKB = Convert.ToInt32(Util.RemoveComma(ConfigManager.Ins().Config.GetValue(ConfigKeyConst.KB_REAL)));

            Boolean bRealAccount = false;
            if (useAccount == 0)
            {
                bRealAccount = false;
            }
            else
            {
                bRealAccount = true;
            }

            Boolean bRealKB = false;
            if (realKB == 0)
            {
                bRealKB = false;
            }
            else
            {
                bRealKB = true;
            }

            if (bRealAccount && bRealKB)
            {
                logger.Warn("You can not run DTest_BondArb when real mode(RealAccount + RealKB");
                return;
            }

            if (_bRun)
            {
                logger.Warn("DTest_BondArb is already running");
                return;
            }
            _bRun = true;

            DB_DataLoaderCenter.Ins();
            Infomax_DataLoaderCenter.Ins();

            _arb = arb;
            {
                Thread t = new Thread(new ThreadStart(Run_Raw));
                t.IsBackground = true;
                t.Start();
            }
        }
Exemple #2
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 #3
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);
        }