Ejemplo n.º 1
0
def get_time_range(md, symbol, time_range):
    if time_range:
        start_time, end_time = ts.parse_date_range(time_range)
    else:
        start_time = end_time = None
    oldest_time = md.get_oldest_time(symbol, kl.KLINE_INTERVAL_1MINUTE)
    if not start_time or start_time < oldest_time:
        start_time = oldest_time
    latest_time = md.get_latest_time(symbol, kl.KLINE_INTERVAL_1MINUTE)
    if not end_time or end_time > latest_time:
        end_time = latest_time
    print("  time range: %s ~ %s" % (start_time.strftime("%Y-%m-%d %H:%M:%S"), end_time.strftime("%Y-%m-%d %H:%M:%S")))
    return start_time, end_time
Ejemplo n.º 2
0
def run(args):
    if not (args.m and args.sc and args.r):
        exit(1)

    instance_id = datetime.now().strftime("%Y%m%d-%H%M%S_") + str(
        uuid.uuid1())  # 每次回测都是一个独立的实例
    print('instance_id: %s' % instance_id)

    config = xq.get_strategy_config(args.sc)

    module_name = config["module_name"].replace("/", ".")
    class_name = config["class_name"]

    symbol = config['symbol']
    time_range = args.r
    start_time, end_time = ts.parse_date_range(time_range)

    if args.log:
        logfilename = class_name + "_" + symbol + "_" + time_range + "_" + instance_id + ".log"
        print(logfilename)
        log.init("backtest", logfilename)
        log.info("strategy name: %s;  config: %s" % (class_name, config))

    engine = BackTest(instance_id, args.m, config)
    strategy = ts.createInstance(module_name, class_name, config, engine)
    engine.run(strategy, start_time, end_time)
    engine.analyze(symbol, engine.orders)
    _id = bt_db.insert_one(
        BACKTEST_INSTANCES_COLLECTION_NAME,
        {
            "instance_id": instance_id,
            "start_time": start_time,
            "end_time": end_time,
            "orders": engine.orders,
            "mds": args.m,
            "sc": args.sc,
        },
    )

    if args.chart:
        engine.chart(symbol, start_time, end_time, args)
Ejemplo n.º 3
0
                        help='exchange')
    parser.add_argument('-s', help='symbol (btc_usdt)')
    parser.add_argument('-i', help='interval')
    parser.add_argument('-r', help='time range')
    parser.add_argument('-di',
                        help='display indicators,egg: macd,kdj,MACD,KDJ,RSI')

    add_argument_overlap_studies(parser)

    args = parser.parse_args()
    # print(args)

    if not (args.r and args.i and args.s and args.di and args.e):
        parser.print_help()
        exit(1)

    interval = args.i
    start_time, end_time = ts.parse_date_range(args.r)
    display_count = int((end_time - start_time).total_seconds() /
                        xq.get_interval_seconds(interval))
    print("display_count: %s" % display_count)

    md = DBMD(args.e)
    md.tick_time = datetime.now()
    pre_count = 150
    klines = md.get_klines(args.s, interval, pre_count + display_count,
                           start_time - xq.get_timedelta(interval, pre_count))

    show(args, klines, md.kline_column_names, display_count,
         ts.parse_ic_keys(args.di))
Ejemplo n.º 4
0
        print("value: %s, debug: %s" % (value, debug))

        logfilename = instance_id + ".log"
    elif select == "backtest" or select == "search" or select == "multisearch":
        instance_id = str(uuid.uuid1())  # 每次回测都是一个独立的实例

        if len(sys.argv) > params_index:
            date_range = sys.argv[params_index]
            params_index += 1
        else:
            help_print()
            exit(1)

        logfilename = (class_name + "_" + config["symbol"] + "_" + date_range +
                       "_" + instance_id + ".log")
        start_time, end_time = ts.parse_date_range(date_range)

    else:
        help_print()
        exit(1)

    print(logfilename)
    server_ip = os.environ.get('LOG_SERVER_IP')
    server_port = os.environ.get('LOG_SERVER_PORT')
    print('Log server IP: %s, Log server port: %s' % (server_ip, server_port))
    log.init(select, logfilename, server_ip, server_port)

    log.info("strategy name: %s;  config: %s" % (class_name, config))

    if select == "display":
        engine = Display(instance_id, config)