使这个计算某个事件在过去发生的次数的 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。
如果您需要比提供的线程中给出的更多解释,我将非常乐意解释。
我有以下函数代码 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。
如果您需要比提供的线程中给出的更多解释,我将非常乐意解释。