void TestSweeper_BondArb_SN_Running(MonitorEnter_BondArb_Accessor me, Sweeper_BondArb sweeper) { Sweeper_BondArb_Accessor accessor = new Sweeper_BondArb_Accessor(new PrivateObject(sweeper)); Assert.AreEqual(accessor._bDone, false); SweepUnitTemplate longSweepUnitTemplate = accessor._sweepUnitLong; SweepUnitTemplate_Accessor longSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(longSweepUnitTemplate)); SweepUnitContext_Bond_Long longContext = longSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Long; SweepUnitContext_Bond_Long_Accessor longContext_Accessor = new SweepUnitContext_Bond_Long_Accessor(new PrivateObject(longContext)); SweepUnitTemplate shortSweepUnitTemplate = accessor._sweepUnitShort; SweepUnitTemplate_Accessor shortSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(shortSweepUnitTemplate)); SweepUnitContext_Bond_Short shortContext = shortSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Short; SweepUnitContext_Bond_Short_Accessor shortContext_Accessor = new SweepUnitContext_Bond_Short_Accessor(new PrivateObject(shortContext)); // 1. 소액 25,000,000 체결 POrder initLongOrder0 = longContext_Accessor._initOrders[0]; // 주문번호 0 initLongOrder0.OrderNumber = 0; initLongOrder0.Update(25 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), 0); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 0); initLongOrder0.Update(50 * CommonConst._1_000_000, 5000, true); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), 0); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 0); POrder initLongOrder1 = longContext_Accessor._initOrders[1]; initLongOrder1.OrderNumber = 0; initLongOrder1.Update(25 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder1.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder1), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), 0); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 0); initLongOrder1.Update(49999000, 5000, false); Assert.AreEqual(initLongOrder1.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder1), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), 0); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 0); // 1억째 되었다 initLongOrder1.Update(50 * CommonConst._1_000_000, 5000, true); Assert.AreEqual(initLongOrder1.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder1), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 100 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 1); POrder initLongOrder2 = longContext_Accessor._initOrders[2]; initLongOrder2.OrderNumber = 0; initLongOrder2.Update(50 * CommonConst._1_000_000, 5000, true); Assert.AreEqual(initLongOrder2.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder2), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 100 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 1); POrder initLongOrder3 = longContext_Accessor._initOrders[3]; initLongOrder3.OrderNumber = 0; initLongOrder3.Update(49999000, 5000, false); Assert.AreEqual(initLongOrder3.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder3), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 100 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 1); initLongOrder3.Update(50000000, 5000, true); Assert.AreEqual(initLongOrder3.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder3), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 200 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 2); // balance order POrder balanceOrder1 = shortContext_Accessor.RealOrdersShort[0]; Assert.AreEqual(balanceOrder1.Code, _kHousingBondCode_Normal); Assert.AreEqual(balanceOrder1.LongShort, TradingDirection.Short); Assert.AreEqual(balanceOrder1.ReqCount, 100 * CommonConst._1_000_000); Assert.AreEqual(balanceOrder1.ReqPrice, 15000); POrder balanceOrder2 = shortContext_Accessor.RealOrdersShort[1]; Assert.AreEqual(balanceOrder2.Code, _kHousingBondCode_Normal); Assert.AreEqual(balanceOrder2.LongShort, TradingDirection.Short); Assert.AreEqual(balanceOrder2.ReqCount, 100 * CommonConst._1_000_000); Assert.AreEqual(balanceOrder2.ReqPrice, 15000); // 2. 일반을 79,900,000만큼 체결시킨다. balanceOrder1.Update(79900 * CommonConst._1_000, 5000, false); Assert.AreEqual(balanceOrder1.ShortCutTargetOfContractCallBack.Contract_CallBack(balanceOrder1), true); // 4. Sweep 테스트를 진행한다. longSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; shortSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; balanceOrder1.OrderNumber = 0; balanceOrder2.OrderNumber = 0; POrder initLongOrder4 = longContext_Accessor._initOrders[4]; POrder initLongOrder5 = longContext_Accessor._initOrders[5]; initLongOrder4.OrderNumber = 0; initLongOrder5.OrderNumber = 0; Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._3_WaitUntilCancelAllOrders); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._3_WaitUntilCancelAllOrders); initLongOrder4.Update(CommonConst._1_000, 5000, false); initLongOrder4.UpdateCancelMessage(initLongOrder4.ReqCount - CommonConst._1_000); initLongOrder5.UpdateCancelMessage(initLongOrder5.ReqCount); balanceOrder1.UpdateCancelMessage(balanceOrder1.ReqCount - balanceOrder1.ContractedCount); balanceOrder2.UpdateCancelMessage(balanceOrder2.ReqCount - balanceOrder2.ContractedCount); Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._4_WaitingRunSign); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._4_WaitingRunSign); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 300 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 300 * CommonConst._1_000_000); //Resume Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 200 * CommonConst._1_000_000 + CommonConst._1_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * (200 * CommonConst._1_000_000 + CommonConst._1_000)); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._7_Done); POrder sweepOrder1 = shortContext_Accessor.RealOrdersShort[2]; POrder sweepOrder2 = shortContext_Accessor.RealOrdersShort[3]; POrder sweepOrder3 = shortContext_Accessor.RealOrdersShort[4]; //121,001,000 Assert.AreEqual(sweepOrder1.ReqCount, 50 * CommonConst._1_000_000); Assert.AreEqual(sweepOrder2.ReqCount, 50 * CommonConst._1_000_000); Assert.AreEqual(sweepOrder3.ReqCount, 20101000); Assert.AreEqual(sweepOrder1.Code, _kHousingBondCode_Small); Assert.AreEqual(sweepOrder2.Code, _kHousingBondCode_Small); Assert.AreEqual(sweepOrder3.Code, _kHousingBondCode_Small); Assert.AreEqual(sweepOrder1.LongShort, TradingDirection.Short); Assert.AreEqual(sweepOrder2.LongShort, TradingDirection.Short); Assert.AreEqual(sweepOrder3.LongShort, TradingDirection.Short); Assert.AreEqual(sweepOrder1.ReqPrice, 15000); Assert.AreEqual(sweepOrder2.ReqPrice, 15000); Assert.AreEqual(sweepOrder3.ReqPrice, 15000); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._6_MonitorRequestedSweepOrders); Timer_Accessor mute_Accessor = new Timer_Accessor(new PrivateObject(shortSweepUnitTemplate_Accessor._mute)); // 더이상 On이 풀리지 않는다. Assert.AreEqual(mute_Accessor.m_end > DateTime.Now.AddHours(1), true); // 여기서 많이 불러봐도 소용없다. Assert.AreEqual(sweeper.Run(), false); sweepOrder1.Update(50000000, 15000, true); sweepOrder2.Update(50000000, 15000, true); Assert.AreEqual(sweeper.Run(), false); sweepOrder3.Update(20101000, 15000, true); Assert.AreEqual(sweeper.Run(), true); }
void TestSweeper_BondArb_SN_Init(MonitorEnter_BondArb_Accessor me, Sweeper_BondArb sweeper) { Sweeper_BondArb_Accessor accessor = new Sweeper_BondArb_Accessor(new PrivateObject(sweeper)); Assert.AreEqual(accessor._bDone, false); SweepUnitTemplate longSweepUnitTemplate = accessor._sweepUnitLong; SweepUnitTemplate_Accessor longSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(longSweepUnitTemplate)); SweepUnitContext_Bond_Long longContext = longSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Long; SweepUnitContext_Bond_Long_Accessor longContext_Accessor = new SweepUnitContext_Bond_Long_Accessor(new PrivateObject(longContext)); SweepUnitTemplate shortSweepUnitTemplate = accessor._sweepUnitShort; SweepUnitTemplate_Accessor shortSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(shortSweepUnitTemplate)); SweepUnitContext_Bond_Short shortContext = shortSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Short; SweepUnitContext_Bond_Short_Accessor shortContext_Accessor = new SweepUnitContext_Bond_Short_Accessor(new PrivateObject(shortContext)); // 초기 주문이 잘 들어갔는지 검사한다. // 템플릿 상태는 모두 _1_MuteFewSecsAfterInitOrders이고 Long쪽은 주문이 들어가 있어야 한다. Assert.AreEqual(longSweepUnitTemplate_Accessor._aging, 0); Assert.AreEqual(shortSweepUnitTemplate_Accessor._aging, 0); Assert.AreEqual(longSweepUnitTemplate_Accessor._bCompleteQuickly, false); Assert.AreEqual(shortSweepUnitTemplate_Accessor._bCompleteQuickly, false); Assert.AreEqual(longSweepUnitTemplate_Accessor._bResumed, false); Assert.AreEqual(shortSweepUnitTemplate_Accessor._bResumed, false); Assert.AreEqual(longSweepUnitTemplate_Accessor._maxWaiting, null); Assert.AreEqual(shortSweepUnitTemplate_Accessor._maxWaiting, null); Assert.AreEqual(longSweepUnitTemplate_Accessor._mute.On(), true); Assert.AreEqual(shortSweepUnitTemplate_Accessor._mute.On(), true); Assert.AreEqual(longSweepUnitTemplate_Accessor._muteSec, 5); Assert.AreEqual(shortSweepUnitTemplate_Accessor._muteSec, 5); Assert.AreEqual(longSweepUnitTemplate_Accessor._sweepMonitorSec, SweepUnitTemplate.SLOW_SWEEP_SEC); Assert.AreEqual(shortSweepUnitTemplate_Accessor._sweepMonitorSec, SweepUnitTemplate.SLOW_SWEEP_SEC); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurOverviewState, SweepUnitTemplate.OverviewState.Enter); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurOverviewState, SweepUnitTemplate.OverviewState.Enter); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._1_MuteFewSecsAfterInitOrders); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._1_MuteFewSecsAfterInitOrders); Assert.AreEqual(longSweepUnitTemplate_Accessor.GetSignedPossibleContractCount(), 300 * CommonConst._1_000_000); // 주문 낸 것이 없으로 Short part에서는 0 Assert.AreEqual(shortSweepUnitTemplate_Accessor.GetSignedPossibleContractCount(), 0); // 아직 체결된 것이 없으므로 둘다 0 Assert.AreEqual(longSweepUnitTemplate_Accessor.GetSignedContractedCount(), 0); Assert.AreEqual(shortSweepUnitTemplate_Accessor.GetSignedContractedCount(), 0); Assert.AreEqual(longSweepUnitTemplate_Accessor.IsException(), false); Assert.AreEqual(shortSweepUnitTemplate_Accessor.IsException(), false); Assert.AreEqual(longSweepUnitTemplate_Accessor.IsOverAging(), false); Assert.AreEqual(shortSweepUnitTemplate_Accessor.IsOverAging(), false); // Context를 검사한다. Assert.AreEqual(longContext_Accessor._bCalledAfterSetTarget, false); Assert.AreEqual(longContext_Accessor._dummyShortOrderForReserveBidAskCount.ReqCount, 300 * CommonConst._1_000_000); Assert.AreEqual(longContext_Accessor._dummyShortOrderForReserveBidAskCount.ReqPrice, 15000); Assert.AreEqual(longContext_Accessor._enterMarketType, MarketType._1_Bond_소액); Assert.AreEqual(longContext_Accessor._initEnterPrice, 5000); Assert.AreEqual(longContext_Accessor._initOrders.Count, 6); POrder initLongOrder = longContext_Accessor._initOrders[0]; Assert.AreEqual(initLongOrder.ReqCount, 50 * CommonConst._1_000_000); Assert.AreEqual(initLongOrder.ReqPrice, 5000); Assert.AreEqual(initLongOrder.Market, MarketType._1_Bond_소액); Assert.AreEqual(initLongOrder.LongShort, TradingDirection.Long); Assert.AreEqual(initLongOrder.Code, _kHousingBondCode_Small); Assert.AreEqual(initLongOrder.CodeNoTail, _kHousingBondCodeNoTail); Assert.AreEqual(shortContext_Accessor._enterMarketType, MarketType._1_Bond_소액); Assert.AreEqual(shortContext_Accessor._pairMarketType, MarketType._0_Bond_일반); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 300 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.EnterCode, _kHousingBondCode_Small); Assert.AreEqual(shortContext_Accessor.LongShort, TradingDirection.Short); Assert.AreEqual(shortContext_Accessor.PairCode, _kHousingBondCode_Normal); }
void TestSweeper_BondArb_NR_Running(MonitorEnter_BondArb_Accessor me, Sweeper_BondArb sweeper) { Sweeper_BondArb_Accessor accessor = new Sweeper_BondArb_Accessor(new PrivateObject(sweeper)); Assert.AreEqual(accessor._bDone, false); SweepUnitTemplate longSweepUnitTemplate = accessor._sweepUnitLong; SweepUnitTemplate_Accessor longSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(longSweepUnitTemplate)); SweepUnitContext_Bond_Long longContext = longSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Long; SweepUnitContext_Bond_Long_Accessor longContext_Accessor = new SweepUnitContext_Bond_Long_Accessor(new PrivateObject(longContext)); SweepUnitTemplate shortSweepUnitTemplate = accessor._sweepUnitShort; SweepUnitTemplate_Accessor shortSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(shortSweepUnitTemplate)); SweepUnitContext_Bond_Short shortContext = shortSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Short; SweepUnitContext_Bond_Short_Accessor shortContext_Accessor = new SweepUnitContext_Bond_Short_Accessor(new PrivateObject(shortContext)); // 1. 소액 25,000,000 체결 POrder initLongOrder0 = longContext_Accessor._initOrders[0]; // 주문번호 0 initLongOrder0.OrderNumber = 0; initLongOrder0.Update(25 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 25000000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 1); initLongOrder0.Update(50 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 50000000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 2); initLongOrder0.Update(200 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 200 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 3); POrder balanceOrder0 = shortContext_Accessor.RealOrdersShort[0]; POrder balanceOrder1 = shortContext_Accessor.RealOrdersShort[1]; POrder balanceOrder2 = shortContext_Accessor.RealOrdersShort[2]; balanceOrder0.OrderNumber = 0; balanceOrder1.OrderNumber = 0; balanceOrder2.OrderNumber = 0; // balance order Assert.AreEqual(balanceOrder0.Code, _kDoosanCode_Retail); Assert.AreEqual(balanceOrder0.LongShort, TradingDirection.Short); Assert.AreEqual(balanceOrder0.ReqCount, 25 * CommonConst._1_000_000); Assert.AreEqual(balanceOrder0.ReqPrice, 15000); // balance order 25,000,000 체결시킨다 balanceOrder0.Update(25 * CommonConst._1_000_000, 15000, true); // 4. Sweep 테스트를 진행한다. longSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; shortSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._3_WaitUntilCancelAllOrders); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._3_WaitUntilCancelAllOrders); initLongOrder0.UpdateCancelMessage(initLongOrder0.ReqCount - initLongOrder0.ContractedCount); balanceOrder0.UpdateCancelMessage(balanceOrder0.ReqCount - balanceOrder0.ContractedCount); balanceOrder1.UpdateCancelMessage(balanceOrder1.ReqCount - balanceOrder1.ContractedCount); balanceOrder2.UpdateCancelMessage(balanceOrder2.ReqCount - balanceOrder2.ContractedCount); Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._4_WaitingRunSign); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._4_WaitingRunSign); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 300 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 300 * CommonConst._1_000_000); //Resume Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 200 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 200 * CommonConst._1_000_000); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._7_Done); POrder sweepOrder = shortContext_Accessor.RealOrdersShort[3]; Assert.AreEqual(sweepOrder.ReqCount, 175 * CommonConst._1_000_000); Assert.AreEqual(sweepOrder.Code, _kDoosanCode_Retail); Assert.AreEqual(sweepOrder.LongShort, TradingDirection.Short); Assert.AreEqual(sweepOrder.ReqPrice, 15000); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._6_MonitorRequestedSweepOrders); Timer_Accessor mute_Accessor = new Timer_Accessor(new PrivateObject(shortSweepUnitTemplate_Accessor._mute)); // 더이상 On이 풀리지 않는다. Assert.AreEqual(mute_Accessor.m_end > DateTime.Now.AddHours(1), true); // 여기서 많이 불러봐도 소용없다. Assert.AreEqual(sweeper.Run(), false); sweepOrder.Update(100 * CommonConst._1_000_000, 15000, false); Assert.AreEqual(sweeper.Run(), false); sweepOrder.Update(175 * CommonConst._1_000_000, 15000, true); Assert.AreEqual(sweeper.Run(), true); }
void LoadRemainPositionAndRun_SN() { Unittest_BondArbUtil.ForcedClearPOrderBidAskManager(); STR_Arb_Accessor arb = Unittest_BondArbUtil.CreateNewStrArbAccessor(); StrategyNode node = arb._bondArbNode as StrategyNode; StrategyNode_Accessor nodeAccessor = new StrategyNode_Accessor(new PrivateObject(node)); MonitorEnter_BondArb me = nodeAccessor._monitorEnter as MonitorEnter_BondArb; MonitorEnter_BondArb_Accessor meAccessor = new MonitorEnter_BondArb_Accessor(new PrivateObject(me)); // TakeOver arb.TakeOverBondArbYesterdayPosition(Const.UNITTEST_BOND_ARB_REMAIN_POSITION_PATH); List<ISweeper> sweepers = node.GetSweeperCollection().GetLives(); Sweeper_BondArb sweeper = sweepers[0] as Sweeper_BondArb; Sweeper_BondArb_Accessor sweeper_Accessor = new Sweeper_BondArb_Accessor(new PrivateObject(sweeper)); if (DateTime.Now.Hour >= 9 && DateTime.Now.Hour <= 15) { Assert.AreEqual(arb.IsMonitorLimitOK(), true); } else { Assert.AreEqual(arb.IsMonitorLimitOK(), false); } Assert.AreEqual(arb.GetTotalSweeperLiveCount(), 1); // TakeOver후 상태 점검 Assert.AreEqual(node.GetSweeperCollection().GetLiveSweeperCount(), 1); String codeNoTail = BondUtil.GetCodeNoTail(sweeper.EnterCodeWithMarketType); long possibleShortCount = arb.BondAccount.LongBlockManager.GetPossibleShortCountUsingCodeNoTail(codeNoTail); Assert.AreEqual(possibleShortCount, 99999 * CommonConst._1_000); SetAsZeroAllCodes(); arb.Run(); possibleShortCount = arb.BondAccount.LongBlockManager.GetPossibleShortCountUsingCodeNoTail(codeNoTail); Assert.AreEqual(possibleShortCount, 0); Assert.AreEqual(sweeper_Accessor._sweepUnitShort.Context.GetRealOrders().Count, 2); List<POrder> orders = sweeper_Accessor._sweepUnitShort.Context.GetRealOrders(); POrder order0 = orders[0]; POrder order1 = orders[1]; Assert.AreEqual(orders.Count, 2); Assert.AreEqual(order0.ReqCount, 50 * CommonConst._1_000_000); Assert.AreEqual(order0.ReqPrice, 15000); // SN S로 주문 Assert.AreEqual(order0.Code, sweeper.EnterCodeWithMarketType); Assert.AreEqual(order0.LongShort, TradingDirection.Short); Assert.AreEqual(order1.ReqCount, 49999 * CommonConst._1_000); Assert.AreEqual(order1.ReqPrice, 15000); // SN S로 주문 Assert.AreEqual(order1.Code, sweeper.EnterCodeWithMarketType); Assert.AreEqual(order1.LongShort, TradingDirection.Short); arb.Run(); order0.Update(order0.ReqCount, order0.ReqPrice, true); arb.Run(); possibleShortCount = arb.BondAccount.LongBlockManager.GetPossibleShortCountUsingCodeNoTail(codeNoTail); Assert.AreEqual(possibleShortCount, 0); Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(arb.GetTotalSweeperLiveCount(), 1); order1.Update(order1.ReqCount, order1.ReqPrice, true); arb.Run(); possibleShortCount = arb.BondAccount.LongBlockManager.GetPossibleShortCountUsingCodeNoTail(codeNoTail); Assert.AreEqual(possibleShortCount, 0); Assert.AreEqual(sweeper.Run(), true); Assert.AreEqual(arb.GetTotalSweeperLiveCount(), 0); }
void CreateOneSweeperAndSaveToUnittestFolder_SN() { // STR_Arb을 생성하여 MonitorEnter_BondArbTest를 생성한다. STR_Arb_Accessor arb = Unittest_BondArbUtil.CreateNewStrArbAccessor(); StrategyNode node = arb._bondArbNode as StrategyNode; StrategyNode_Accessor nodeAccessor = new StrategyNode_Accessor(new PrivateObject(node)); MonitorEnter_BondArb me = nodeAccessor._monitorEnter as MonitorEnter_BondArb; MonitorEnter_BondArb_Accessor meAccessor = new MonitorEnter_BondArb_Accessor(new PrivateObject(me)); Sweeper_BondArb sweeper = GetHousingSweeperSN(meAccessor); { Sweeper_BondArb_Accessor accessor = new Sweeper_BondArb_Accessor(new PrivateObject(sweeper)); SweepUnitTemplate longSweepUnitTemplate = accessor._sweepUnitLong; SweepUnitTemplate_Accessor longSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(longSweepUnitTemplate)); SweepUnitContext_Bond_Long longContext = longSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Long; SweepUnitContext_Bond_Long_Accessor longContext_Accessor = new SweepUnitContext_Bond_Long_Accessor(new PrivateObject(longContext)); SweepUnitTemplate shortSweepUnitTemplate = accessor._sweepUnitShort; SweepUnitTemplate_Accessor shortSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(shortSweepUnitTemplate)); SweepUnitContext_Bond_Short shortContext = shortSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Short; SweepUnitContext_Bond_Short_Accessor shortContext_Accessor = new SweepUnitContext_Bond_Short_Accessor(new PrivateObject(shortContext)); // 1. 소액 99,999,000 체결 longContext_Accessor._initOrders[0].OrderNumber = 0; longContext_Accessor._initOrders[1].OrderNumber = 0; longContext_Accessor._initOrders[2].OrderNumber = 0; longContext_Accessor._initOrders[3].OrderNumber = 0; longContext_Accessor._initOrders[4].OrderNumber = 0; longContext_Accessor._initOrders[5].OrderNumber = 0; longContext_Accessor._initOrders[0].Update(50000 * CommonConst._1_000, longContext_Accessor._initOrders[0].ReqPrice, true); longContext_Accessor._initOrders[1].Update(49999 * CommonConst._1_000, longContext_Accessor._initOrders[1].ReqPrice, false); // 4. Sweep 테스트를 진행한다. longSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; shortSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; Assert.AreEqual(sweeper.Run(), false); longContext_Accessor._initOrders[1].UpdateCancelMessage(1000); longContext_Accessor._initOrders[2].UpdateCancelMessage(longContext_Accessor._initOrders[2].ReqCount); longContext_Accessor._initOrders[3].UpdateCancelMessage(longContext_Accessor._initOrders[3].ReqCount); longContext_Accessor._initOrders[4].UpdateCancelMessage(longContext_Accessor._initOrders[4].ReqCount); longContext_Accessor._initOrders[5].UpdateCancelMessage(longContext_Accessor._initOrders[5].ReqCount); Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 300 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 300 * CommonConst._1_000_000); //Resume Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 99999 * CommonConst._1_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 99999 * CommonConst._1_000); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._7_Done); POrder sweepOrder0 = shortContext_Accessor.RealOrdersShort[0]; POrder sweepOrder1 = shortContext_Accessor.RealOrdersShort[1]; Assert.AreEqual(sweepOrder0.ReqCount, 50000 * CommonConst._1_000); Assert.AreEqual(sweepOrder0.ReqPrice, 15000); Assert.AreEqual(sweepOrder1.ReqCount, 49999 * CommonConst._1_000); Assert.AreEqual(sweepOrder1.ReqPrice, 15000); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._6_MonitorRequestedSweepOrders); Timer_Accessor mute_Accessor = new Timer_Accessor(new PrivateObject(shortSweepUnitTemplate_Accessor._mute)); // 더이상 On이 풀리지 않는다. Assert.AreEqual(mute_Accessor.m_end > DateTime.Now.AddHours(1), true); // 여기서 많이 불러봐도 소용없다. Assert.AreEqual(sweeper.Run(), false); } // 2. save to unittest folder arb.SaveBondArbRemainPosition(Const.UNITTEST_BOND_ARB_REMAIN_POSITION_PATH); SetAsZeroAllCodes(); }
void CreateOneSweeperAndSaveToUnittestFolder_NR() { // STR_Arb을 생성하여 MonitorEnter_BondArbTest를 생성한다. STR_Arb_Accessor arb = Unittest_BondArbUtil.CreateNewStrArbAccessor(); StrategyNode node = arb._bondArbNode as StrategyNode; StrategyNode_Accessor nodeAccessor = new StrategyNode_Accessor(new PrivateObject(node)); MonitorEnter_BondArb me = nodeAccessor._monitorEnter as MonitorEnter_BondArb; MonitorEnter_BondArb_Accessor meAccessor = new MonitorEnter_BondArb_Accessor(new PrivateObject(me)); // 1. Create one sweeper BondPair doosanBondPair = null; RawMarketData rmdNormal = null; RawMarketData rmdRetail = null; SetCreditBondPairAndRmds(ref doosanBondPair, ref rmdNormal, ref rmdRetail); SetAsZeroRMD(ref rmdNormal); SetAsZeroRMD(ref rmdRetail); int ret = 0; // 5000에 일반을 사서 15000에 소매에 팔 수 있는 기회이다 SetImmeLongPart(rmdNormal, 300 * CommonConst._1_000 * CommonConst._1_000, 5000); SetImmeShortPart(rmdNormal, 0, 0); SetImmeLongPart(rmdRetail, 0, 0); SetImmeShortPart(rmdRetail, 300 * CommonConst._1_000 * CommonConst._1_000, 15000); me.BeforeEnterSweeperChance(); ret = meAccessor.CheckArbChance(doosanBondPair); Sweeper_BondArb sweeper = new Sweeper_BondArb(doosanBondPair, meAccessor._bondAccount); meAccessor._node.GetSweeperCollection().Add(sweeper); { Sweeper_BondArb_Accessor accessor = new Sweeper_BondArb_Accessor(new PrivateObject(sweeper)); Assert.AreEqual(accessor._bDone, false); SweepUnitTemplate longSweepUnitTemplate = accessor._sweepUnitLong; SweepUnitTemplate_Accessor longSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(longSweepUnitTemplate)); SweepUnitContext_Bond_Long longContext = longSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Long; SweepUnitContext_Bond_Long_Accessor longContext_Accessor = new SweepUnitContext_Bond_Long_Accessor(new PrivateObject(longContext)); SweepUnitTemplate shortSweepUnitTemplate = accessor._sweepUnitShort; SweepUnitTemplate_Accessor shortSweepUnitTemplate_Accessor = new SweepUnitTemplate_Accessor(new PrivateObject(shortSweepUnitTemplate)); SweepUnitContext_Bond_Short shortContext = shortSweepUnitTemplate_Accessor.Context as SweepUnitContext_Bond_Short; SweepUnitContext_Bond_Short_Accessor shortContext_Accessor = new SweepUnitContext_Bond_Short_Accessor(new PrivateObject(shortContext)); POrder initLongOrder0 = longContext_Accessor._initOrders[0]; // 주문번호 0 initLongOrder0.OrderNumber = 0; initLongOrder0.Update(25 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 25000000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 1); initLongOrder0.Update(50 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 50000000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 2); // 2억 체결 initLongOrder0.Update(200 * CommonConst._1_000_000, 5000, false); Assert.AreEqual(initLongOrder0.ShortCutTargetOfContractCallBack.Contract_CallBack(initLongOrder0), true); Assert.AreEqual(shortSweepUnitTemplate.GetSignedPossibleContractCount(), (-1) * 200 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.RealOrdersShort.Count, 3); POrder balanceOrder0 = shortContext_Accessor.RealOrdersShort[0]; POrder balanceOrder1 = shortContext_Accessor.RealOrdersShort[1]; POrder balanceOrder2 = shortContext_Accessor.RealOrdersShort[2]; balanceOrder0.OrderNumber = 0; balanceOrder1.OrderNumber = 0; balanceOrder2.OrderNumber = 0; // balance order Assert.AreEqual(balanceOrder0.Code, _kDoosanCode_Retail); Assert.AreEqual(balanceOrder0.LongShort, TradingDirection.Short); Assert.AreEqual(balanceOrder0.ReqCount, 25 * CommonConst._1_000_000); Assert.AreEqual(balanceOrder0.ReqPrice, 15000); // balance order 25,000,000 체결시킨다 balanceOrder0.Update(25 * CommonConst._1_000_000, 15000, true); // Sweep longSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; shortSweepUnitTemplate_Accessor.CurState = SweepUnitTemplate.StateEnum._2_WaitUntilGotAllOrderNumber; Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._3_WaitUntilCancelAllOrders); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._3_WaitUntilCancelAllOrders); initLongOrder0.UpdateCancelMessage(initLongOrder0.ReqCount - initLongOrder0.ContractedCount); balanceOrder0.UpdateCancelMessage(balanceOrder0.ReqCount - balanceOrder0.ContractedCount); balanceOrder1.UpdateCancelMessage(balanceOrder1.ReqCount - balanceOrder1.ContractedCount); balanceOrder2.UpdateCancelMessage(balanceOrder2.ReqCount - balanceOrder2.ContractedCount); Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._4_WaitingRunSign); Assert.AreEqual(shortSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._4_WaitingRunSign); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 300 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 300 * CommonConst._1_000_000); //Resume Assert.AreEqual(sweeper.Run(), false); Assert.AreEqual(longContext_Accessor.CurSignedTargetCount, 200 * CommonConst._1_000_000); Assert.AreEqual(shortContext_Accessor.CurSignedTargetCount, (-1) * 200 * CommonConst._1_000_000); Assert.AreEqual(longSweepUnitTemplate_Accessor.CurState, SweepUnitTemplate.StateEnum._7_Done); } // 2. save to unittest folder arb.SaveBondArbRemainPosition(Const.UNITTEST_BOND_ARB_REMAIN_POSITION_PATH); SetAsZeroAllCodes(); }