コード例 #1
0
ファイル: STR_DoorTest.cs プロジェクト: HongSeokHwan/legacy
        void CallNotEnterCaseTest(Monitor_Door_Entering_Accessor monitorDoor_EnteringAcr)
        {
            // 여러가지 콜이 안들어가는 경우를 테스트한다.

            // 가격이 낮은 경우

            // Door 옵션의 가격이 타겟 옵션보다 가격이 높은 경우
        }
コード例 #2
0
ファイル: STR_DoorTest.cs プロジェクト: HongSeokHwan/legacy
        void DeepCallTest(Monitor_Door_Entering_Accessor monitorDoor_EnteringAcr)
        {
            double doorStrikeOffset = monitorDoor_EnteringAcr._parent.Parent.Input.DoorStrikeOffset;

            CallPutFlag cp = CallPutFlag.Call;
            DateTime maturity = Util.GetSystemOptionMaturity();

            // call strike
            List<double> strikes = OptionUtil.GetSortedStrikeList(cp);

            for (int i = strikes.Count - 1; i > strikes.Count - 1 - (int)doorStrikeOffset; --i)
            {
                double strike = strikes[i];
                double doorStrike = monitorDoor_EnteringAcr.GetDoorStrike(strike, cp);
                KospiOptionInfo doorKOI = OptionUtil.GetKOI(doorStrike, cp, maturity);
                Assert.AreEqual(doorKOI, null);
            }

            for (int i = 0; i <= strikes.Count - 1 - (int)doorStrikeOffset; ++i)
            {
                double strike = strikes[i];
                double doorStrike = monitorDoor_EnteringAcr.GetDoorStrike(strike, cp);
                KospiOptionInfo doorKOI = OptionUtil.GetKOI(doorStrike, cp, maturity);

                double expected = strike;
                for (int j = 0; j < (int)doorStrikeOffset; ++j)
                {
                    expected = OptionUtil.GetNextStrike(strike);
                }

                Util.IsSameDouble(expected, doorStrike);
            }
        }
コード例 #3
0
ファイル: STR_DoorTest.cs プロジェクト: HongSeokHwan/legacy
        void DoorMonitor_UnderlyingPriceTest()
        {
            String futureCode = KospiFutureUtil.Ins().KFI.Code;

            // null이 오면 stay signal
            Monitor_UnderlyingPrice.Signal signal = _monitorControllerAcr.MonitorPrice.Run(null);
            Assert.AreEqual(signal, Monitor_UnderlyingPrice.Signal.Stay);

            RawMarketData rmd = RmdManager.Ins().GetData(futureCode);
            rmd.CurPrice = 200.0;

            // 제대로 값이 오면 최초에는 무조건 리밸런스 시그널
            signal = _monitorControllerAcr.MonitorPrice.Run(rmd);
            Assert.AreEqual(signal, Monitor_UnderlyingPrice.Signal.Rebalance);

            // 최초 모니터도어는 레디
            Assert.AreEqual(_monitorControllerAcr._monitorDoor.GetState(),
                MonitorController_Door.MonitorState.Ready);

            // 처음에는 Cancel후 Enter가 false
            Assert.AreEqual(_monitorControllerAcr.EnterAfterCancel, false);
            IMonitor_Door next = _monitorControllerAcr._monitorDoor.Run(Monitor_UnderlyingPrice.Signal.Rebalance);
            _monitorControllerAcr._monitorDoor = next;
            // 계속 ready 유지
            Assert.AreEqual(next.GetState(),
                MonitorController_Door.MonitorState.Ready);

            // AfterCancel = true
            _monitorControllerAcr.EnterAfterCancel = true;
            next = _monitorControllerAcr._monitorDoor.Run(Monitor_UnderlyingPrice.Signal.Rebalance);
            _monitorControllerAcr._monitorDoor = next;
            // Entering 도어
            Assert.AreEqual(next.GetState(),
                MonitorController_Door.MonitorState.Entering);

            signal = _monitorControllerAcr.MonitorPrice.Run(rmd);
            // 내부에서 reset이 되므로 Stay sign
            Assert.AreEqual(signal, Monitor_UnderlyingPrice.Signal.Stay);

            // 이제 Entering을 하도록 하자
            Monitor_Door_Entering monitorDoor_Entering = _monitorControllerAcr._monitorDoor as Monitor_Door_Entering;
            Monitor_Door_Entering_Accessor monitorDoor_EnteringAcr = new Monitor_Door_Entering_Accessor(new PrivateObject(monitorDoor_Entering));

            // Call부터 시작하자

            // Deep ITM, OTM의 경우 테스트 한다.
            DeepCallTest(monitorDoor_EnteringAcr);
            CallNotEnterCaseTest(monitorDoor_EnteringAcr);
        }