缠论数据计算性能


演示平台信息:

操作系统:Ubuntu
Python 3.10
CPU:i9 12900k
内存:32G

测试两种计算方式:

  1. 批量一次性计算 50000 跟K线数据用时
  2. 循环每根K线进行追加更新计算(模拟回测)

代码如下:

    from chanlun import cl
    from chanlun.exchange.exchange_db import ExchangeDB
    import time

    cl_config = {
        'fx_bh': 'fx_bh_yes', 'fx_qj': 'fx_qj_k', 'bi_type': 'bi_type_old', 'bi_bzh': 'bi_bzh_yes',
        'bi_qj': 'bi_qj_dd', 'bi_fx_cgd': 'bi_fx_cgd_no', 'xd_bzh': 'xd_bzh_yes', 'zsd_bzh': 'zsd_bzh_yes',
        'xd_qj': 'xd_qj_dd', 'zsd_qj': 'zsd_qj_dd',
        'zs_bi_type': 'zs_type_bz', 'zs_xd_type': 'zs_type_bz',
        'zs_wzgx': 'zs_wzgx_zggdd', 'zs_qj': 'zs_qj_ck'
    }

    ex = ExchangeDB('a')
    klines = ex.klines('SHSE.000001', '5m', args={'limit': 50000})
    print('K线数量:', len(klines))

    # 直接调用 process_klines 进行计算
    s_time = time.time()
    cd_1 = cl.CL('SHSE.000001', '5m', cl_config).process_klines(klines)
    print('计算后的K线数量:', len(cd_1.get_klines()))
    print('process_klines 一次批量计算 50000 用时:', time.time() - s_time)

    # 每根K线进行逐次计算
    s_time = time.time()
    cd_2 = cl.CL('SHSE.000001', '5m', cl_config)
    for i in range(1, len(klines) + 1):
        cd_2.process_klines(klines[i - 1:i:])
    print('计算后的K线数量:', len(cd_1.get_klines()))
    print('process_klines 逐跟K线计算 50000 用时:', time.time() - s_time)

结果:

    K线数量: 50000
    计算后的K线数量: 50000
    process_klines 一次批量计算 50000 用时: 37.42770791053772
    计算后的K线数量: 50000
    process_klines 逐跟K线计算 50000 用时: 59.82140636444092