public override void Create(ConstructGen<double> wts_, ConstructGen<double> c2v_, ConstructGen<double> perf_) { base.Create(wts_, c2v_, perf_); if(RegionBreakdown!=null && RegionBreakdown.Count>0) foreach (WtsAnalyzerFXGroup wa in RegionBreakdown) wa.Create(wts_, c2v_,perf_); NumRebals = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), ExtensionMethods.GenerateArrayAllOfValue<double>(1d, wts_.Dates.Count)), DataEncapsDispValueType.Sum, "NumRebals"); Sharpe = (Statistics.Average(base.Return.Data.Data) * 252d) / (Statistics.Stdev(base.Return.Data.Data) * Math.Sqrt(252d)); ConstructGen<double> ccyTCosts = getTCostForDates(wts_.Dates); double[] tCcosts = new double[wts_.Dates.Count]; if (false) { int[] ndfIndincies = Singleton<FXIDs>.Instance.Where<Currency>(x => x.IsGroup(FXGroup.NDF)) .Select<Currency, int>(x => x.ArrayIndex) .ToArray<int>(); DatedDataCollectionGen<double> adjReturn = (DatedDataCollectionGen<double>) Return.Data.Clone(); for (int i = 0; i < wts_.Dates.Count; ++i) { int indexOfReturn = adjReturn.IndexOf(wts_.Dates[i]); double dayAdj = 0d; double[] wtsToday = wts_.GetValues(wts_.Dates[i]); if (i == 0) { foreach (int ndfIndex in ndfIndincies) dayAdj += -Math.Abs(wtsToday[ndfIndex]*ccyTCosts.GetValue(wts_.Dates[i], ndfIndex)); } else { double[] wtsYest = wts_.GetValues(wts_.Dates[i - 1]); foreach (int ndfIndex in ndfIndincies) dayAdj += -Math.Abs((wtsToday[ndfIndex] - wtsYest[ndfIndex])*ccyTCosts.GetValue(wts_.Dates[i], ndfIndex)); } tCcosts[i] += dayAdj; if (indexOfReturn != -1) adjReturn.Data[indexOfReturn] += dayAdj; } } NDF_TCost = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray(), tCcosts), DataEncapsDispValueType.Sum, "NDF_TCosts"); NetReturn = new DataEncapsValue(Return.Data,DataEncapsDispValueType.Sum, "AdjReturn"); }
public virtual void Create(ConstructGen<double> wts_, ConstructGen<double> c2v_, ConstructGen<double> perf_) { double[] dollWts = new double[wts_.Dates.Count]; double[] turnover = new double[wts_.Dates.Count]; double[] flow = new double[wts_.Dates.Count]; double[] leverage = new double[wts_.Dates.Count]; for(int i=0;i<wts_.Dates.Count;++i) { double[] todayWts = wts_.GetValues(wts_.Dates[i]); dollWts[i]=Statistics.Sum(todayWts); leverage[i] = Statistics.SumAbs(todayWts); if(i==0) { turnover[i] = flow[i]=dollWts[i]; } else { double[] prevWts = wts_.GetValues(wts_.Dates[i-1]); double t = 0d; double f = 0d; for (int j = 0; j < prevWts.Length; ++j) { if (todayWts[j] == prevWts[j] && todayWts[j] == 0d) continue; t += prevWts[j]==0d ? todayWts[j] : Math.Abs((todayWts[j] - prevWts[j]) / prevWts[j]); f += Math.Abs(todayWts[j] - prevWts[j]); } flow[i] = f; turnover[i] = t; } } SumWt = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), dollWts),"SumWt"); Turnover = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), turnover),"Turnover"); Flow = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), flow),"Flow"); Leverage = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), leverage),"Leverage"); //C2V = new DataEncapsValue(new DatedDataCollectionGen<double>(wts_.Dates.ToArray<DateTime>(), ExtensionMethods.GenerateArrayAllOfValue<double>(1d, wts_.Dates.Count)),"C2V"); double[] perf = new double[perf_.Dates.Count]; for (int i = 0; i < perf_.Dates.Count; ++i) perf[i] = Statistics.Sum(perf_.GetValues(perf_.Dates[i])); Return = new DataEncapsValue(new DatedDataCollectionGen<double>(perf_.Dates.ToArray<DateTime>(), perf),DataEncapsDispValueType.Sum,"Return"); }
public override void Create(ConstructGen<double> wts_, ConstructGen<double> c2v_, ConstructGen<double> perf_) { var indicies = Singleton<FXIDs>.Instance.Where<Currency>(x => x.IsGroup(FX_Group)) .Select<Currency, int>(x => x.ArrayIndex) .ToArray(); var wtsForGroup = wts_.GetColumnValues(indicies); var c2vForGroup = c2v_.GetColumnValues(indicies); var perfForGroup = perf_.GetColumnValues(indicies); base.Create(wtsForGroup, c2vForGroup, perf_); double[] ctvDaily = new double[c2vForGroup.Dates.Count]; for (int i = 0; i < c2vForGroup.Dates.Count; ++i) ctvDaily[i] = Statistics.Sum(c2vForGroup.GetValues(c2vForGroup.Dates[i])); C2V = new DataEncapsValue(new DatedDataCollectionGen<double>(c2vForGroup.Dates.ToArray(), ctvDaily),"C2V"); double[] perfDaily = new double[perfForGroup.Dates.Count]; for (int i = 0; i < perfForGroup.Dates.Count; ++i) perfDaily[i] = Statistics.Sum(perfForGroup.GetValues(perfForGroup.Dates[i])); Return = new DataEncapsValue(new DatedDataCollectionGen<double>(perfForGroup.Dates.ToArray(), perfDaily), DataEncapsDispValueType.Sum, "Return"); }