/// <summary> /// 对代码集合进行回测 /// </summary> /// <param name="codes"></param> /// <returns></returns> protected virtual List <TradeRecords> doTestByCodes(List <String> codes) { if (codes == null || codes.Count <= 0) { return(new List <TradeRecords>()); } IndicatorRepository repository = (IndicatorRepository)backtestParam.Get <Object>("repository"); if (repository == null) { return(null); } if (buyer == null || Seller == null) { throw new Exception("买卖策略对象无效"); } List <TradeRecords> allTrades = new List <TradeRecords>(); foreach (String code in codes) { TimeSerialsDataSet ds = repository[code]; if (ds == null) { continue; } TradeRecords tr = buyer.Execute(code, props, backtestParam); if (tr == null || tr.Bouts.Count <= 0) { continue; } seller.Execute(tr, props, backtestParam); //最后删除未完成的回合 tr.RemoveUnCompeletedBouts(); if (tr.Bouts.Count > 0) { allTrades.Add(tr); tr.Print(log, true); //tr.Print(log,backtestParam.Get<bool>("printdetailed",false)); log.Info("总回合数=" + allTrades.Sum(x => x.Bouts.Count).ToString() + "," + "总胜率=" + (allTrades.Sum(x => x.WinCount) * 1.0 / allTrades.Sum(x => x.Bouts.Count)).ToString("F3")); } } return(allTrades); }