使这个计算某个事件在过去发生的次数的 Amibroker 代码更加优雅

Make this Amibroker code that counts the number of times a certain event happened in the past more elegant

我有以下函数代码 count_event 来计算与过去发生的事件相关的特定条件的次数。

此代码的问题在于它手动逐一获取有关每个事件的信息。它手动获取过去由 numBars 定义的 3 个事件,numBars 是过去的柱数以计算事件。完全有可能过去发生的事件远不止 3 件。由于 Amibroker 处理数组的方式,我不知道如何解决这个问题。

//get number of bars that have passed since nth occurrence when array was true
function bars_since_n(array, nth_occurence)
{
    bi = BarIndex();
    bars_since_nth = bi - ValueWhen(  array, bi, nth_occurence );

    return bars_since_nth;
}

//Count number of times a certain condition related an event happened in the past defined by numBars
function count_event(numBars)
{
    event_high = get_event();

    bars_since_high_1 = bars_since_n(event_high, 1);
    bars_since_high_2 = bars_since_n(event_high, 2);
    bars_since_high_3 = bars_since_n(event_high, 3);

    event_high_1 = ValueWhen(event_high, High, 1);
    event_high_2 = ValueWhen(event_high, High, 2);
    event_high_3 = ValueWhen(event_high, High, 3);

    count_1 = iif((event_high_1 >= 0.99*Close AND bars_since_high_1 <= numBars), 1, 0 );
    count_2 = iif((event_high_2 >= 0.99*Close AND bars_since_high_2 <= numBars), 1, 0 );
    count_3 = iif((event_high_3 >= 0.99*Close AND bars_since_high_3 <= numBars), 1, 0 );

    count = count_1 + count_2 + count_3;

    return count;
}

正如乔纳斯在评论中所说,这个问题已经得到解答 here

如果您需要比提供的线程中给出的更多解释,我将非常乐意解释。