double GetDefaultIncrement(MaeBokRateAdj.BokRateEvent curEvent, DateTime curDate)
        {
            int remainDays = (curEvent.EndDate - curDate).Days;

            if (remainDays < 0)
            {
                return 0.0;
            }

            if (remainDays < 90)
            {
                double y = (double)remainDays / 90;
                double increment = y * curEvent.TargetIncrement * (-1);
                return increment;
            }
            else if (remainDays <= 670)
            {
                return curEvent.TargetIncrement * (-1);
            }
            else
            {
                double daysAfterStart = (365 * 2 + 1) - remainDays;
                Trace.Assert(daysAfterStart <= 60);
                if (daysAfterStart < 0)
                {
                    return 0.0;
                }
                Trace.Assert(daysAfterStart >= 0);
                double y = daysAfterStart / 60;
                double increment = y * curEvent.TargetIncrement * (-1);
                return increment;
            }
        }
        double GetDoubleDownFactor(MaeBokRateAdj.BokRateEvent lastEvent, MaeBokRateAdj.BokRateEvent curEvent)
        {
            Trace.Assert(lastEvent.UpDown != UpDown.Same);
            Trace.Assert(lastEvent.UpDown != UpDown.Unknown);
            Trace.Assert(curEvent.UpDown != UpDown.Same);
            Trace.Assert(curEvent.UpDown != UpDown.Unknown);

            double factor = 1;
            const double kFactor = 1.3;
            //const double kFactor = 1000;
            double devide = kFactor;
            if (lastEvent.UpDown != curEvent.UpDown)
            {
                devide = kFactor;
            }

            int diff = lastEvent.EventKey - curEvent.EventKey;
            for (int i = 0; i < diff; ++i)
            {
                factor /= devide;
            }
            return factor;
        }
        public AssetAdjustment GetIncrement(
            MaeBokRateAdj.BokRateEvent lastEvent, 
            List<MaeBokRateAdj.BokRateEvent> events,
            DateTime curDate,
            double weight)
        {
            List<double> increments = new List<double>();
            foreach (MaeBokRateAdj.BokRateEvent ev in events)
            {
                double curIncrement = GetIncrementEach(lastEvent, ev, curDate);
                increments.Add(curIncrement);
            }

            double totalIncrement = weight * (1.0 + increments.Sum());

            if (totalIncrement < 0.0)
            {
                logger.Warn("BokRate TotalIncrement < 0.0 ({0})", totalIncrement);
                //Trace.Assert(totalIncrement >= 0.0);
                totalIncrement = 0.0;
            }

            return new AssetAdjustment(totalIncrement, 1, 1);
        }
Esempio n. 4
0
        void RunTemp()
        {
            StrategyBaseInput input = new StrategyBaseInput();
            input.StartDate = new DateTime(2001, 1, 1);
            input.EndDate = new DateTime(2011, 5, 1);
            //input.EndDate = DateTime.Now;
            input.InitInvestAmount = (long)100 * 100000000;

            DefaultStrategy strategy = new DefaultStrategy("", input);
            strategy.SetBaseAlloc(new StaticAlloc(0.33, 0.33, 0.34));
            strategy.Build();

            DollarPriceAdj dollarPriceAdj = new DollarPriceAdj(0.9);
            KrxCreditDepositRateAdjustment cdAdj = new KrxCreditDepositRateAdjustment(new CreditPolicyWithMA(1.5));
            KrxCreditDepositRateAdjustment cdAdj2 = new KrxCreditDepositRateAdjustment(new CreditPolicyWithUpDownMA(1.5));
            MaeKoVolAdj maeAdj = new MaeKoVolAdj(1.2);
            MaeBokRateAdj maeBokRateAdj = new MaeBokRateAdj(new BokRatePolicy_Static(), 1.0);
            MacroAA_Adj macroAA_Adj = new MacroAA_Adj();
            ExcelAdj excelAdj = new ExcelAdj("data\\LinMacEquityAdj.xlsx", "Sheet1", 0.8);
            //ExcelAdj excelAdj = new ExcelAdj("LinMacEquityAdj.xlsx", "LinMacEquityAdj_result");

            //strategy.AddAdjustment(dollarPriceAdj, "DP");
            ////strategy.AddAdjustment(cdAdj, "CD1");
            strategy.AddAdjustment(cdAdj2, "CD2");
            strategy.AddAdjustment(maeAdj, "MaeKoVol");
            strategy.AddAdjustment(maeBokRateAdj, "MaeBokRate");
            strategy.AddAdjustment(macroAA_Adj, "MacroAA");
            strategy.AddAdjustment(excelAdj, "LinMacEquityAdj");

            List<IResultHandler> resultHandlers = new List<IResultHandler>();
            //resultHandlers.Add(new CsvOutHandler());
            resultHandlers.Add(this);

            Experiment experiment = new Experiment(strategy, resultHandlers);
            experiment.Run();
        }
        double GetIncrementEach(
            MaeBokRateAdj.BokRateEvent lastEvent, 
            MaeBokRateAdj.BokRateEvent curEvent, 
            DateTime curDate)
        {
            if (curEvent.EndDate < curDate)
            {
                // 기한이 지났다.
                return 0;
            }
            double doubleDownFactor = GetDoubleDownFactor(lastEvent, curEvent);
            double defaultIncrement = GetDefaultIncrement(curEvent, curDate);

            double ret =  defaultIncrement * doubleDownFactor;
            return ret;
        }