static DrawDown GetDrawDown(DateTime startDate, DateTime endDate, IPnLResult input) { DateTime curDate = startDate; double startDateCumPnL = input.GetCumPnL(startDate); DrawDown dd = new DrawDown(); dd.StartDate = startDate; dd.EndDate = endDate; while (curDate <= endDate) { if (input.IsExistDate(curDate)) { double curDateCumPnL = input.GetCumPnL(curDate); double diff = curDateCumPnL - startDateCumPnL; if (diff <= dd.Value) { //update dd.Value = diff; dd.EndDate = curDate; } } curDate = curDate.AddDays(1); } return dd; }
void HandleResult(IPnLResult result) { foreach (IPnLResultHandler handler in this._resultHandlers) { SimCaseResultOverview overview = new SimCaseResultOverview(_input, 1, 1); handler.HandleResult(overview, result); } }
public static double GetPPM(IPnLResult input) { DrawDown mdd = GetMaxDrawDown(input); double pnl = GetAvgPnLPerYear(input); return pnl / Math.Abs(mdd.Value); }
public static double GetAvgPnLPerYear(IPnLResult input) { double totalYear = (double)((input.EndDate - input.StartDate).Days) / 365.00; double pnlPerYear = input.TotalPnL / totalYear; return pnlPerYear; }
public static DrawDown GetMaxDrawDown(IPnLResult input) { DateTime curDate = input.StartDate; DrawDown mdd = new DrawDown(); while (curDate <= input.EndDate) { if (input.IsExistDate(curDate)) { DrawDown dd = GetDrawDown(curDate, input.EndDate, input); if (dd.Value < mdd.Value) { mdd = dd; } } curDate = curDate.AddDays(1); } return mdd; }
void AddNewResult_Raw(SimCaseResultOverview experimentData, IPnLResult result) { _result.Add(result); UpdateDataGridView(experimentData); }
public void HandleResult(SimCaseResultOverview experimentData, IPnLResult result) { this.Invoke(new AddNewResult(AddNewResult_Raw), new object[] { experimentData, result }); //this.Invoke(new AddNewResult(AddNewResult_Raw), result); }