Esempio n. 1
0
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
Esempio n. 2
0
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