如何统计某个条件出现的次数?

Discussion in 'AmiBroker' started by alvaning, Oct 20, 2008.

  1. 请问在大智慧里面的count功能在AFL里是哪个函数?如何使用? 先多谢了。
     
  2. tj1=condition;//TJ1=该条件

    tj2=时间范围的定义;
    次数=cum(iif(tj1 and tj2,1,0));

    试一下!
     
  3. 多谢了,我这个周末试试
    周末愉快!
     
  4. 再问一下,如何将每天统计的分开。
    我想统计每天上升的分钟数和每天下降的分钟数(每天第一分钟除外),然后每天得出一个数值,做平均线,那么怎么让程序自动将每天分开?
    新学AFL,还请多多指教。
     
  5. 我只能提示你一下:"昨天"与"今天"之间的时间参数有何不同,今天的第一分钟和昨天的最后一分钟有何参数不同,利用这个不同做间隔.
    另:AFL并不是很难的语言,简单的数据统计比较容易完成.但方法(或算法)必须在在自己理解的基础上不断的实践才会对今后的编程过程形成经验积累.
     
  6. 我现在用一个最笨的方法,定义了093000和160000两个Bar,timenum()在这之间,且Datenum()不等于DateNum(),-1,index为1,否则为0,然后每个volume都最后与index相乘。非程序员出身,见笑了。
    我想应该有更好的办法解决这个问题,还请多指教。

     
  7. 1.如果只是当日统计是可以的.
    2.如果你是想用以分钟为单位的每天最尾分钟的当日统计值做以天为单位的该值的移动平均,需要TimeFrameCompress()之类的功能做时间帧转换.
     
  8. 多谢指教。
    我现在想按天统计每分钟上升和下降的量的总和,也就是说上升Volume为正,下降为负,每天相加,下面这个公式好像一天都不work,跨天以后ABV就没有了,第一天ABVtoday又没有,不知道问题出在哪儿,还请继续赐教。

    TimeFrameSet(in1Minute);
    Bars_so_far_today = 1 + BarsSince( Day() != Ref(Day(), -1));
    StartBar=ValueWhen(TimeNum() == 093000, BarIndex());
    EndBar=ValueWhen(TimeNum()==160000, BarIndex());
    ABV=IIf(Close>Ref(Close,-1), V, -V);
    ABVToday=Sum(ABV,EndBar);
    Plot(ABV,"ABV",colorGreen, styleCandle);
    Plot(ABVToday,"ABVToday", colorBlue,styleLine);
    TimeFrameRestore();
     
  9. 看来你需要反复阅读并理解USERGUIDE,我可以给出并非唯一的答案,但这种帮助可能意义不大:
    Bars=1 + BarsSince( Day() != Ref(Day(), -1));
    V_up=IIf(bars>1 AND Close>=Ref(Close,-1), V, 0);
    V_down=IIf(bars>1 AND Close<Ref(Close,-1), V, 0);
    V_up_all=IIf(bars<Ref(bars,-1),Sum(V_up,Ref(Bars,-1)),0);
    V_down_all=IIf(bars<Ref(bars,-1),Sum(V_down,Ref(Bars,-1)),0);
     
  10. 多谢多谢。说得是,我是需要反复读guide了,感觉写起东西来全无把握。