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

More elegant way to convert this function to return array instead of single value in Amibroker

我有以下函数,它 return 是单个值。

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;
}

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

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 循环将值单独赋值到数组中。有没有更高效优雅的方法重写函数?

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

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 等于时间 all 的音量,还是有条件地等于它,您的代码首先说有条件地等于它,然后改变主意并说,始终等于它。所以实际上,决定你是否想要

volume_high = hhv(volume_exclude_up, period)

volume_high = hhv(v, period)