AB各版本间运算效能比较

Discussion in 'AmiBroker' started by xMore, Oct 25, 2012.

  1. 测试环境:
     AB版本 v5.50.5(x64试用版, x32破解版);
     操作系统 Win7x64;
     硬件 AMD AthlonII x4 640 oc4G;
     数据 国内市场沪深A股 2428只(RAMDisk);
     内容 MA、BOLL、Fibonacci、周期日周月
     方法 测试多次取平均值;

    测试结果:
    版本  类型   时间(s)  %比
    x64  2T2C  29.31  100%
    x64  4T4C (需注册版)
    x64  2T2Cx2  15.89  185%
    x64  2T4C  28.33  103%
    x32  4T4C  21.00  140%
    x32  4T2C  39.33   75%

    注:类型 T=AB线程数,C=CPU核心数
     
  2. 很好的benchmark,谢谢~

    顺便问一下,
    第一行数据的100%是什么意思?
    第三行的 2T2Cx2 呢?
     
  3. 100% 比较以此为参照
    2T2Cx2 同时跑2个分析器
     
  4. 嗯,那看来最快的就是2个AB线程,2个CPU核,2个分析器
    你的分析结论是...... ?
     
  5. 试用版限制一个分析器只能使用2线程,尽量想办法用满4核。
    注册版就没这个限制了,一个分析器用满系统核心。
    这个测试是说明64位比32位在双核系统下快25%;在4核系统下至少快45%。

    如果有朋友愿意提供64位的注册文件,就可做完整的测试,
    保证只断网离线使用,绝不会发生在线检测冲突;
    或者,可付费买个离线版,绝不冲突,否则都没法用了。
     
  6. 在5.6.02 RC2 x64基础上补齐,测试结果:
    版本  类型   时间(s)  %比
    x64  2T4C  34    100%
    x64  4T4C  18    189%

    注:在RC1的时候,就已经发现了5.06要比5.05慢,编译优化效果差了。
     
  7. 分析器,扫描测试用例公式:

    function MaScan(cInterval)
    {
    TimeFrameSet(cInterval);
    M5 = MA(C, 5);
    M10 = MA(C,10);
    M20 = MA(C,20);
    M30 = MA(C,30);
    M50 = MA(C,50);
    M60 = MA(C,60);

    M100 = MA(C,100);
    M120 = MA(C,120);
    M200 = MA(C,200);
    M250 = MA(C,250);
    TimeFrameRestore();

    M5 = TimeFrameExpand(M5, cInterval);
    M10 = TimeFrameExpand(M10, cInterval);
    M20 = TimeFrameExpand(M20, cInterval);
    M30 = TimeFrameExpand(M30, cInterval);
    M50 = TimeFrameExpand(M50, cInterval);
    M60 = TimeFrameExpand(M60, cInterval);

    M100 = TimeFrameExpand(M100, cInterval);
    M120 = TimeFrameExpand(M120, cInterval);
    M200 = TimeFrameExpand(M200, cInterval);
    M250 = TimeFrameExpand(M250, cInterval);

    return True;
    }

    function BiBollScan(cInterval)
    {
    TimeFrameSet(cInterval);
    BBI_M = (MA(C, 4)+MA(C, 8)+MA(C, 16)) / 3;
    BBI_U = BBI_M+3*StDev(BBI_M,10);
    BBI_D = BBI_M-3*StDev(BBI_M,10);

    Boll_M = MA(C, 20);
    Boll_U = BBandTop(C, 20, 2);
    Boll_D = BBandBot(C, 20, 2);
    TimeFrameRestore();

    BBI_M = TimeFrameExpand(BBI_M, cInterval);
    BBI_U = TimeFrameExpand(BBI_U, cInterval);
    BBI_D = TimeFrameExpand(BBI_D, cInterval);

    Boll_M = TimeFrameExpand(Boll_M, cInterval);
    Boll_U = TimeFrameExpand(Boll_U, cInterval);
    Boll_D = TimeFrameExpand(Boll_D, cInterval);

    return True;
    }

    function FiboScan(cInterval)
    {
    TimeFrameSet(cInterval);

    HLH = HHV(H,250);
    HLL = LLV(L,250);

    HLR = HLH-HLL;
    HL8 = HLL+HLR*0.809;
    HL6 = HLL+HLR*0.618;
    HL5 = HLL+HLR*0.5;
    HL3 = HLL+HLR*0.382;
    HL2 = HLL+HLR*0.191;

    CCH = HHV(C,250);
    CCL = LLV(C,250);

    CCR = CCH-CCL;
    CC8 = CCL+CCR*0.809;
    CC6 = CCL+CCR*0.618;
    CC5 = CCL+CCR*0.5;
    CC3 = CCL+CCR*0.382;
    CC2 = CCL+CCR*0.191;

    TimeFrameRestore();

    HLH = TimeFrameExpand(HLH, cInterval);
    HLL = TimeFrameExpand(HLL, cInterval);
    HL8 = TimeFrameExpand(HL8, cInterval);
    HL6 = TimeFrameExpand(HL6, cInterval);
    HL5 = TimeFrameExpand(HL5, cInterval);
    HL3 = TimeFrameExpand(HL3, cInterval);
    HL2 = TimeFrameExpand(HL2, cInterval);

    CCH = TimeFrameExpand(CCH, cInterval);
    CCL = TimeFrameExpand(CCL, cInterval);
    CC8 = TimeFrameExpand(CC8, cInterval);
    CC6 = TimeFrameExpand(CC6, cInterval);
    CC5 = TimeFrameExpand(CC5, cInterval);
    CC3 = TimeFrameExpand(CC3, cInterval);
    CC2 = TimeFrameExpand(CC2, cInterval);

    return True;
    }


    Buy=Sell=Short=Cover=0;
    if(True)
    {
      MaScan(inDaily); MaScan(inWeekly); MaScan(inMonthly);

      BiBollScan(inDaily); BiBollScan(inWeekly); BiBollScan(inMonthly);

      FiboScan(inDaily); FiboScan(inWeekly); FiboScan(inMonthly);
    }

    Filter = True;