Esempio n. 1
0
        /// <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);
        }