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); }
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; }