def runbacktest(begin, codename, dir, end, paint=True, star=False): """ 设置策略环境参数,并运行部分回测策略 :param begin: 回测开始时间 :param codename: 回测股票代码或名称 :param dir: 作图目录地址 :param end: 回测结束时间,默认当前 :param paint: bool值,是否画图,默认为True :param star: bool值,最后一个标记星星,默认为False :return: 返回策略环境对象整体和图像地址 """ print(f"BS日线策略:正在回测{codename}...") try: klist = ldd(begin, codename, end) except loaddataError as e: print(f"\t{e}") raise loaddataError print(f"\t{codename}获取日K线数{len(klist)}") # 由于klist数据集是被hlp_env, trd_env和trade_env共享的,指向同一地址 # 因此任意指针均可调用 # 设置策略运行参数环境 hlp_env = HLPoint(klist, codename) hlp_env.init_hl() hlp_env.get_hl() try: trd_env = Trend(hlp_env) trd_env.get_trend() except TrendError as e: print(e) return try: trade_env = Trade(code=codename, klist=hlp_env.klist, hpi=hlp_env.hpi, lpi=hlp_env.lpi) trade_env.get_bs() except Exception as e: print(e) return for k in trade_env.klist: k.t += " 15:00:00" # 统一日线时间与分钟级别时间的表示方法 "yyyy-mm-dd HH:MM:SS" # note = [[1, hlp_env.temp_h, hlp_env.temp_min], # [0, hlp_env.temp_l, hlp_env.temp_max]][hlp_env.hl == "l"] locale.setlocale(locale.LC_CTYPE, "chinese") # 创建回测表现统计操作对象 stat = Stat(hlp_env=hlp_env, trd_env=trd_env, trade_env=trade_env) stat.get_mkt_p() hlp_tb = stat.get_hl_info() bsp_tb = stat.get_bs_info() account_row = stat.get_account_info() strategy_row = stat.get_strategy_info() # 打包回测结果总结 # res_pac = {"hlp": hlp_tb, "bsp": bsp_tb, "account": account_row, "strategy": strategy_row} stat.get_performance() # 创建图像操作对象 graph_obj = BSgraph(trade_env=trade_env, stat=stat) # 向回测全局对象返回结果总结 wrapper_df = graph_obj.wrapper_to_global_backtest() # 该股票在总表中的信息 if paint: # 绘图并获取图像地址 gdir = graph_obj.performance( trdchg=trd_env.trdchg, dir=dir, star=star, ) print(f"回测图像输出到{gdir}") # return res_pac, gdir return wrapper_df else: # return res_pac return wrapper_df
def runbacktest(begin=BEGIN_DATE, codename="600519.SH", dir=GRAPH, end=END_DATE, paint=True, star=False): """ 设置策略环境参数,并运行部分回测策略 :param begin: 回测开始时间 :param codename: 回测股票代码或名称 :param thresh: 日线高低点间隔交易日长度 :param dir: 作图目录地址 :param end: 回测结束时间,默认当前 :param bounceThresh: 严格下跌过程中反弹超过bounceThresh交易日确认上涨,默认为65天 :param paint: bool值,是否画图,默认为True :param star: bool值,最后一个标记星星,默认为False :return: 返回策略环境对象整体和图像地址 """ print(f"BS日线策略:正在回测{codename}...") try: klist = ldd(begin, codename, end) except loaddataError as e: print(f"\t{e}") print(f"\t{codename}获取日K线数{len(klist)}") # 设置策略运行参数环境 hlp_env = HLPoint(klist, codename) hlp_env.init_hl() hlp_env.get_hl() try: trd_env = Trend(hlp_env) trd_env.get_trend() except TrendError as e: print(e) return note = [[1, hlp_env.temp_h, hlp_env.temp_min], [0, hlp_env.temp_l, hlp_env.temp_max]][hlp_env.hl == "l"] locale.setlocale(locale.LC_CTYPE, "chinese") # 设置画图环境参数 graph_obj = BSgraph(hlist=hlp_env.hpi, llist=hlp_env.lpi, data=hlp_env.klist, codename=codename, note=note) strategy_info = graph_obj.strategy_info( max(hlp_env.hpi[-1], hlp_env.lpi[-1]), hlp_env.space_h, hlp_env.space_l) print(f"\t{codename}当前趋势{trd_env.trdnow}") stock_info = [] for hh in hlp_env.hpi: stock_info.append((hlp_env.klist[hh].t, "H", hlp_env.klist[hh].high, hlp_env.klist[hlp_env.klist[hh].hl_confirmed].t)) for ll in hlp_env.lpi: stock_info.append((hlp_env.klist[ll].t, "L", hlp_env.klist[ll].low, hlp_env.klist[hlp_env.klist[ll].hl_confirmed].t)) stock_info.sort() # 该股票在总表中的信息 if paint: # 绘图并获取图像地址 gdir = graph_obj.performance( trdchg=trd_env.trdchg, dir=dir, star=star, ) return strategy_info, stock_info, gdir else: return strategy_info, stock_info