将函数转换为数组而不是Amibroker中的单个值的更优雅的方法

时间:2019-04-06 12:39:25

标签: amibroker

我有以下返回单个值的函数。

function getVolumeHigh_excludeUpBars(period)
{
    volume_exclude_up = IIf( ROC(CLOSE,1) < 0, Volume, 0);

    SELECTED_BAR = SelectedValue( BarIndex() );
    volume_exclude_up[SELECTED_BAR] = Volume[SELECTED_BAR]; 

    volume_High = hhv(volume_exclude_up, period);
    return volume_High;
}

我想将上述函数转换为返回数组而不是单个值。我重写了功能。在这里;

function getArray_VolumeHigh_excludeUpBars(period)
{
    volume_exclude_up = IIf( ROC(CLOSE,1) < 0, Volume, 0);

    for (i=(BAR_COUNT-1);i>=0;i--)
    {
        volume_exclude_up[i] = Volume[i];   
        volume_High[i] = hhv(volume_exclude_up, period);
    }   

    return volume_High;
}

重写的函数效率低下,因为它使用for-do循环将值分别分配给数组。有没有更有效,更优雅的方法来重写该函数?

1 个答案:

答案 0 :(得分:1)

对于您要实现的目标,看起来应该没问题

volume_exclude_up = IIf( ROC(CLOSE,1) < 0, Volume, 0);
volume_High = hhv(volume_exclude_up, period);

使用

volume_exclude_up[SELECTED_BAR] = Volume[SELECTED_BAR]; 

volume_exclude_up[i] = Volume[i]; 

您要将原始的volume_exclude_up变量从条件变量更改为音量。

要么希望volume_exclude_up始终等于所有,要么有条件地等于它,您的代码首先有条件地说相等,然后改变主意并说,始终保持相等。因此,实际上,决定是否要

volume_high = hhv(volume_exclude_up, period)

volume_high = hhv(v, period)